@galaxy-tool-util/cli 0.2.0 → 0.4.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/bin/gxwf.js +43 -19
- package/dist/bin/gxwf.js.map +1 -1
- package/dist/commands/add.js +2 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/clean-tree.d.ts +3 -17
- package/dist/commands/clean-tree.d.ts.map +1 -1
- package/dist/commands/clean-tree.js +30 -29
- package/dist/commands/clean-tree.js.map +1 -1
- package/dist/commands/clean.d.ts +3 -0
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +12 -2
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/clear.js +4 -4
- package/dist/commands/clear.js.map +1 -1
- package/dist/commands/convert-tree.d.ts +2 -1
- package/dist/commands/convert-tree.d.ts.map +1 -1
- package/dist/commands/convert-tree.js +23 -7
- package/dist/commands/convert-tree.js.map +1 -1
- package/dist/commands/convert.d.ts +2 -1
- package/dist/commands/convert.d.ts.map +1 -1
- package/dist/commands/convert.js +36 -4
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +5 -4
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/lint-tree.d.ts +3 -19
- package/dist/commands/lint-tree.d.ts.map +1 -1
- package/dist/commands/lint-tree.js +46 -58
- package/dist/commands/lint-tree.js.map +1 -1
- package/dist/commands/lint.d.ts +8 -4
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +61 -13
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/populate-workflow.js +2 -2
- package/dist/commands/populate-workflow.js.map +1 -1
- package/dist/commands/render-results.d.ts +3 -3
- package/dist/commands/render-results.d.ts.map +1 -1
- package/dist/commands/render-results.js +8 -4
- package/dist/commands/render-results.js.map +1 -1
- package/dist/commands/report-output.d.ts +34 -0
- package/dist/commands/report-output.d.ts.map +1 -0
- package/dist/commands/report-output.js +70 -0
- package/dist/commands/report-output.js.map +1 -0
- package/dist/commands/resolve-tool.js +1 -1
- package/dist/commands/resolve-tool.js.map +1 -1
- package/dist/commands/roundtrip-tree.d.ts +3 -1
- package/dist/commands/roundtrip-tree.d.ts.map +1 -1
- package/dist/commands/roundtrip-tree.js +67 -5
- package/dist/commands/roundtrip-tree.js.map +1 -1
- package/dist/commands/roundtrip.d.ts +2 -1
- package/dist/commands/roundtrip.d.ts.map +1 -1
- package/dist/commands/roundtrip.js +30 -8
- package/dist/commands/roundtrip.js.map +1 -1
- package/dist/commands/schema.js +2 -2
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/strict-options.d.ts +22 -0
- package/dist/commands/strict-options.d.ts.map +1 -0
- package/dist/commands/strict-options.js +18 -0
- package/dist/commands/strict-options.js.map +1 -0
- package/dist/commands/validate-tests-tree.d.ts +36 -0
- package/dist/commands/validate-tests-tree.d.ts.map +1 -0
- package/dist/commands/validate-tests-tree.js +191 -0
- package/dist/commands/validate-tests-tree.js.map +1 -0
- package/dist/commands/validate-tests.d.ts +21 -0
- package/dist/commands/validate-tests.d.ts.map +1 -0
- package/dist/commands/validate-tests.js +83 -0
- package/dist/commands/validate-tests.js.map +1 -0
- package/dist/commands/validate-tree.d.ts +3 -20
- package/dist/commands/validate-tree.d.ts.map +1 -1
- package/dist/commands/validate-tree.js +53 -47
- package/dist/commands/validate-tree.js.map +1 -1
- package/dist/commands/validate-workflow-json-schema.d.ts +8 -2
- package/dist/commands/validate-workflow-json-schema.d.ts.map +1 -1
- package/dist/commands/validate-workflow-json-schema.js +104 -58
- package/dist/commands/validate-workflow-json-schema.js.map +1 -1
- package/dist/commands/validate-workflow.d.ts +17 -10
- package/dist/commands/validate-workflow.d.ts.map +1 -1
- package/dist/commands/validate-workflow.js +185 -59
- package/dist/commands/validate-workflow.js.map +1 -1
- package/dist/commands/workflow-io.d.ts +2 -11
- package/dist/commands/workflow-io.d.ts.map +1 -1
- package/dist/commands/workflow-io.js +7 -16
- package/dist/commands/workflow-io.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/workflow/_templates-bundled.d.ts +2 -0
- package/dist/workflow/_templates-bundled.d.ts.map +1 -0
- package/dist/workflow/_templates-bundled.js +324 -0
- package/dist/workflow/_templates-bundled.js.map +1 -0
- package/dist/workflow/report-templates.d.ts +13 -0
- package/dist/workflow/report-templates.d.ts.map +1 -0
- package/dist/workflow/report-templates.js +91 -0
- package/dist/workflow/report-templates.js.map +1 -0
- package/package.json +7 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate-workflow.js","sourceRoot":"","sources":["../../src/commands/populate-workflow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"populate-workflow.js","sourceRoot":"","sources":["../../src/commands/populate-workflow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,cAAc,EACd,eAAe,GAGhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,IAA6B;IAE7B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAqB;QACtC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,iBAAiB,EAAE,CAAC;KACvD,CAAC;IAEF,IAAI,KAAyB,CAAC;IAC9B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC3D,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC5D,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IAEzB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,IAAI,KAAK,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared rendering for
|
|
2
|
+
* Shared rendering for ValidationStepResult arrays.
|
|
3
3
|
*/
|
|
4
|
-
import type
|
|
4
|
+
import { type ValidationStepResult } from "@galaxy-tool-util/schema";
|
|
5
5
|
export interface RenderSummary {
|
|
6
6
|
validated: number;
|
|
7
7
|
skipped: number;
|
|
8
8
|
}
|
|
9
9
|
/** Render step validation results to console, returning counts. */
|
|
10
|
-
export declare function renderStepResults(results:
|
|
10
|
+
export declare function renderStepResults(results: ValidationStepResult[]): RenderSummary;
|
|
11
11
|
//# sourceMappingURL=render-results.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-results.d.ts","sourceRoot":"","sources":["../../src/commands/render-results.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"render-results.d.ts","sourceRoot":"","sources":["../../src/commands/render-results.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,aAAa,CAiBhF"}
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared rendering for ValidationStepResult arrays.
|
|
3
|
+
*/
|
|
4
|
+
import { SKIP_STATUSES } from "@galaxy-tool-util/schema";
|
|
1
5
|
/** Render step validation results to console, returning counts. */
|
|
2
6
|
export function renderStepResults(results) {
|
|
3
7
|
let validated = 0;
|
|
4
8
|
let skipped = 0;
|
|
5
9
|
for (const r of results) {
|
|
6
|
-
if (r.status
|
|
10
|
+
if (SKIP_STATUSES.has(r.status)) {
|
|
7
11
|
skipped++;
|
|
8
|
-
console.warn(` [${r.
|
|
12
|
+
console.warn(` [${r.step}] skipped — ${r.errors[0] ?? "unknown"}`);
|
|
9
13
|
}
|
|
10
14
|
else if (r.status === "fail") {
|
|
11
15
|
validated++;
|
|
12
|
-
console.error(` [${r.
|
|
16
|
+
console.error(` [${r.step}] tool_state errors (${r.tool_id}):`);
|
|
13
17
|
for (const line of r.errors)
|
|
14
18
|
console.error(` ${line}`);
|
|
15
19
|
}
|
|
16
20
|
else {
|
|
17
21
|
validated++;
|
|
18
|
-
console.log(` [${r.
|
|
22
|
+
console.log(` [${r.step}] tool_state: OK`);
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
return { validated, skipped };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-results.js","sourceRoot":"","sources":["../../src/commands/render-results.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-results.js","sourceRoot":"","sources":["../../src/commands/render-results.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAA6B,MAAM,0BAA0B,CAAC;AAOpF,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC/D,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/B,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,wBAAwB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACjE,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type ReportType = "validate" | "lint" | "clean" | "validate-tree" | "lint-tree" | "clean-tree" | "roundtrip-tree";
|
|
2
|
+
export interface ReportOutputOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Path to write Markdown report to. Commander sets this to `true` (boolean)
|
|
5
|
+
* when `--report-markdown` is passed without a filename — treat as stdout.
|
|
6
|
+
* Use `"-"` explicitly to write to stdout.
|
|
7
|
+
*/
|
|
8
|
+
reportMarkdown?: string | boolean;
|
|
9
|
+
/** Same semantics as reportMarkdown but for HTML output. */
|
|
10
|
+
reportHtml?: string | boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Render and write report output if --report-markdown / --report-html flags
|
|
14
|
+
* were passed. Both can be specified simultaneously.
|
|
15
|
+
*
|
|
16
|
+
* @param templateName - e.g. "validate_tree.md.j2"
|
|
17
|
+
* @param report - the tree report object
|
|
18
|
+
* @param opts - parsed CLI options
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeReportOutput(templateName: string, report: unknown, opts: ReportOutputOptions): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate a standalone HTML page that loads the gxwf-report-shell IIFE
|
|
23
|
+
* bundle from CDN and renders the given report data.
|
|
24
|
+
*
|
|
25
|
+
* The resulting HTML is self-contained (aside from the CDN network request).
|
|
26
|
+
* Use this for --report-html on single-workflow and tree commands.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildReportHtml(type: ReportType, data: unknown, title?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Write an HTML report to the given destination if set.
|
|
31
|
+
* dest follows the same string | boolean convention as reportHtml/reportMarkdown.
|
|
32
|
+
*/
|
|
33
|
+
export declare function writeReportHtml(type: ReportType, data: unknown, dest: string | boolean | undefined, title?: string): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=report-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-output.d.ts","sourceRoot":"","sources":["../../src/commands/report-output.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,MAAM,GACN,OAAO,GACP,eAAe,GACf,WAAW,GACX,YAAY,GACZ,gBAAgB,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,SAAgB,GAAG,MAAM,CAgB9F;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EAClC,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for writing Markdown/HTML rendered reports from CLI commands.
|
|
3
|
+
*/
|
|
4
|
+
import { writeFile } from "node:fs/promises";
|
|
5
|
+
import { renderReport } from "../workflow/report-templates.js";
|
|
6
|
+
// Pin to a specific published gxwf-report-shell version.
|
|
7
|
+
// Bump when a new shell version with user-visible changes is released to npm.
|
|
8
|
+
const SHELL_CDN_VERSION = "0.1.0";
|
|
9
|
+
const SHELL_CDN_BASE = `https://cdn.jsdelivr.net/npm/@galaxy-tool-util/gxwf-report-shell@${SHELL_CDN_VERSION}/dist`;
|
|
10
|
+
/**
|
|
11
|
+
* Render and write report output if --report-markdown / --report-html flags
|
|
12
|
+
* were passed. Both can be specified simultaneously.
|
|
13
|
+
*
|
|
14
|
+
* @param templateName - e.g. "validate_tree.md.j2"
|
|
15
|
+
* @param report - the tree report object
|
|
16
|
+
* @param opts - parsed CLI options
|
|
17
|
+
*/
|
|
18
|
+
export async function writeReportOutput(templateName, report, opts) {
|
|
19
|
+
const dest = opts.reportMarkdown;
|
|
20
|
+
if (!dest)
|
|
21
|
+
return;
|
|
22
|
+
const content = await renderReport(templateName, report);
|
|
23
|
+
// Commander sets dest = true when flag is passed without a filename argument
|
|
24
|
+
if (dest === true || dest === "-") {
|
|
25
|
+
process.stdout.write(content);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
await writeFile(dest, content, "utf-8");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate a standalone HTML page that loads the gxwf-report-shell IIFE
|
|
33
|
+
* bundle from CDN and renders the given report data.
|
|
34
|
+
*
|
|
35
|
+
* The resulting HTML is self-contained (aside from the CDN network request).
|
|
36
|
+
* Use this for --report-html on single-workflow and tree commands.
|
|
37
|
+
*/
|
|
38
|
+
export function buildReportHtml(type, data, title = "gxwf Report") {
|
|
39
|
+
const payload = JSON.stringify({ type, data });
|
|
40
|
+
return `<!DOCTYPE html>
|
|
41
|
+
<html lang="en">
|
|
42
|
+
<head>
|
|
43
|
+
<meta charset="UTF-8">
|
|
44
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
45
|
+
<title>${title}</title>
|
|
46
|
+
<link rel="stylesheet" href="${SHELL_CDN_BASE}/shell.css">
|
|
47
|
+
</head>
|
|
48
|
+
<body>
|
|
49
|
+
<div id="gxwf-report"></div>
|
|
50
|
+
<script>window.__GXWF_REPORT__ = ${payload};</script>
|
|
51
|
+
<script src="${SHELL_CDN_BASE}/shell.iife.js"></script>
|
|
52
|
+
</body>
|
|
53
|
+
</html>`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Write an HTML report to the given destination if set.
|
|
57
|
+
* dest follows the same string | boolean convention as reportHtml/reportMarkdown.
|
|
58
|
+
*/
|
|
59
|
+
export async function writeReportHtml(type, data, dest, title) {
|
|
60
|
+
if (!dest)
|
|
61
|
+
return;
|
|
62
|
+
const content = buildReportHtml(type, data, title);
|
|
63
|
+
if (dest === true || dest === "-") {
|
|
64
|
+
process.stdout.write(content);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await writeFile(dest, content, "utf-8");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=report-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-output.js","sourceRoot":"","sources":["../../src/commands/report-output.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,yDAAyD;AACzD,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,cAAc,GAAG,oEAAoE,iBAAiB,OAAO,CAAC;AAsBpH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAoB,EACpB,MAAe,EACf,IAAyB;IAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACzD,6EAA6E;IAC7E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgB,EAAE,IAAa,EAAE,KAAK,GAAG,aAAa;IACpF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO;;;;;WAKE,KAAK;iCACiB,cAAc;;;;qCAIV,OAAO;iBAC3B,cAAc;;QAEvB,CAAC;AACT,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAgB,EAChB,IAAa,EACb,IAAkC,EAClC,KAAc;IAEd,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,IAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -7,7 +7,7 @@ export async function loadCachedTool(cache, toolId, version) {
|
|
|
7
7
|
if (coords.version === null) {
|
|
8
8
|
return { kind: "no_version", toolId };
|
|
9
9
|
}
|
|
10
|
-
const key = cacheKey(coords.toolshedUrl, coords.trsToolId, coords.version);
|
|
10
|
+
const key = await cacheKey(coords.toolshedUrl, coords.trsToolId, coords.version);
|
|
11
11
|
const tool = await cache.loadCached(key);
|
|
12
12
|
if (tool === null) {
|
|
13
13
|
return { kind: "not_cached", toolId, key };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-tool.js","sourceRoot":"","sources":["../../src/commands/resolve-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAmB,MAAM,wBAAwB,CAAC;AAWnF,MAAM,UAAU,cAAc,CAAC,CAA8B;IAC3D,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAgB,EAChB,MAAc,EACd,OAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-tool.js","sourceRoot":"","sources":["../../src/commands/resolve-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAmB,MAAM,wBAAwB,CAAC;AAWnF,MAAM,UAAU,cAAc,CAAC,CAA8B;IAC3D,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAgB,EAChB,MAAc,EACd,OAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { type StrictOptions } from "./strict-options.js";
|
|
2
|
+
import { type ReportOutputOptions } from "./report-output.js";
|
|
3
|
+
export interface RoundtripTreeOptions extends StrictOptions, ReportOutputOptions {
|
|
2
4
|
cacheDir?: string;
|
|
3
5
|
format?: string;
|
|
4
6
|
json?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtrip-tree.d.ts","sourceRoot":"","sources":["../../src/commands/roundtrip-tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"roundtrip-tree.d.ts","sourceRoot":"","sources":["../../src/commands/roundtrip-tree.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EAAsC,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElG,MAAM,WAAW,oBAAqB,SAAQ,aAAa,EAAE,mBAAmB;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4I7F"}
|
|
@@ -2,20 +2,23 @@
|
|
|
2
2
|
* `gxwf roundtrip-tree` — batch roundtrip validation across a directory.
|
|
3
3
|
* Mirrors the patterns in convert-tree.ts.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import { roundtripValidate, } from "@galaxy-tool-util/schema";
|
|
5
|
+
import { makeNodeToolCache } from "@galaxy-tool-util/core/node";
|
|
6
|
+
import { roundtripValidate, buildRoundTripTreeReport, categoryOf, } from "@galaxy-tool-util/schema";
|
|
7
7
|
import { dirname, join } from "node:path";
|
|
8
8
|
import { loadToolInputsForWorkflow } from "./stateful-tool-inputs.js";
|
|
9
9
|
import { createDefaultResolver } from "./url-resolver.js";
|
|
10
|
+
import { resolveStrictOptions } from "./strict-options.js";
|
|
10
11
|
import { resolveFormat } from "./workflow-io.js";
|
|
11
12
|
import { collectTree, skipWorkflow } from "./tree.js";
|
|
12
13
|
import { countDiffs } from "./roundtrip.js";
|
|
14
|
+
import { writeReportOutput, writeReportHtml } from "./report-output.js";
|
|
13
15
|
export async function runRoundtripTree(dir, opts) {
|
|
14
|
-
const cache =
|
|
16
|
+
const cache = makeNodeToolCache({ cacheDir: opts.cacheDir });
|
|
15
17
|
await cache.index.load();
|
|
16
|
-
if (cache.index.listAll().length === 0) {
|
|
18
|
+
if ((await cache.index.listAll()).length === 0) {
|
|
17
19
|
console.warn("Tool cache is empty — all steps will fall back (no roundtrip possible)");
|
|
18
20
|
}
|
|
21
|
+
const strict = resolveStrictOptions(opts);
|
|
19
22
|
// Only native workflows are eligible; format2 files are skipped.
|
|
20
23
|
const treeResult = await collectTree(dir, async (info, data) => {
|
|
21
24
|
const sourceFormat = resolveFormat(data, opts.format);
|
|
@@ -29,7 +32,15 @@ export async function runRoundtripTree(dir, opts) {
|
|
|
29
32
|
};
|
|
30
33
|
const { resolver, status: toolStatus } = await loadToolInputsForWorkflow(data, "native", cache, expansionOpts);
|
|
31
34
|
const failedLoads = toolStatus.filter((s) => !s.loaded);
|
|
32
|
-
const result = roundtripValidate(data, resolver
|
|
35
|
+
const result = roundtripValidate(data, resolver, {
|
|
36
|
+
strictEncoding: strict.strictEncoding,
|
|
37
|
+
strictStructure: strict.strictStructure,
|
|
38
|
+
strictState: strict.strictState,
|
|
39
|
+
});
|
|
40
|
+
if (result.encodingErrors.length > 0 || result.structureErrors.length > 0) {
|
|
41
|
+
const allErrors = [...result.encodingErrors, ...result.structureErrors];
|
|
42
|
+
throw new Error(`Strict: ${allErrors.join("; ")}`);
|
|
43
|
+
}
|
|
33
44
|
return {
|
|
34
45
|
relativePath: info.relativePath,
|
|
35
46
|
result,
|
|
@@ -57,6 +68,20 @@ export async function runRoundtripTree(dir, opts) {
|
|
|
57
68
|
else
|
|
58
69
|
filesBenignOnly++;
|
|
59
70
|
}
|
|
71
|
+
// Build RoundTripTreeReport for Markdown/HTML rendering
|
|
72
|
+
const roundtripWorkflows = treeResult.outcomes.map((o) => {
|
|
73
|
+
const relPath = o.info.relativePath;
|
|
74
|
+
if (o.error)
|
|
75
|
+
return makeRoundTripResult(relPath, null, o.error, null);
|
|
76
|
+
if (o.skipped)
|
|
77
|
+
return makeRoundTripResult(relPath, null, null, "legacy_encoding");
|
|
78
|
+
return makeRoundTripResult(relPath, o.result.result, null, null);
|
|
79
|
+
});
|
|
80
|
+
const roundtripReport = buildRoundTripTreeReport(treeResult.root, roundtripWorkflows);
|
|
81
|
+
await writeReportOutput("roundtrip_tree.md.j2", roundtripReport, {
|
|
82
|
+
reportMarkdown: opts.reportMarkdown,
|
|
83
|
+
});
|
|
84
|
+
await writeReportHtml("roundtrip-tree", roundtripReport, opts.reportHtml);
|
|
60
85
|
if (opts.json) {
|
|
61
86
|
console.log(JSON.stringify({
|
|
62
87
|
root: treeResult.root,
|
|
@@ -113,4 +138,41 @@ export async function runRoundtripTree(dir, opts) {
|
|
|
113
138
|
else
|
|
114
139
|
process.exitCode = 0;
|
|
115
140
|
}
|
|
141
|
+
/** Map the TS-internal RoundtripResult to the report-model shape for template rendering. */
|
|
142
|
+
function makeRoundTripResult(relPath, result, error, skippedReason) {
|
|
143
|
+
const allDiffs = result?.stepResults.flatMap((s) => s.diffs) ?? [];
|
|
144
|
+
const errorDiffs = allDiffs.filter((d) => d.severity === "error");
|
|
145
|
+
const benignDiffs = allDiffs.filter((d) => d.severity === "benign");
|
|
146
|
+
const ok = result ? result.success : false;
|
|
147
|
+
let status;
|
|
148
|
+
if (error)
|
|
149
|
+
status = "error";
|
|
150
|
+
else if (skippedReason)
|
|
151
|
+
status = "skipped";
|
|
152
|
+
else if (ok)
|
|
153
|
+
status = "ok";
|
|
154
|
+
else
|
|
155
|
+
status = "roundtrip_mismatch";
|
|
156
|
+
const conversionFailureLines = result?.stepResults
|
|
157
|
+
.filter((s) => !s.success)
|
|
158
|
+
.map((s) => s.error ?? `Step ${s.stepId} failed`) ?? [];
|
|
159
|
+
return {
|
|
160
|
+
workflow_path: relPath,
|
|
161
|
+
category: categoryOf(relPath),
|
|
162
|
+
conversion_result: null,
|
|
163
|
+
diffs: allDiffs,
|
|
164
|
+
step_id_mapping: null,
|
|
165
|
+
stale_clean_results: null,
|
|
166
|
+
error,
|
|
167
|
+
skipped_reason: skippedReason,
|
|
168
|
+
structure_errors: result?.structureErrors ?? [],
|
|
169
|
+
encoding_errors: result?.encodingErrors ?? [],
|
|
170
|
+
error_diffs: errorDiffs,
|
|
171
|
+
benign_diffs: benignDiffs,
|
|
172
|
+
ok,
|
|
173
|
+
status,
|
|
174
|
+
conversion_failure_lines: conversionFailureLines,
|
|
175
|
+
summary_line: status.toUpperCase(),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
116
178
|
//# sourceMappingURL=roundtrip-tree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtrip-tree.js","sourceRoot":"","sources":["../../src/commands/roundtrip-tree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"roundtrip-tree.js","sourceRoot":"","sources":["../../src/commands/roundtrip-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type RoundtripResult } from "@galaxy-tool-util/schema";
|
|
2
|
-
|
|
2
|
+
import { type StrictOptions } from "./strict-options.js";
|
|
3
|
+
export interface RoundtripOptions extends StrictOptions {
|
|
3
4
|
cacheDir?: string;
|
|
4
5
|
format?: string;
|
|
5
6
|
json?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtrip.d.ts","sourceRoot":"","sources":["../../src/commands/roundtrip.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"roundtrip.d.ts","sourceRoot":"","sources":["../../src/commands/roundtrip.ts"],"names":[],"mappings":"AAUA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG/E,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE1F;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAmED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAI3D;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAOA"}
|
|
@@ -7,26 +7,28 @@
|
|
|
7
7
|
* 1 benign diffs only (type coercions, stale keys, connection moves)
|
|
8
8
|
* 2 real diffs or conversion errors
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { makeNodeToolCache } from "@galaxy-tool-util/core/node";
|
|
11
11
|
import { roundtripValidate, } from "@galaxy-tool-util/schema";
|
|
12
12
|
import { dirname } from "node:path";
|
|
13
13
|
import { loadToolInputsForWorkflow } from "./stateful-tool-inputs.js";
|
|
14
14
|
import { createDefaultResolver } from "./url-resolver.js";
|
|
15
|
+
import { resolveStrictOptions } from "./strict-options.js";
|
|
15
16
|
import { readWorkflowFile, resolveFormat } from "./workflow-io.js";
|
|
16
17
|
export async function runRoundtrip(filePath, opts) {
|
|
17
18
|
const data = await readWorkflowFile(filePath);
|
|
18
19
|
if (!data)
|
|
19
20
|
return;
|
|
20
21
|
const sourceFormat = resolveFormat(data, opts.format);
|
|
22
|
+
const strict = resolveStrictOptions(opts);
|
|
21
23
|
if (sourceFormat !== "native") {
|
|
22
24
|
console.error(`Roundtrip source must be a native (.ga) workflow; got ${sourceFormat}.` +
|
|
23
25
|
` Convert to native first or pass a .ga file.`);
|
|
24
26
|
process.exitCode = 2;
|
|
25
27
|
return;
|
|
26
28
|
}
|
|
27
|
-
const cache =
|
|
29
|
+
const cache = makeNodeToolCache({ cacheDir: opts.cacheDir });
|
|
28
30
|
await cache.index.load();
|
|
29
|
-
if (cache.index.listAll().length === 0) {
|
|
31
|
+
if ((await cache.index.listAll()).length === 0) {
|
|
30
32
|
console.warn("Tool cache is empty — all steps will fall back (no roundtrip possible)");
|
|
31
33
|
}
|
|
32
34
|
const expansionOpts = {
|
|
@@ -39,14 +41,34 @@ export async function runRoundtrip(filePath, opts) {
|
|
|
39
41
|
console.error(` tool ${s.toolId}${ver}: ${s.error}`);
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
|
-
const result = roundtripValidate(data, resolver
|
|
44
|
+
const result = roundtripValidate(data, resolver, {
|
|
45
|
+
strictEncoding: strict.strictEncoding,
|
|
46
|
+
strictStructure: strict.strictStructure,
|
|
47
|
+
strictState: strict.strictState,
|
|
48
|
+
});
|
|
43
49
|
if (opts.json) {
|
|
44
50
|
console.log(JSON.stringify(result, null, 2));
|
|
45
51
|
}
|
|
46
52
|
else {
|
|
53
|
+
// Report strict errors before step-level results
|
|
54
|
+
if (result.encodingErrors.length > 0) {
|
|
55
|
+
console.error("Encoding errors:");
|
|
56
|
+
for (const e of result.encodingErrors)
|
|
57
|
+
console.error(` ${e}`);
|
|
58
|
+
}
|
|
59
|
+
if (result.structureErrors.length > 0) {
|
|
60
|
+
console.error("Structure errors (strict):");
|
|
61
|
+
for (const e of result.structureErrors)
|
|
62
|
+
console.error(` ${e}`);
|
|
63
|
+
}
|
|
47
64
|
reportResult(filePath, result, opts);
|
|
48
65
|
}
|
|
49
|
-
|
|
66
|
+
let exitCode = exitCodeFor(result);
|
|
67
|
+
// --strict-state: require all steps to roundtrip (no skips/failures)
|
|
68
|
+
if (strict.strictState && result.stepResults.some((s) => !s.success)) {
|
|
69
|
+
exitCode = 2;
|
|
70
|
+
}
|
|
71
|
+
process.exitCode = exitCode;
|
|
50
72
|
}
|
|
51
73
|
function reportResult(filePath, result, filter) {
|
|
52
74
|
const total = result.stepResults.length;
|
|
@@ -93,9 +115,9 @@ function reportResult(filePath, result, filter) {
|
|
|
93
115
|
? step.diffs.filter((d) => d.severity === "benign")
|
|
94
116
|
: step.diffs;
|
|
95
117
|
for (const d of diffsToShow) {
|
|
96
|
-
const tag = d.severity === "error" ? "ERROR" : `benign:${d.
|
|
97
|
-
const loc = d.
|
|
98
|
-
console.log(`${indent} [${tag}] ${loc}: ${d.
|
|
118
|
+
const tag = d.severity === "error" ? "ERROR" : `benign:${d.benign_artifact?.reason ?? "?"}`;
|
|
119
|
+
const loc = d.key_path || "<root>";
|
|
120
|
+
console.log(`${indent} [${tag}] ${loc}: ${d.description}`);
|
|
99
121
|
}
|
|
100
122
|
}
|
|
101
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtrip.js","sourceRoot":"","sources":["../../src/commands/roundtrip.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"roundtrip.js","sourceRoot":"","sources":["../../src/commands/roundtrip.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { makeNodeToolCache } from "@galaxy-tool-util/core/node";
|
|
2
2
|
import { createFieldModel, STATE_REPRESENTATIONS, } from "@galaxy-tool-util/schema";
|
|
3
3
|
import * as JSONSchema from "effect/JSONSchema";
|
|
4
4
|
import { writeFile } from "node:fs/promises";
|
|
@@ -11,7 +11,7 @@ export async function runSchema(toolId, opts) {
|
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
const stateRep = repName;
|
|
14
|
-
const cache =
|
|
14
|
+
const cache = makeNodeToolCache({ cacheDir: opts.cacheDir });
|
|
15
15
|
await cache.index.load();
|
|
16
16
|
const result = await loadCachedTool(cache, toolId, opts.version);
|
|
17
17
|
if (isResolveError(result)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,IAAmB;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,eAAe,CAAC;IACvD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAA8B,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,KAAK,CACX,2BAA2B,OAAO,gBAAgB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,OAA8B,CAAC;IAEhD,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,sCAAsC,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAA6B;QACvC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAgD;KACzE,CAAC;IAEF,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAA+B,CAAC,CAAC;IAC/E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict validation options — decomposed into three orthogonal dimensions.
|
|
3
|
+
*
|
|
4
|
+
* --strict is shorthand for --strict-structure --strict-encoding --strict-state.
|
|
5
|
+
*/
|
|
6
|
+
import type { Command } from "commander";
|
|
7
|
+
export interface StrictOptions {
|
|
8
|
+
strict?: boolean;
|
|
9
|
+
strictStructure?: boolean;
|
|
10
|
+
strictEncoding?: boolean;
|
|
11
|
+
strictState?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ResolvedStrictOptions {
|
|
14
|
+
strictStructure: boolean;
|
|
15
|
+
strictEncoding: boolean;
|
|
16
|
+
strictState: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Expand --strict shorthand into the three individual flags. */
|
|
19
|
+
export declare function resolveStrictOptions(opts: StrictOptions): ResolvedStrictOptions;
|
|
20
|
+
/** Register --strict, --strict-structure, --strict-encoding, --strict-state on a Commander command. */
|
|
21
|
+
export declare function addStrictOptions(cmd: Command): Command;
|
|
22
|
+
//# sourceMappingURL=strict-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-options.d.ts","sourceRoot":"","sources":["../../src/commands/strict-options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,qBAAqB,CAO/E;AAED,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMtD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Expand --strict shorthand into the three individual flags. */
|
|
2
|
+
export function resolveStrictOptions(opts) {
|
|
3
|
+
const all = !!opts.strict;
|
|
4
|
+
return {
|
|
5
|
+
strictStructure: all || !!opts.strictStructure,
|
|
6
|
+
strictEncoding: all || !!opts.strictEncoding,
|
|
7
|
+
strictState: all || !!opts.strictState,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/** Register --strict, --strict-structure, --strict-encoding, --strict-state on a Commander command. */
|
|
11
|
+
export function addStrictOptions(cmd) {
|
|
12
|
+
return cmd
|
|
13
|
+
.option("--strict", "Shorthand for --strict-structure --strict-encoding --strict-state")
|
|
14
|
+
.option("--strict-structure", "Reject unknown keys at envelope/step level")
|
|
15
|
+
.option("--strict-encoding", "Reject JSON-string tool_state and format2 field misuse")
|
|
16
|
+
.option("--strict-state", "Require every tool step to validate; no skips allowed");
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=strict-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-options.js","sourceRoot":"","sources":["../../src/commands/strict-options.ts"],"names":[],"mappings":"AAoBA,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,OAAO;QACL,eAAe,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe;QAC9C,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc;QAC5C,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW;KACvC,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG;SACP,MAAM,CAAC,UAAU,EAAE,mEAAmE,CAAC;SACvF,MAAM,CAAC,oBAAoB,EAAE,4CAA4C,CAAC;SAC1E,MAAM,CAAC,mBAAmB,EAAE,wDAAwD,CAAC;SACrF,MAAM,CAAC,gBAAgB,EAAE,uDAAuD,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ``gxwf validate-tests-tree`` — batch-validate every workflow-test file
|
|
3
|
+
* (``*-tests.yml``, ``*-tests.yaml``, ``*.gxwf-tests.yml``, ``*.gxwf-tests.yaml``)
|
|
4
|
+
* under a directory against the ``galaxy.tool_util_models.Tests`` JSON Schema.
|
|
5
|
+
*
|
|
6
|
+
* Unlike ``validate-tree`` this uses its own discovery pass because test
|
|
7
|
+
* documents don't carry a ``class: GalaxyWorkflow`` / ``a_galaxy_workflow``
|
|
8
|
+
* marker — classification is filename-based.
|
|
9
|
+
*
|
|
10
|
+
* With ``--auto-workflow``, each test file is paired with a sibling workflow
|
|
11
|
+
* by suffix convention and cross-checked. Silent no-op when no sibling is
|
|
12
|
+
* found.
|
|
13
|
+
*/
|
|
14
|
+
import { type TestFormatDiagnostic } from "@galaxy-tool-util/schema";
|
|
15
|
+
export interface ValidateTestsTreeOptions {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
autoWorkflow?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface TestsTreeFileReport {
|
|
20
|
+
path: string;
|
|
21
|
+
valid: boolean;
|
|
22
|
+
errors: TestFormatDiagnostic[];
|
|
23
|
+
workflow?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ValidateTestsTreeReport {
|
|
26
|
+
root: string;
|
|
27
|
+
files: TestsTreeFileReport[];
|
|
28
|
+
summary: {
|
|
29
|
+
total: number;
|
|
30
|
+
ok: number;
|
|
31
|
+
fail: number;
|
|
32
|
+
error: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare function runValidateTestsTree(dir: string, opts?: ValidateTestsTreeOptions): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=validate-tests-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-tests-tree.d.ts","sourceRoot":"","sources":["../../src/commands/validate-tests-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAML,KAAK,oBAAoB,EAE1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAuID,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
|