mmt-testlight 0.3.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 +50 -0
- package/dist/cli.js +407 -0
- package/dist/cli.js.map +1 -0
- package/dist/loadTest.js +36 -0
- package/dist/loadTest.js.map +1 -0
- package/dist/mockRunner.js +189 -0
- package/dist/mockRunner.js.map +1 -0
- package/dist/runArgs.js +304 -0
- package/dist/runArgs.js.map +1 -0
- package/dist/runArgs.test.js +83 -0
- package/dist/runArgs.test.js.map +1 -0
- package/dist/runTest.js +187 -0
- package/dist/runTest.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/cli.js +445 -0
- package/dist-cjs/cli.js.map +1 -0
- package/dist-cjs/loadTest.js +44 -0
- package/dist-cjs/loadTest.js.map +1 -0
- package/dist-cjs/mockRunner.js +229 -0
- package/dist-cjs/mockRunner.js.map +1 -0
- package/dist-cjs/runArgs.js +345 -0
- package/dist-cjs/runArgs.js.map +1 -0
- package/dist-cjs/types.js +3 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +51 -0
- package/src/cli-bridge.mjs +41 -0
- package/src/cli.ts +450 -0
- package/src/loadTest.ts +38 -0
- package/src/mockRunner.ts +212 -0
- package/src/pkg-entry.cjs +1096 -0
- package/src/runArgs.ts +353 -0
- package/src/types.ts +11 -0
- package/tsconfig.cjs.json +13 -0
- package/tsconfig.json +22 -0
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Multimeter CLI (mmtcli)
|
|
2
|
+
|
|
3
|
+
CLI runner for Multimeter test files.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npx testlight run sample.yaml
|
|
9
|
+
testlight run test.mmt.yaml -o result.json
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Commands:
|
|
13
|
+
- `testlight run <file>`
|
|
14
|
+
- `testlight version-info`
|
|
15
|
+
|
|
16
|
+
## Build
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
npm install
|
|
20
|
+
npm run build
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Bundle single-file binary (pkg)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
npm run pkg
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Integrate deeper execution by wiring real core runtime logic in `runTestObject`.
|
|
30
|
+
|
|
31
|
+
## Standalone binary for CI/CD
|
|
32
|
+
|
|
33
|
+
The `pkg` step builds self-contained binaries (macOS/Linux/Windows) under `dist/bin`.
|
|
34
|
+
|
|
35
|
+
- No Node.js is required on the machine running the binary.
|
|
36
|
+
- Core runtime (`mmt-core`) and HTTP client (`axios`) are bundled.
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
# macOS
|
|
42
|
+
./dist/bin/testlight-macos version-info
|
|
43
|
+
./dist/bin/testlight-macos to-js ../examples/test/login_and_get_user_info.mmt
|
|
44
|
+
./dist/bin/testlight-macos run ../examples/test/login_and_get_user_info.mmt --quiet
|
|
45
|
+
|
|
46
|
+
# Linux
|
|
47
|
+
./dist/bin/testlight-linux run path/to/test.mmt --quiet
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Tip: Upload the platform binary to your artifact store and invoke it in pipelines.
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import * as mmtcore from 'mmt-core';
|
|
5
|
+
// Import from mmt-core root exports to avoid subpath resolution issues under
|
|
6
|
+
// pkg
|
|
7
|
+
import { apiParsePack, docHtml, docParsePack, runner } from 'mmt-core';
|
|
8
|
+
/**
|
|
9
|
+
* Generic resolver for mmt-core exports that handles three resolution strategies:
|
|
10
|
+
* 1. pkg snapshot paths (require 'mmt-core/dist/...')
|
|
11
|
+
* 2. CJS/Node16 paths (require 'mmt-core/...')
|
|
12
|
+
* 3. Fallback from mmtcore namespace
|
|
13
|
+
*/
|
|
14
|
+
function resolveCoreExport(module, exportName, fallback) {
|
|
15
|
+
try {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
17
|
+
const mod = require(`mmt-core/dist/${module}.js`);
|
|
18
|
+
if (mod && typeof mod[exportName] === 'function') {
|
|
19
|
+
return mod[exportName];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch { /* pkg path not available */ }
|
|
23
|
+
try {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
25
|
+
const mod = require(`mmt-core/${module}`);
|
|
26
|
+
if (mod && typeof mod[exportName] === 'function') {
|
|
27
|
+
return mod[exportName];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch { /* CJS path not available */ }
|
|
31
|
+
return fallback ?? mmtcore?.[module]?.[exportName] ?? null;
|
|
32
|
+
}
|
|
33
|
+
async function loadCoreExport(module, exportName) {
|
|
34
|
+
// When running as ESM, prefer dynamic import
|
|
35
|
+
try {
|
|
36
|
+
const mod = await import(`mmt-core/${module}`);
|
|
37
|
+
if (mod && typeof mod[exportName] === 'function') {
|
|
38
|
+
return mod[exportName];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch { /* ESM path not available */ }
|
|
42
|
+
return resolveCoreExport(module, exportName);
|
|
43
|
+
}
|
|
44
|
+
import path from 'path';
|
|
45
|
+
import { summarize } from './loadTest.js';
|
|
46
|
+
import { startMockServerFromPath, stopAllServers } from './mockRunner.js';
|
|
47
|
+
import { buildCliRunArgs } from './runArgs.js';
|
|
48
|
+
// Defer importing runTest until needed to avoid pulling axios for to-js
|
|
49
|
+
const program = new Command();
|
|
50
|
+
// Resolve version from package.json when available; fallback to a single const
|
|
51
|
+
// here.
|
|
52
|
+
function resolveCliVersion() {
|
|
53
|
+
const fallback = '0.2.0';
|
|
54
|
+
try {
|
|
55
|
+
const pkgPath = path.resolve('mmtcli', '.', 'package.json');
|
|
56
|
+
const candidates = [pkgPath];
|
|
57
|
+
for (const p of candidates) {
|
|
58
|
+
if (p && fs.existsSync(p)) {
|
|
59
|
+
const txt = fs.readFileSync(p, 'utf8');
|
|
60
|
+
const pkg = JSON.parse(txt);
|
|
61
|
+
if (pkg && typeof pkg.version === 'string' && pkg.version) {
|
|
62
|
+
return pkg.version;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
}
|
|
69
|
+
return fallback;
|
|
70
|
+
}
|
|
71
|
+
const CLI_VERSION = resolveCliVersion();
|
|
72
|
+
program.name('multimeter')
|
|
73
|
+
.description('Multimeter CLI runner')
|
|
74
|
+
.version(CLI_VERSION, '-v, --version', 'output the version number');
|
|
75
|
+
program.option('--log-level <level>', 'Set log level (error|warn|info|debug|trace)', 'info');
|
|
76
|
+
program.command('run')
|
|
77
|
+
.argument('<file>', 'Test file (.yaml/.yml/.json/.mmt)')
|
|
78
|
+
.option('-q, --quiet', 'Minimal output', false)
|
|
79
|
+
.option('-o, --out <file>', 'Write result JSON to file')
|
|
80
|
+
.option('-i, --input <values...>', 'Input variables as key value pairs (repeatable)')
|
|
81
|
+
.option('-e, --env <values...>', 'Environment variables as key value pairs or key=val (repeatable)')
|
|
82
|
+
.option('--env-file <path>', 'Environment file (.mmt/.yaml) to read variables from')
|
|
83
|
+
.option('--preset <name>', 'Preset name from env file (e.g., runner.dev) or just name under runner')
|
|
84
|
+
.option('--example <name|#n>', 'Run a named example (matches name) or numeric index (#1 = first)')
|
|
85
|
+
.option('-p, --print-js', 'Print generated JS before executing', false)
|
|
86
|
+
.option('--report <format>', 'Generate test report: junit, mmt, html, or md')
|
|
87
|
+
.option('--report-file <path>', 'Output path for the report file (default depends on format)')
|
|
88
|
+
.action(async (file, opts) => {
|
|
89
|
+
try {
|
|
90
|
+
const runJSCode = await loadCoreExport('jsRunner', 'runJSCode');
|
|
91
|
+
if (typeof runJSCode !== 'function') {
|
|
92
|
+
throw new Error('Internal error: runJSCode is not available');
|
|
93
|
+
}
|
|
94
|
+
const full = path.resolve(process.cwd(), file);
|
|
95
|
+
const rawText = fs.readFileSync(full, 'utf8');
|
|
96
|
+
const raw = /\.json$/i.test(full) ? JSON.parse(rawText) : yaml.load(rawText);
|
|
97
|
+
const summary = summarize(raw);
|
|
98
|
+
if (!opts.quiet) {
|
|
99
|
+
console.log(`Loaded: ${path.resolve(file)} (${summary})`);
|
|
100
|
+
}
|
|
101
|
+
const { runFileOptions, networkConfig, outFile, printJs, reportFormat, reportFile, getReportResults } = buildCliRunArgs(file, { ...opts, logLevel: program.opts().logLevel });
|
|
102
|
+
// Apply network config if certificates are configured
|
|
103
|
+
if (networkConfig) {
|
|
104
|
+
try {
|
|
105
|
+
const setRunnerNetworkConfig = await loadCoreExport('jsRunner', 'setRunnerNetworkConfig');
|
|
106
|
+
if (setRunnerNetworkConfig) {
|
|
107
|
+
setRunnerNetworkConfig(networkConfig);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
console.warn(`Unable to apply certificate settings: ${e}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const runOpts = { ...runFileOptions };
|
|
115
|
+
// Create serverRunner to start mock servers from suite servers and test run steps
|
|
116
|
+
const cliServerRunner = async (alias, filePath) => {
|
|
117
|
+
if (!opts.quiet) {
|
|
118
|
+
console.log(`Starting mock server: ${alias}`);
|
|
119
|
+
}
|
|
120
|
+
return startMockServerFromPath(filePath, runOpts.envvar || {});
|
|
121
|
+
};
|
|
122
|
+
runOpts.serverRunner = cliServerRunner;
|
|
123
|
+
runOpts.jsRunner = (ctx) => runJSCode({ ...ctx, serverRunner: cliServerRunner });
|
|
124
|
+
let runOutcome;
|
|
125
|
+
try {
|
|
126
|
+
runOutcome = await runner.runFile(runOpts);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
// Always stop mock servers after run completes
|
|
130
|
+
stopAllServers();
|
|
131
|
+
}
|
|
132
|
+
const { js, result } = runOutcome;
|
|
133
|
+
if (printJs) {
|
|
134
|
+
console.log(js.trim());
|
|
135
|
+
}
|
|
136
|
+
if (!opts.quiet) {
|
|
137
|
+
console.log(`Success: ${result.success}`);
|
|
138
|
+
console.log(`Duration: ${mmtcore.CommonData.formatDuration(result.durationMs)}`);
|
|
139
|
+
if (result.errors.length) {
|
|
140
|
+
console.log('Errors:');
|
|
141
|
+
result.errors.forEach((e) => console.log(' -', e));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (outFile) {
|
|
145
|
+
const outPath = path.resolve(outFile);
|
|
146
|
+
fs.writeFileSync(outPath, JSON.stringify(result, null, 2), 'utf8');
|
|
147
|
+
if (!opts.quiet) {
|
|
148
|
+
console.log(`Result written: ${outPath}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Generate and write test report if --report was specified
|
|
152
|
+
if (reportFormat && reportFile && getReportResults) {
|
|
153
|
+
const collectedResults = getReportResults();
|
|
154
|
+
let reportContent;
|
|
155
|
+
const serializers = {
|
|
156
|
+
junit: mmtcore.junitXml?.generateJunitXml,
|
|
157
|
+
mmt: mmtcore.mmtReport?.generateMmtReport,
|
|
158
|
+
html: mmtcore.reportHtml?.generateReportHtml,
|
|
159
|
+
md: mmtcore.reportMarkdown?.generateReportMarkdown,
|
|
160
|
+
};
|
|
161
|
+
const serializer = serializers[reportFormat];
|
|
162
|
+
if (typeof serializer === 'function') {
|
|
163
|
+
reportContent = serializer(collectedResults);
|
|
164
|
+
}
|
|
165
|
+
if (reportContent) {
|
|
166
|
+
const reportPath = path.resolve(reportFile);
|
|
167
|
+
fs.writeFileSync(reportPath, reportContent, 'utf8');
|
|
168
|
+
if (!opts.quiet) {
|
|
169
|
+
console.log(`Report written: ${reportPath}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (!opts.quiet) {
|
|
173
|
+
console.warn(`Unknown report format: ${reportFormat}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Handle suite exports (from suite file's export: field)
|
|
177
|
+
const suiteExports = runOutcome.suiteExports;
|
|
178
|
+
if (suiteExports && Array.isArray(suiteExports.paths) && suiteExports.collectedResults) {
|
|
179
|
+
const suiteDir = path.dirname(path.resolve(process.cwd(), file));
|
|
180
|
+
const projectRoot = runFileOptions.projectRoot;
|
|
181
|
+
for (const exportPath of suiteExports.paths) {
|
|
182
|
+
try {
|
|
183
|
+
// Resolve path relative to suite file or +/ project root
|
|
184
|
+
let resolvedPath;
|
|
185
|
+
if (exportPath.startsWith('+/')) {
|
|
186
|
+
if (projectRoot) {
|
|
187
|
+
resolvedPath = path.resolve(projectRoot, exportPath.slice(2));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
if (!opts.quiet) {
|
|
191
|
+
console.warn(`Cannot resolve +/ path without project root: ${exportPath}`);
|
|
192
|
+
}
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
resolvedPath = path.resolve(suiteDir, exportPath);
|
|
198
|
+
}
|
|
199
|
+
// Determine format from extension
|
|
200
|
+
const ext = path.extname(resolvedPath).toLowerCase();
|
|
201
|
+
const formatForExt = {
|
|
202
|
+
'.xml': 'junit',
|
|
203
|
+
'.html': 'html',
|
|
204
|
+
'.md': 'md',
|
|
205
|
+
'.mmt': 'mmt',
|
|
206
|
+
};
|
|
207
|
+
const format = formatForExt[ext];
|
|
208
|
+
if (!format) {
|
|
209
|
+
if (!opts.quiet) {
|
|
210
|
+
console.warn(`Unknown export format for extension ${ext}: ${exportPath}`);
|
|
211
|
+
}
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// Generate report content
|
|
215
|
+
const exportSerializers = {
|
|
216
|
+
junit: mmtcore.junitXml?.generateJunitXml,
|
|
217
|
+
mmt: mmtcore.mmtReport?.generateMmtReport,
|
|
218
|
+
html: mmtcore.reportHtml?.generateReportHtml,
|
|
219
|
+
md: mmtcore.reportMarkdown?.generateReportMarkdown,
|
|
220
|
+
};
|
|
221
|
+
const serializer = exportSerializers[format];
|
|
222
|
+
if (typeof serializer !== 'function') {
|
|
223
|
+
if (!opts.quiet) {
|
|
224
|
+
console.warn(`Export serializer not available for format: ${format}`);
|
|
225
|
+
}
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (!opts.quiet) {
|
|
229
|
+
console.log(`Exporting results to ${resolvedPath}`);
|
|
230
|
+
}
|
|
231
|
+
const content = serializer(suiteExports.collectedResults);
|
|
232
|
+
// Create parent directories if they don't exist
|
|
233
|
+
const parentDir = path.dirname(resolvedPath);
|
|
234
|
+
if (!fs.existsSync(parentDir)) {
|
|
235
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
236
|
+
}
|
|
237
|
+
fs.writeFileSync(resolvedPath, content, 'utf8');
|
|
238
|
+
if (!opts.quiet) {
|
|
239
|
+
console.log(`Suite export written: ${resolvedPath}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (e) {
|
|
243
|
+
if (!opts.quiet) {
|
|
244
|
+
console.warn(`Failed to write suite export ${exportPath}: ${e?.message || e}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
process.exit(result.success ? 0 : 1);
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
if (!opts.quiet) {
|
|
253
|
+
}
|
|
254
|
+
console.error('Error:', e?.message || e);
|
|
255
|
+
process.exit(2);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
program.command('print-js')
|
|
259
|
+
.argument('<file>', 'Test file (.yaml/.yml/.json/.mmt)')
|
|
260
|
+
.description('Convert a test definition file to executable JS using JSer and print to stdout')
|
|
261
|
+
.option('-s, --stages', 'Include stage headers as comments when stages exist', true)
|
|
262
|
+
.option('-i, --input <values...>', 'Input variables as key value pairs (repeatable)')
|
|
263
|
+
.option('-e, --env <values...>', 'Environment variables as key value pairs or key=val (repeatable)')
|
|
264
|
+
.option('--env-file <path>', 'Environment file (.mmt/.yaml) to read variables from')
|
|
265
|
+
.option('--preset <name>', 'Preset name from env file (e.g., runner.dev) or just name under runner')
|
|
266
|
+
.option('--example <name|#n>', 'Select a named example (matches name) or numeric index (#1 = first)')
|
|
267
|
+
.action(async (file, opts) => {
|
|
268
|
+
try {
|
|
269
|
+
const { runFileOptions } = buildCliRunArgs(file, { ...opts, logLevel: program.opts().logLevel });
|
|
270
|
+
const rawText = runFileOptions.file;
|
|
271
|
+
const envVars = (runFileOptions.envvar || {});
|
|
272
|
+
const inputs = (runFileOptions.manualInputs || {});
|
|
273
|
+
const fullPath = runFileOptions.filePath || path.resolve(process.cwd(), file);
|
|
274
|
+
const js = await mmtcore.runner.generateTestJs({
|
|
275
|
+
rawText,
|
|
276
|
+
name: path.basename(fullPath).replace(/[^a-zA-Z0-9_]/g, '_'),
|
|
277
|
+
inputs,
|
|
278
|
+
envVars,
|
|
279
|
+
fileLoader: runFileOptions.fileLoader,
|
|
280
|
+
});
|
|
281
|
+
if (!js.trim()) {
|
|
282
|
+
console.error('No JS could be generated (empty flow).');
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
console.log(js.trim());
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
console.error('Error generating JS:', e?.message || e);
|
|
289
|
+
process.exit(2);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
program.command('version-info')
|
|
293
|
+
.description('Show environment info')
|
|
294
|
+
.action(() => {
|
|
295
|
+
console.log(`multimeter cli ${CLI_VERSION}`);
|
|
296
|
+
console.log('Node:', process.version);
|
|
297
|
+
});
|
|
298
|
+
program.command('doc')
|
|
299
|
+
.argument('<file>', 'Doc file (.mmt/.yaml/.yml)')
|
|
300
|
+
.description('Generate documentation from a doc .mmt')
|
|
301
|
+
.option('-o, --out <file>', 'Write output to file (default: <docname>.<ext>)')
|
|
302
|
+
.option('--html', 'Generate HTML (default)', false)
|
|
303
|
+
.option('--md', 'Generate Markdown instead of HTML', false)
|
|
304
|
+
.action(async (file, opts) => {
|
|
305
|
+
try {
|
|
306
|
+
const full = path.resolve(process.cwd(), file);
|
|
307
|
+
const docDir = path.dirname(full);
|
|
308
|
+
const text = fs.readFileSync(full, 'utf8');
|
|
309
|
+
const doc = docParsePack.yamlToDoc(text);
|
|
310
|
+
const sources = [];
|
|
311
|
+
if (Array.isArray(doc.sources)) {
|
|
312
|
+
sources.push(...doc.sources);
|
|
313
|
+
}
|
|
314
|
+
if (Array.isArray(doc.services)) {
|
|
315
|
+
for (const s of doc.services) {
|
|
316
|
+
if (Array.isArray(s?.sources)) {
|
|
317
|
+
sources.push(...s.sources);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const files = new Set();
|
|
322
|
+
const walk = (p) => {
|
|
323
|
+
if (!fs.existsSync(p)) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const stat = fs.statSync(p);
|
|
327
|
+
if (stat.isDirectory()) {
|
|
328
|
+
for (const entry of fs.readdirSync(p)) {
|
|
329
|
+
walk(path.join(p, entry));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else if (stat.isFile() && p.toLowerCase().endsWith('.mmt')) {
|
|
333
|
+
files.add(p);
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
for (const s of sources) {
|
|
337
|
+
const abs = path.isAbsolute(s) ? s : path.join(docDir, s);
|
|
338
|
+
if (/\.mmt$/i.test(abs)) {
|
|
339
|
+
files.add(abs);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
walk(abs);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
const apis = [];
|
|
346
|
+
for (const f of Array.from(files)) {
|
|
347
|
+
try {
|
|
348
|
+
const t = fs.readFileSync(f, 'utf8');
|
|
349
|
+
const parsed = yaml.load(t);
|
|
350
|
+
if (parsed && parsed.type === 'api') {
|
|
351
|
+
const api = apiParsePack.yamlToAPI(t);
|
|
352
|
+
api.__file = f; // attach file path for grouping
|
|
353
|
+
apis.push(api);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// logo embedding
|
|
360
|
+
let logoDataUrl = undefined;
|
|
361
|
+
const logo = doc?.logo;
|
|
362
|
+
if (logo && typeof logo === 'string' && !/^https?:\/\//i.test(logo) &&
|
|
363
|
+
!/^data:/i.test(logo)) {
|
|
364
|
+
const p = path.isAbsolute(logo) ? logo : path.join(docDir, logo);
|
|
365
|
+
try {
|
|
366
|
+
const data = fs.readFileSync(p);
|
|
367
|
+
const ext = (path.extname(p) || '').toLowerCase();
|
|
368
|
+
const mime = ext === '.png' ? 'image/png' :
|
|
369
|
+
ext === '.jpg' || ext === '.jpeg' ? 'image/jpeg' :
|
|
370
|
+
ext === '.svg' ? 'image/svg+xml' :
|
|
371
|
+
ext === '.gif' ? 'image/gif' :
|
|
372
|
+
'application/octet-stream';
|
|
373
|
+
logoDataUrl = `data:${mime};base64,${data.toString('base64')}`;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const useMd = opts.md && !opts.html; // HTML remains default
|
|
379
|
+
const htmlOrMd = useMd ?
|
|
380
|
+
mmtcore.docMarkdown.buildDocMarkdown(apis, {
|
|
381
|
+
title: doc.title,
|
|
382
|
+
description: doc.description,
|
|
383
|
+
logo: logoDataUrl || doc.logo,
|
|
384
|
+
sources: Array.isArray(doc.sources) ? doc.sources : undefined,
|
|
385
|
+
services: Array.isArray(doc.services) ? doc.services : undefined,
|
|
386
|
+
}) :
|
|
387
|
+
docHtml.buildDocHtml(apis, {
|
|
388
|
+
title: doc.title,
|
|
389
|
+
description: doc.description,
|
|
390
|
+
logo: logoDataUrl || doc.logo,
|
|
391
|
+
sources: Array.isArray(doc.sources) ? doc.sources : undefined,
|
|
392
|
+
services: Array.isArray(doc.services) ? doc.services : undefined,
|
|
393
|
+
});
|
|
394
|
+
const defExt = useMd ? '.md' : '.html';
|
|
395
|
+
const outPath = opts.out ?
|
|
396
|
+
path.resolve(process.cwd(), opts.out) :
|
|
397
|
+
path.resolve(process.cwd(), `${path.basename(full, path.extname(full))}${defExt}`);
|
|
398
|
+
fs.writeFileSync(outPath, htmlOrMd, 'utf8');
|
|
399
|
+
console.log(`Doc generated: ${outPath}`);
|
|
400
|
+
}
|
|
401
|
+
catch (e) {
|
|
402
|
+
console.error('Error generating doc:', e?.message || e);
|
|
403
|
+
process.exit(2);
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
program.parseAsync(process.argv);
|
|
407
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/loadTest.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
export function loadTestFile(filePath) {
|
|
5
|
+
const full = path.resolve(process.cwd(), filePath);
|
|
6
|
+
if (!fs.existsSync(full)) {
|
|
7
|
+
throw new Error(`File not found: ${full}`);
|
|
8
|
+
}
|
|
9
|
+
const txt = fs.readFileSync(full, 'utf8');
|
|
10
|
+
if (/(\.ya?ml|\.mmt)$/i.test(full)) {
|
|
11
|
+
return yaml.load(txt);
|
|
12
|
+
}
|
|
13
|
+
if (/\.json$/i.test(full)) {
|
|
14
|
+
return JSON.parse(txt);
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
return yaml.load(txt);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return JSON.parse(txt);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function extractFlow(obj) {
|
|
24
|
+
if (Array.isArray(obj?.stages)) {
|
|
25
|
+
return { steps: [], stages: obj.stages };
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(obj?.steps)) {
|
|
28
|
+
return { steps: obj.steps };
|
|
29
|
+
}
|
|
30
|
+
return { steps: [] };
|
|
31
|
+
}
|
|
32
|
+
export function summarize(obj) {
|
|
33
|
+
const { steps, stages } = extractFlow(obj);
|
|
34
|
+
return stages ? `stages: ${stages.length}` : `steps: ${steps.length}`;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=loadTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadTest.js","sourceRoot":"","sources":["../src/loadTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAQ;IAChC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,EAAE,CAAC;AACxE,CAAC"}
|