@galaxy-tool-util/schema 0.1.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/LICENSE +21 -0
- package/dist/index.d.ts +87 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/type-guards.d.ts +14 -0
- package/dist/schema/type-guards.d.ts.map +1 -0
- package/dist/schema/type-guards.js +25 -0
- package/dist/schema/type-guards.js.map +1 -0
- package/dist/test-format/cross-check/check.d.ts +18 -0
- package/dist/test-format/cross-check/check.d.ts.map +1 -0
- package/dist/test-format/cross-check/check.js +89 -0
- package/dist/test-format/cross-check/check.js.map +1 -0
- package/dist/test-format/cross-check/extract-format2.d.ts +13 -0
- package/dist/test-format/cross-check/extract-format2.d.ts.map +1 -0
- package/dist/test-format/cross-check/extract-format2.js +98 -0
- package/dist/test-format/cross-check/extract-format2.js.map +1 -0
- package/dist/test-format/cross-check/extract-native.d.ts +4 -0
- package/dist/test-format/cross-check/extract-native.d.ts.map +1 -0
- package/dist/test-format/cross-check/extract-native.js +89 -0
- package/dist/test-format/cross-check/extract-native.js.map +1 -0
- package/dist/test-format/cross-check/extract.d.ts +9 -0
- package/dist/test-format/cross-check/extract.d.ts.map +1 -0
- package/dist/test-format/cross-check/extract.js +16 -0
- package/dist/test-format/cross-check/extract.js.map +1 -0
- package/dist/test-format/cross-check/index.d.ts +7 -0
- package/dist/test-format/cross-check/index.d.ts.map +1 -0
- package/dist/test-format/cross-check/index.js +6 -0
- package/dist/test-format/cross-check/index.js.map +1 -0
- package/dist/test-format/cross-check/type-compat.d.ts +23 -0
- package/dist/test-format/cross-check/type-compat.d.ts.map +1 -0
- package/dist/test-format/cross-check/type-compat.js +48 -0
- package/dist/test-format/cross-check/type-compat.js.map +1 -0
- package/dist/test-format/cross-check/types.d.ts +23 -0
- package/dist/test-format/cross-check/types.d.ts.map +1 -0
- package/dist/test-format/cross-check/types.js +10 -0
- package/dist/test-format/cross-check/types.js.map +1 -0
- package/dist/test-format/index.d.ts +3 -0
- package/dist/test-format/index.d.ts.map +1 -0
- package/dist/test-format/index.js +3 -0
- package/dist/test-format/index.js.map +1 -0
- package/dist/test-format/tests.schema.generated.d.ts +5610 -0
- package/dist/test-format/tests.schema.generated.d.ts.map +1 -0
- package/dist/test-format/tests.schema.generated.js +6899 -0
- package/dist/test-format/tests.schema.generated.js.map +1 -0
- package/dist/test-format/validate.d.ts +20 -0
- package/dist/test-format/validate.d.ts.map +1 -0
- package/dist/test-format/validate.js +41 -0
- package/dist/test-format/validate.js.map +1 -0
- package/dist/tool-state-validator.d.ts +23 -0
- package/dist/tool-state-validator.d.ts.map +1 -0
- package/dist/tool-state-validator.js +59 -0
- package/dist/tool-state-validator.js.map +1 -0
- package/dist/workflow/clean.d.ts +56 -3
- package/dist/workflow/clean.d.ts.map +1 -1
- package/dist/workflow/clean.js +227 -27
- package/dist/workflow/clean.js.map +1 -1
- package/dist/workflow/coercions.d.ts +22 -0
- package/dist/workflow/coercions.d.ts.map +1 -0
- package/dist/workflow/coercions.js +67 -0
- package/dist/workflow/coercions.js.map +1 -0
- package/dist/workflow/index.d.ts +17 -4
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +18 -3
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/lint-profiles.d.ts +27 -0
- package/dist/workflow/lint-profiles.d.ts.map +1 -0
- package/dist/workflow/lint-profiles.js +49 -0
- package/dist/workflow/lint-profiles.js.map +1 -0
- package/dist/workflow/lint-rules.d.ts +15 -0
- package/dist/workflow/lint-rules.d.ts.map +1 -0
- package/dist/workflow/lint-rules.js +15 -0
- package/dist/workflow/lint-rules.js.map +1 -0
- package/dist/workflow/lint.d.ts +4 -18
- package/dist/workflow/lint.d.ts.map +1 -1
- package/dist/workflow/lint.js +9 -30
- package/dist/workflow/lint.js.map +1 -1
- package/dist/workflow/lint_profiles.yml +41 -0
- package/dist/workflow/linting.d.ts +54 -0
- package/dist/workflow/linting.d.ts.map +1 -0
- package/dist/workflow/linting.js +71 -0
- package/dist/workflow/linting.js.map +1 -0
- package/dist/workflow/normalized/index.d.ts +5 -2
- package/dist/workflow/normalized/index.d.ts.map +1 -1
- package/dist/workflow/normalized/index.js +2 -0
- package/dist/workflow/normalized/index.js.map +1 -1
- package/dist/workflow/normalized/stateful-runner.d.ts +82 -0
- package/dist/workflow/normalized/stateful-runner.d.ts.map +1 -0
- package/dist/workflow/normalized/stateful-runner.js +122 -0
- package/dist/workflow/normalized/stateful-runner.js.map +1 -0
- package/dist/workflow/normalized/toFormat2.d.ts +19 -1
- package/dist/workflow/normalized/toFormat2.d.ts.map +1 -1
- package/dist/workflow/normalized/toFormat2.js +47 -16
- package/dist/workflow/normalized/toFormat2.js.map +1 -1
- package/dist/workflow/normalized/toFormat2Stateful.d.ts +30 -0
- package/dist/workflow/normalized/toFormat2Stateful.d.ts.map +1 -0
- package/dist/workflow/normalized/toFormat2Stateful.js +58 -0
- package/dist/workflow/normalized/toFormat2Stateful.js.map +1 -0
- package/dist/workflow/normalized/toNative.d.ts +10 -1
- package/dist/workflow/normalized/toNative.d.ts.map +1 -1
- package/dist/workflow/normalized/toNative.js +24 -8
- package/dist/workflow/normalized/toNative.js.map +1 -1
- package/dist/workflow/normalized/toNativeStateful.d.ts +31 -0
- package/dist/workflow/normalized/toNativeStateful.d.ts.map +1 -0
- package/dist/workflow/normalized/toNativeStateful.js +55 -0
- package/dist/workflow/normalized/toNativeStateful.js.map +1 -0
- package/dist/workflow/param-navigation.d.ts +26 -0
- package/dist/workflow/param-navigation.d.ts.map +1 -0
- package/dist/workflow/param-navigation.js +60 -0
- package/dist/workflow/param-navigation.js.map +1 -0
- package/dist/workflow/precheck.d.ts +54 -0
- package/dist/workflow/precheck.d.ts.map +1 -0
- package/dist/workflow/precheck.js +91 -0
- package/dist/workflow/precheck.js.map +1 -0
- package/dist/workflow/raw/gxformat2.effect.d.ts +97 -97
- package/dist/workflow/raw/gxformat2.effect.d.ts.map +1 -1
- package/dist/workflow/raw/gxformat2.effect.js +98 -88
- package/dist/workflow/raw/gxformat2.effect.js.map +1 -1
- package/dist/workflow/raw/native.d.ts +2 -2
- package/dist/workflow/raw/native.d.ts.map +1 -1
- package/dist/workflow/raw/native.effect.d.ts +33 -33
- package/dist/workflow/raw/native.effect.d.ts.map +1 -1
- package/dist/workflow/raw/native.effect.js +42 -32
- package/dist/workflow/raw/native.effect.js.map +1 -1
- package/dist/workflow/report-models.d.ts +412 -0
- package/dist/workflow/report-models.d.ts.map +1 -0
- package/dist/workflow/report-models.js +342 -0
- package/dist/workflow/report-models.js.map +1 -0
- package/dist/workflow/roundtrip.d.ts +77 -0
- package/dist/workflow/roundtrip.d.ts.map +1 -0
- package/dist/workflow/roundtrip.js +597 -0
- package/dist/workflow/roundtrip.js.map +1 -0
- package/dist/workflow/runtime-markers.d.ts +20 -0
- package/dist/workflow/runtime-markers.d.ts.map +1 -0
- package/dist/workflow/runtime-markers.js +26 -0
- package/dist/workflow/runtime-markers.js.map +1 -0
- package/dist/workflow/schema-rules.d.ts +38 -0
- package/dist/workflow/schema-rules.d.ts.map +1 -0
- package/dist/workflow/schema-rules.js +28 -0
- package/dist/workflow/schema-rules.js.map +1 -0
- package/dist/workflow/schema_rules.yml +69 -0
- package/dist/workflow/serialize.d.ts +30 -0
- package/dist/workflow/serialize.d.ts.map +1 -0
- package/dist/workflow/serialize.js +37 -0
- package/dist/workflow/serialize.js.map +1 -0
- package/dist/workflow/stale-keys.d.ts +16 -0
- package/dist/workflow/stale-keys.d.ts.map +1 -0
- package/dist/workflow/stale-keys.js +43 -0
- package/dist/workflow/stale-keys.js.map +1 -0
- package/dist/workflow/state-merge.d.ts +15 -32
- package/dist/workflow/state-merge.d.ts.map +1 -1
- package/dist/workflow/state-merge.js +31 -225
- package/dist/workflow/state-merge.js.map +1 -1
- package/dist/workflow/stateful-convert.d.ts +47 -0
- package/dist/workflow/stateful-convert.d.ts.map +1 -0
- package/dist/workflow/stateful-convert.js +151 -0
- package/dist/workflow/stateful-convert.js.map +1 -0
- package/dist/workflow/stateful-validate.d.ts +67 -0
- package/dist/workflow/stateful-validate.d.ts.map +1 -0
- package/dist/workflow/stateful-validate.js +123 -0
- package/dist/workflow/stateful-validate.js.map +1 -0
- package/dist/workflow/strict-checks.d.ts +22 -0
- package/dist/workflow/strict-checks.d.ts.map +1 -0
- package/dist/workflow/strict-checks.js +95 -0
- package/dist/workflow/strict-checks.js.map +1 -0
- package/dist/workflow/tool-state-io.d.ts +14 -0
- package/dist/workflow/tool-state-io.d.ts.map +1 -0
- package/dist/workflow/tool-state-io.js +33 -0
- package/dist/workflow/tool-state-io.js.map +1 -0
- package/dist/workflow/validators.d.ts +34 -0
- package/dist/workflow/validators.d.ts.map +1 -0
- package/dist/workflow/validators.js +83 -0
- package/dist/workflow/validators.js.map +1 -0
- package/dist/workflow/walk-helpers.d.ts +29 -0
- package/dist/workflow/walk-helpers.d.ts.map +1 -0
- package/dist/workflow/walk-helpers.js +89 -0
- package/dist/workflow/walk-helpers.js.map +1 -0
- package/dist/workflow/walker.d.ts +55 -0
- package/dist/workflow/walker.d.ts.map +1 -0
- package/dist/workflow/walker.js +199 -0
- package/dist/workflow/walker.js.map +1 -0
- package/package.json +21 -16
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
import { ensureNative } from "./normalized/ensure.js";
|
|
2
|
+
import { toFormat2Stateful } from "./normalized/toFormat2Stateful.js";
|
|
3
|
+
import { toNativeStateful } from "./normalized/toNativeStateful.js";
|
|
4
|
+
import { isConnectedValue, isRuntimeValue } from "./runtime-markers.js";
|
|
5
|
+
import { STALE_KEYS as SKIP_KEYS, isRuntimeLeakKey } from "./stale-keys.js";
|
|
6
|
+
import { stripStaleKeysToolAware } from "./clean.js";
|
|
7
|
+
import { checkStrictEncoding, checkStrictStructure } from "./strict-checks.js";
|
|
8
|
+
/** Construct a BenignArtifact from an internal artifact kind. */
|
|
9
|
+
function makeBenignArtifact(kind) {
|
|
10
|
+
return { reason: kind, proven_by: [] };
|
|
11
|
+
}
|
|
12
|
+
// --- Bookkeeping / internal helpers ---
|
|
13
|
+
/** Compare two scalar values with format2↔native type-equivalence. */
|
|
14
|
+
function scalarsEquivalent(a, b) {
|
|
15
|
+
if (a === b)
|
|
16
|
+
return true;
|
|
17
|
+
// Nullish equivalence: null, undefined, and the string "null" all
|
|
18
|
+
// represent "no value" in serialized workflow state. JSON has no
|
|
19
|
+
// undefined, so a JS undefined reaching the differ means a key was
|
|
20
|
+
// present-but-unset or missing entirely — equivalent to an explicit
|
|
21
|
+
// null on the other side. Matches Python roundtrip.py's
|
|
22
|
+
// `orig_val in (None, "null")` treatment.
|
|
23
|
+
const isNullish = (v) => v === null || v === undefined || v === "null";
|
|
24
|
+
if (isNullish(a) && isNullish(b))
|
|
25
|
+
return true;
|
|
26
|
+
if (a == null || b == null)
|
|
27
|
+
return false;
|
|
28
|
+
// Booleans ↔ "true"/"false"/"yes"/"no"
|
|
29
|
+
const asBool = (v) => {
|
|
30
|
+
if (typeof v === "boolean")
|
|
31
|
+
return v;
|
|
32
|
+
if (typeof v === "string") {
|
|
33
|
+
const s = v.toLowerCase();
|
|
34
|
+
if (s === "true" || s === "yes")
|
|
35
|
+
return true;
|
|
36
|
+
if (s === "false" || s === "no")
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
};
|
|
41
|
+
const ab = asBool(a);
|
|
42
|
+
const bb = asBool(b);
|
|
43
|
+
if (ab !== undefined && bb !== undefined)
|
|
44
|
+
return ab === bb;
|
|
45
|
+
// Numbers ↔ strings
|
|
46
|
+
const asNum = (v) => {
|
|
47
|
+
if (typeof v === "number")
|
|
48
|
+
return v;
|
|
49
|
+
if (typeof v === "string" && v.trim() !== "") {
|
|
50
|
+
const n = Number(v);
|
|
51
|
+
return Number.isFinite(n) ? n : undefined;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
};
|
|
55
|
+
const an = asNum(a);
|
|
56
|
+
const bn = asNum(b);
|
|
57
|
+
if (an !== undefined && bn !== undefined)
|
|
58
|
+
return an === bn;
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
function isPlainObject(v) {
|
|
62
|
+
return v != null && typeof v === "object" && !Array.isArray(v);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* All leaf values are null / "null". Format2 export drops these sections,
|
|
66
|
+
* so their absence in the reimported state is benign.
|
|
67
|
+
*/
|
|
68
|
+
function isAllNullDict(v) {
|
|
69
|
+
if (v === null || v === "null")
|
|
70
|
+
return true;
|
|
71
|
+
if (Array.isArray(v))
|
|
72
|
+
return v.every(isAllNullDict);
|
|
73
|
+
if (isPlainObject(v)) {
|
|
74
|
+
for (const [k, val] of Object.entries(v)) {
|
|
75
|
+
if (SKIP_KEYS.has(k))
|
|
76
|
+
continue;
|
|
77
|
+
if (!isAllNullDict(val))
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Empty-repeat placeholder: empty arrays + null leaves. Requires at least
|
|
86
|
+
* one empty list to be present, matching Python's `_is_empty_container_dict`
|
|
87
|
+
* in `roundtrip.py` — otherwise a plain `{}` would be classified as this
|
|
88
|
+
* kind when `all_null_section_omitted` is more accurate.
|
|
89
|
+
*/
|
|
90
|
+
function isEmptyContainerDict(v) {
|
|
91
|
+
let sawEmptyList = false;
|
|
92
|
+
const walk = (x) => {
|
|
93
|
+
if (x === null)
|
|
94
|
+
return true;
|
|
95
|
+
if (Array.isArray(x)) {
|
|
96
|
+
if (x.length === 0) {
|
|
97
|
+
sawEmptyList = true;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return x.every(walk);
|
|
101
|
+
}
|
|
102
|
+
if (isPlainObject(x)) {
|
|
103
|
+
for (const [k, val] of Object.entries(x)) {
|
|
104
|
+
if (SKIP_KEYS.has(k))
|
|
105
|
+
continue;
|
|
106
|
+
if (!walk(val))
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
};
|
|
113
|
+
const ok = walk(v);
|
|
114
|
+
return ok && sawEmptyList;
|
|
115
|
+
}
|
|
116
|
+
/** Contains only connection/runtime markers (moved to `in` block). */
|
|
117
|
+
function isConnectionOnlyDict(v) {
|
|
118
|
+
if (v == null)
|
|
119
|
+
return true;
|
|
120
|
+
if (isConnectedValue(v) || isRuntimeValue(v))
|
|
121
|
+
return true;
|
|
122
|
+
if (Array.isArray(v))
|
|
123
|
+
return v.every(isConnectionOnlyDict);
|
|
124
|
+
if (isPlainObject(v)) {
|
|
125
|
+
let sawMarker = false;
|
|
126
|
+
for (const [k, val] of Object.entries(v)) {
|
|
127
|
+
if (SKIP_KEYS.has(k))
|
|
128
|
+
continue;
|
|
129
|
+
if (val == null)
|
|
130
|
+
continue;
|
|
131
|
+
if (!isConnectionOnlyDict(val))
|
|
132
|
+
return false;
|
|
133
|
+
sawMarker = true;
|
|
134
|
+
}
|
|
135
|
+
return sawMarker;
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
function classifyMissing(value) {
|
|
140
|
+
if (value === null || value === undefined || value === "null") {
|
|
141
|
+
return "all_null_section_omitted";
|
|
142
|
+
}
|
|
143
|
+
if (isConnectedValue(value) || isRuntimeValue(value)) {
|
|
144
|
+
return "connection_only_section_omitted";
|
|
145
|
+
}
|
|
146
|
+
if (isConnectionOnlyDict(value))
|
|
147
|
+
return "connection_only_section_omitted";
|
|
148
|
+
if (isAllNullDict(value))
|
|
149
|
+
return "all_null_section_omitted";
|
|
150
|
+
if (isEmptyContainerDict(value))
|
|
151
|
+
return "empty_container_omitted";
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Multi-select equivalence: `"a,b"`, `["a","b"]`, and a bare scalar
|
|
156
|
+
* compared against a 1-element list are all considered equivalent.
|
|
157
|
+
*/
|
|
158
|
+
function multiSelectEquivalent(a, b) {
|
|
159
|
+
const norm = (v) => {
|
|
160
|
+
if (Array.isArray(v))
|
|
161
|
+
return v.map((x) => String(x));
|
|
162
|
+
if (typeof v === "string")
|
|
163
|
+
return v.split(",").map((s) => s.trim());
|
|
164
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
165
|
+
return [String(v)];
|
|
166
|
+
return undefined;
|
|
167
|
+
};
|
|
168
|
+
const na = norm(a);
|
|
169
|
+
const nb = norm(b);
|
|
170
|
+
if (!na || !nb)
|
|
171
|
+
return false;
|
|
172
|
+
if (na.length !== nb.length)
|
|
173
|
+
return false;
|
|
174
|
+
for (let i = 0; i < na.length; i++)
|
|
175
|
+
if (na[i] !== nb[i])
|
|
176
|
+
return false;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
// --- Recursive diff ---
|
|
180
|
+
/**
|
|
181
|
+
* Recursive lockstep diff of two `tool_state` trees. Intentionally does
|
|
182
|
+
* not use `walker.ts` — that module is a single-tree leaf-callback walker
|
|
183
|
+
* keyed by parameter model, whereas this traverses two plain dicts in
|
|
184
|
+
* parallel without a tool-inputs context. Also intentionally does NOT
|
|
185
|
+
* JSON-decode string leaves (cf. Python's `_try_json_decode`): this port
|
|
186
|
+
* treats containers as proper dicts/lists end-to-end, matching the
|
|
187
|
+
* walker's "no legacy decode" principle.
|
|
188
|
+
*/
|
|
189
|
+
function compareTree(orig, after, path, diffs) {
|
|
190
|
+
// Exact equivalence
|
|
191
|
+
if (scalarsEquivalent(orig, after))
|
|
192
|
+
return;
|
|
193
|
+
// Multi-select normalization: only when exactly one side is an array
|
|
194
|
+
// (scalar ↔ list, comma-string ↔ list). Two arrays fall through to the
|
|
195
|
+
// element-wise recursion below so identical arrays don't get flagged.
|
|
196
|
+
if (Array.isArray(orig) !== Array.isArray(after) && multiSelectEquivalent(orig, after)) {
|
|
197
|
+
diffs.push({
|
|
198
|
+
step_path: "",
|
|
199
|
+
key_path: path,
|
|
200
|
+
diff_type: "value_mismatch",
|
|
201
|
+
severity: "benign",
|
|
202
|
+
description: `multi-select representation differs: ${JSON.stringify(orig)} vs ${JSON.stringify(after)}`,
|
|
203
|
+
original_value: orig,
|
|
204
|
+
roundtrip_value: after,
|
|
205
|
+
benign_artifact: makeBenignArtifact("multi_select_normalized"),
|
|
206
|
+
});
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Scalar mismatch after coercion rules → error
|
|
210
|
+
if (!isPlainObject(orig) &&
|
|
211
|
+
!isPlainObject(after) &&
|
|
212
|
+
!Array.isArray(orig) &&
|
|
213
|
+
!Array.isArray(after)) {
|
|
214
|
+
diffs.push({
|
|
215
|
+
step_path: "",
|
|
216
|
+
key_path: path,
|
|
217
|
+
diff_type: "value_mismatch",
|
|
218
|
+
severity: "error",
|
|
219
|
+
description: `value changed: ${JSON.stringify(orig)} → ${JSON.stringify(after)}`,
|
|
220
|
+
original_value: orig,
|
|
221
|
+
roundtrip_value: after,
|
|
222
|
+
benign_artifact: null,
|
|
223
|
+
});
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
// Arrays: compare lengths, recurse element-wise
|
|
227
|
+
if (Array.isArray(orig) && Array.isArray(after)) {
|
|
228
|
+
if (orig.length !== after.length) {
|
|
229
|
+
diffs.push({
|
|
230
|
+
step_path: "",
|
|
231
|
+
key_path: path,
|
|
232
|
+
diff_type: "value_mismatch",
|
|
233
|
+
severity: "error",
|
|
234
|
+
description: `array length ${orig.length} → ${after.length}`,
|
|
235
|
+
original_value: orig,
|
|
236
|
+
roundtrip_value: after,
|
|
237
|
+
benign_artifact: null,
|
|
238
|
+
});
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
for (let i = 0; i < orig.length; i++) {
|
|
242
|
+
compareTree(orig[i], after[i], `${path}[${i}]`, diffs);
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
// Dict mismatch with non-dict other side
|
|
247
|
+
if (!isPlainObject(orig) || !isPlainObject(after)) {
|
|
248
|
+
// One side might be an omitted section represented by null/absent on the other
|
|
249
|
+
const benign = classifyMissing(orig) ?? classifyMissing(after);
|
|
250
|
+
if (benign) {
|
|
251
|
+
diffs.push({
|
|
252
|
+
step_path: "",
|
|
253
|
+
key_path: path,
|
|
254
|
+
diff_type: "value_mismatch",
|
|
255
|
+
severity: "benign",
|
|
256
|
+
description: `type change tolerated as ${benign}`,
|
|
257
|
+
original_value: orig,
|
|
258
|
+
roundtrip_value: after,
|
|
259
|
+
benign_artifact: makeBenignArtifact(benign),
|
|
260
|
+
});
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
diffs.push({
|
|
264
|
+
step_path: "",
|
|
265
|
+
key_path: path,
|
|
266
|
+
diff_type: "value_mismatch",
|
|
267
|
+
severity: "error",
|
|
268
|
+
description: `structural mismatch: ${typeof orig} vs ${typeof after}`,
|
|
269
|
+
original_value: orig,
|
|
270
|
+
roundtrip_value: after,
|
|
271
|
+
benign_artifact: null,
|
|
272
|
+
});
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// Both plain objects → key-wise compare
|
|
276
|
+
const keys = new Set([...Object.keys(orig), ...Object.keys(after)]);
|
|
277
|
+
for (const key of keys) {
|
|
278
|
+
if (SKIP_KEYS.has(key)) {
|
|
279
|
+
// Presence on either side is benign bookkeeping (only report if orig had
|
|
280
|
+
// it — avoids noise from reimported state never having it)
|
|
281
|
+
if (key in orig && !(key in after)) {
|
|
282
|
+
diffs.push({
|
|
283
|
+
step_path: "",
|
|
284
|
+
key_path: `${path}.${key}`,
|
|
285
|
+
diff_type: "missing_in_roundtrip",
|
|
286
|
+
severity: "benign",
|
|
287
|
+
description: `stale key ${key} stripped`,
|
|
288
|
+
original_value: orig[key],
|
|
289
|
+
roundtrip_value: undefined,
|
|
290
|
+
benign_artifact: makeBenignArtifact("bookkeeping_stripped"),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (isRuntimeLeakKey(key)) {
|
|
296
|
+
// Walker drops runtime-leak keys (`__workflow_invocation_uuid__`,
|
|
297
|
+
// `*|__identifier__`) during stateful conversion — neither side of the
|
|
298
|
+
// roundtrip keeps them. Mirrors Galaxy's `RUNTIME_LEAK` classification
|
|
299
|
+
// in `stale_keys.py`; `for_export` allows them but they don't survive
|
|
300
|
+
// format2 round-trip. Treat any drop/appearance as benign.
|
|
301
|
+
const hasOrig = key in orig;
|
|
302
|
+
const hasAfter = key in after;
|
|
303
|
+
if (hasOrig !== hasAfter) {
|
|
304
|
+
diffs.push({
|
|
305
|
+
step_path: "",
|
|
306
|
+
key_path: path ? `${path}.${key}` : key,
|
|
307
|
+
diff_type: hasOrig ? "missing_in_roundtrip" : "missing_in_original",
|
|
308
|
+
severity: "benign",
|
|
309
|
+
description: `runtime leak ${key} ${hasOrig ? "stripped" : "appeared"}`,
|
|
310
|
+
original_value: hasOrig ? orig[key] : undefined,
|
|
311
|
+
roundtrip_value: hasAfter ? after[key] : undefined,
|
|
312
|
+
benign_artifact: makeBenignArtifact("runtime_leak_stripped"),
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
const subPath = path ? `${path}.${key}` : key;
|
|
318
|
+
const hasOrig = key in orig;
|
|
319
|
+
const hasAfter = key in after;
|
|
320
|
+
if (hasOrig && hasAfter) {
|
|
321
|
+
compareTree(orig[key], after[key], subPath, diffs);
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
// Missing on one side — classify
|
|
325
|
+
const presentValue = hasOrig ? orig[key] : after[key];
|
|
326
|
+
// Null/"null" leaves: matches Python roundtrip.py where
|
|
327
|
+
// `orig_val in (None, "null", [])` short-circuits with no diff. This
|
|
328
|
+
// keeps `clean=true` aligned with the Python reference's "ok" status.
|
|
329
|
+
if (presentValue === null ||
|
|
330
|
+
presentValue === undefined ||
|
|
331
|
+
presentValue === "null" ||
|
|
332
|
+
(Array.isArray(presentValue) && presentValue.length === 0)) {
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
const benign = classifyMissing(presentValue);
|
|
336
|
+
if (benign) {
|
|
337
|
+
diffs.push({
|
|
338
|
+
step_path: "",
|
|
339
|
+
key_path: subPath,
|
|
340
|
+
diff_type: hasOrig ? "missing_in_roundtrip" : "missing_in_original",
|
|
341
|
+
severity: "benign",
|
|
342
|
+
description: `key ${hasOrig ? "dropped" : "added"} (${benign})`,
|
|
343
|
+
original_value: hasOrig ? orig[key] : undefined,
|
|
344
|
+
roundtrip_value: hasAfter ? after[key] : undefined,
|
|
345
|
+
benign_artifact: makeBenignArtifact(benign),
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
diffs.push({
|
|
350
|
+
step_path: "",
|
|
351
|
+
key_path: subPath,
|
|
352
|
+
diff_type: hasOrig ? "missing_in_roundtrip" : "missing_in_original",
|
|
353
|
+
severity: "error",
|
|
354
|
+
description: `key ${hasOrig ? "missing after roundtrip" : "appeared after roundtrip"}`,
|
|
355
|
+
original_value: hasOrig ? orig[key] : undefined,
|
|
356
|
+
roundtrip_value: hasAfter ? after[key] : undefined,
|
|
357
|
+
benign_artifact: null,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Walk a native workflow collecting tool steps and subworkflow references.
|
|
364
|
+
*
|
|
365
|
+
* Tool step ids are prefixed with their parent chain separated by `.` so
|
|
366
|
+
* nested ids don't collide with top-level ids (e.g. `3.0` = step 0 inside
|
|
367
|
+
* the subworkflow at top-level id 3). Depth tracks nesting for reporters.
|
|
368
|
+
* External (URL/TRS) subworkflow refs are recorded but not recursed into.
|
|
369
|
+
*/
|
|
370
|
+
function collectSteps(wf, prefix = "", depth = 0) {
|
|
371
|
+
const tools = new Map();
|
|
372
|
+
const subworkflows = [];
|
|
373
|
+
for (const [key, step] of Object.entries(wf.steps)) {
|
|
374
|
+
const localId = String(step.id ?? key);
|
|
375
|
+
const fullId = prefix ? `${prefix}.${localId}` : localId;
|
|
376
|
+
if (step.type === "tool") {
|
|
377
|
+
tools.set(fullId, { step, depth });
|
|
378
|
+
}
|
|
379
|
+
else if (step.type === "subworkflow") {
|
|
380
|
+
subworkflows.push({ stepId: fullId, depth, workflow: step.subworkflow ?? null });
|
|
381
|
+
if (step.subworkflow != null) {
|
|
382
|
+
const nested = collectSteps(step.subworkflow, fullId, depth + 1);
|
|
383
|
+
for (const [k, v] of nested.tools)
|
|
384
|
+
tools.set(k, v);
|
|
385
|
+
subworkflows.push(...nested.subworkflows);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return { tools, subworkflows };
|
|
390
|
+
}
|
|
391
|
+
// --- Public entry point ---
|
|
392
|
+
/**
|
|
393
|
+
* Roundtrip a native workflow through format2 and back, diffing each
|
|
394
|
+
* tool step's `tool_state`. Benign diffs (type coercion, connection
|
|
395
|
+
* moves, stale-key stripping) are reported but don't count as failures.
|
|
396
|
+
*
|
|
397
|
+
* Returns `success=true` iff no error-severity diffs and no conversion
|
|
398
|
+
* failures. `clean=true` iff there are zero diffs of any severity.
|
|
399
|
+
*/
|
|
400
|
+
export function roundtripValidate(nativeRaw, toolInputsResolver, strictOpts) {
|
|
401
|
+
const strict = strictOpts ?? {};
|
|
402
|
+
const encodingErrors = [];
|
|
403
|
+
const structureErrors = [];
|
|
404
|
+
// Stage 1: strict checks on raw native input
|
|
405
|
+
const rawDict = nativeRaw;
|
|
406
|
+
if (strict.strictEncoding) {
|
|
407
|
+
encodingErrors.push(...checkStrictEncoding(rawDict, "native").map((e) => `input: ${e}`));
|
|
408
|
+
}
|
|
409
|
+
if (strict.strictStructure) {
|
|
410
|
+
structureErrors.push(...checkStrictStructure(rawDict, "native").map((e) => `input: ${e}`));
|
|
411
|
+
}
|
|
412
|
+
const original = ensureNative(nativeRaw);
|
|
413
|
+
const { tools: originalSteps, subworkflows: originalSubworkflows } = collectSteps(original);
|
|
414
|
+
// Pre-clean: strip undeclared keys from each tool step's `tool_state`
|
|
415
|
+
// using the tool definition. Mirrors Galaxy's
|
|
416
|
+
// `roundtrip_validate(clean_stale=True)` default, which runs
|
|
417
|
+
// `clean_stale_state` before diffing so runtime leaks, stale-branch
|
|
418
|
+
// params, and tool-upgrade residue are removed from the original.
|
|
419
|
+
// Without this pass, the diff flags asymmetries between the raw
|
|
420
|
+
// original and the walker-produced reimport as errors.
|
|
421
|
+
for (const entry of originalSteps.values()) {
|
|
422
|
+
const step = entry.step;
|
|
423
|
+
if (step.type !== "tool" || !step.tool_id)
|
|
424
|
+
continue;
|
|
425
|
+
const inputs = toolInputsResolver(step.tool_id, step.tool_version ?? null);
|
|
426
|
+
if (!inputs)
|
|
427
|
+
continue;
|
|
428
|
+
// Deep clone via JSON round-trip — tool_state is JSON-compatible by
|
|
429
|
+
// design (parsed from a JSON string), and ES2022 lib doesn't include
|
|
430
|
+
// structuredClone.
|
|
431
|
+
const stateClone = JSON.parse(JSON.stringify(step.tool_state));
|
|
432
|
+
const cleaned = stripStaleKeysToolAware(stateClone, inputs, (step.input_connections ?? {}));
|
|
433
|
+
// Mutate the collected step's tool_state in place. `original` was
|
|
434
|
+
// produced fresh by `ensureNative(nativeRaw)` so mutation is local.
|
|
435
|
+
step.tool_state = cleaned;
|
|
436
|
+
}
|
|
437
|
+
let forwardSteps = [];
|
|
438
|
+
let reverseSteps = [];
|
|
439
|
+
let reimported;
|
|
440
|
+
const stepResults = [];
|
|
441
|
+
// Forward: native → format2
|
|
442
|
+
let forward;
|
|
443
|
+
try {
|
|
444
|
+
forward = toFormat2Stateful(nativeRaw, toolInputsResolver);
|
|
445
|
+
}
|
|
446
|
+
catch (err) {
|
|
447
|
+
// Total failure — attribute to all tool steps (including nested)
|
|
448
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
449
|
+
for (const [stepId, { step, depth }] of originalSteps) {
|
|
450
|
+
stepResults.push({
|
|
451
|
+
stepId,
|
|
452
|
+
toolId: step.tool_id ?? undefined,
|
|
453
|
+
success: false,
|
|
454
|
+
failureClass: "conversion_error",
|
|
455
|
+
error,
|
|
456
|
+
diffs: [],
|
|
457
|
+
depth,
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
stepResults,
|
|
462
|
+
forwardSteps,
|
|
463
|
+
reverseSteps,
|
|
464
|
+
success: false,
|
|
465
|
+
clean: false,
|
|
466
|
+
encodingErrors,
|
|
467
|
+
structureErrors,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
forwardSteps = forward.steps;
|
|
471
|
+
// Stage 2: strict checks on forward (format2) output
|
|
472
|
+
if (strict.strictEncoding) {
|
|
473
|
+
encodingErrors.push(...checkStrictEncoding(forward.workflow, "format2").map((e) => `forward: ${e}`));
|
|
474
|
+
}
|
|
475
|
+
if (strict.strictStructure) {
|
|
476
|
+
structureErrors.push(...checkStrictStructure(forward.workflow, "format2").map((e) => `forward: ${e}`));
|
|
477
|
+
}
|
|
478
|
+
// Reverse: format2 → native
|
|
479
|
+
try {
|
|
480
|
+
const reverse = toNativeStateful(forward.workflow, toolInputsResolver);
|
|
481
|
+
reverseSteps = reverse.steps;
|
|
482
|
+
reimported = reverse.workflow;
|
|
483
|
+
}
|
|
484
|
+
catch (err) {
|
|
485
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
486
|
+
for (const [stepId, { step, depth }] of originalSteps) {
|
|
487
|
+
stepResults.push({
|
|
488
|
+
stepId,
|
|
489
|
+
toolId: step.tool_id ?? undefined,
|
|
490
|
+
success: false,
|
|
491
|
+
failureClass: "reimport_error",
|
|
492
|
+
error,
|
|
493
|
+
diffs: [],
|
|
494
|
+
depth,
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
stepResults,
|
|
499
|
+
forwardSteps,
|
|
500
|
+
reverseSteps,
|
|
501
|
+
success: false,
|
|
502
|
+
clean: false,
|
|
503
|
+
encodingErrors,
|
|
504
|
+
structureErrors,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
// Stage 3: strict checks on reverse (reimported native) output
|
|
508
|
+
if (strict.strictEncoding) {
|
|
509
|
+
encodingErrors.push(...checkStrictEncoding(reimported, "native").map((e) => `reverse: ${e}`));
|
|
510
|
+
}
|
|
511
|
+
if (strict.strictStructure) {
|
|
512
|
+
structureErrors.push(...checkStrictStructure(reimported, "native").map((e) => `reverse: ${e}`));
|
|
513
|
+
}
|
|
514
|
+
const { tools: reimportedSteps } = collectSteps(reimported);
|
|
515
|
+
// Per-step comparison (top-level + recursively-collected nested tools)
|
|
516
|
+
for (const [stepId, { step: origStep, depth }] of originalSteps) {
|
|
517
|
+
const afterEntry = reimportedSteps.get(stepId);
|
|
518
|
+
if (!afterEntry) {
|
|
519
|
+
stepResults.push({
|
|
520
|
+
stepId,
|
|
521
|
+
toolId: origStep.tool_id ?? undefined,
|
|
522
|
+
success: false,
|
|
523
|
+
failureClass: "roundtrip_mismatch",
|
|
524
|
+
error: `step ${stepId} missing after roundtrip`,
|
|
525
|
+
diffs: [],
|
|
526
|
+
depth,
|
|
527
|
+
});
|
|
528
|
+
continue;
|
|
529
|
+
}
|
|
530
|
+
// Per-step forward failure → propagate. Note: forwardSteps from
|
|
531
|
+
// `makeStepConversionRunner` uses unprefixed step ids. Nested steps
|
|
532
|
+
// with the same local id as a top-level step can collide; we match
|
|
533
|
+
// by suffix (localId) and tool_id as a best-effort disambiguation.
|
|
534
|
+
const localId = stepId.includes(".") ? stepId.slice(stepId.lastIndexOf(".") + 1) : stepId;
|
|
535
|
+
const forwardFailure = forwardSteps.find((s) => s.stepId === localId && !s.converted && s.toolId === (origStep.tool_id ?? undefined));
|
|
536
|
+
if (forwardFailure) {
|
|
537
|
+
stepResults.push({
|
|
538
|
+
stepId,
|
|
539
|
+
toolId: origStep.tool_id ?? undefined,
|
|
540
|
+
success: false,
|
|
541
|
+
failureClass: "conversion_error",
|
|
542
|
+
error: forwardFailure.error,
|
|
543
|
+
diffs: [],
|
|
544
|
+
depth,
|
|
545
|
+
});
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
const diffs = [];
|
|
549
|
+
compareTree(origStep.tool_state, afterEntry.step.tool_state, "", diffs);
|
|
550
|
+
for (const diff of diffs) {
|
|
551
|
+
diff.step_path = stepId;
|
|
552
|
+
}
|
|
553
|
+
const hasError = diffs.some((d) => d.severity === "error");
|
|
554
|
+
stepResults.push({
|
|
555
|
+
stepId,
|
|
556
|
+
toolId: origStep.tool_id ?? undefined,
|
|
557
|
+
success: !hasError,
|
|
558
|
+
failureClass: hasError ? "roundtrip_mismatch" : undefined,
|
|
559
|
+
diffs,
|
|
560
|
+
depth,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
// External (URL/TRS) subworkflow refs: surface an informational entry
|
|
564
|
+
// so callers can see the step exists and was deliberately skipped.
|
|
565
|
+
// Inline subworkflows are handled by the recursive collection above.
|
|
566
|
+
for (const sw of originalSubworkflows) {
|
|
567
|
+
if (sw.workflow != null)
|
|
568
|
+
continue;
|
|
569
|
+
stepResults.push({
|
|
570
|
+
stepId: sw.stepId,
|
|
571
|
+
toolId: undefined,
|
|
572
|
+
success: true,
|
|
573
|
+
failureClass: "subworkflow_external_ref",
|
|
574
|
+
error: "external subworkflow reference (URL/TRS) — inline steps not available for diff",
|
|
575
|
+
diffs: [],
|
|
576
|
+
depth: sw.depth,
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
// Only tool-step results contribute to overall verdicts; external-ref
|
|
580
|
+
// entries are informational.
|
|
581
|
+
const toolResults = stepResults.filter((s) => s.failureClass !== "subworkflow_external_ref");
|
|
582
|
+
const anyError = toolResults.some((s) => !s.success);
|
|
583
|
+
const anyDiff = toolResults.some((s) => s.diffs.length > 0);
|
|
584
|
+
const hasStrictErrors = encodingErrors.length > 0 || structureErrors.length > 0;
|
|
585
|
+
return {
|
|
586
|
+
workflowName: (original.name ?? undefined) || undefined,
|
|
587
|
+
stepResults,
|
|
588
|
+
forwardSteps,
|
|
589
|
+
reverseSteps,
|
|
590
|
+
success: !anyError && !hasStrictErrors,
|
|
591
|
+
clean: !anyDiff && !anyError && !hasStrictErrors,
|
|
592
|
+
encodingErrors,
|
|
593
|
+
structureErrors,
|
|
594
|
+
reimportedWorkflow: reimported,
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
//# sourceMappingURL=roundtrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roundtrip.js","sourceRoot":"","sources":["../../src/workflow/roundtrip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime value markers used inside workflow tool_state.
|
|
3
|
+
*
|
|
4
|
+
* Galaxy has two in-band markers indicating a parameter value is not a
|
|
5
|
+
* literal but will be supplied at invocation time:
|
|
6
|
+
* - `ConnectedValue`: value comes from an upstream step output
|
|
7
|
+
* - `RuntimeValue`: value is supplied by the user at workflow runtime
|
|
8
|
+
*
|
|
9
|
+
* Both are encoded as `{ __class__: "ConnectedValue" | "RuntimeValue" }`
|
|
10
|
+
* inside native tool_state dicts. Matches Galaxy Python terminology.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CONNECTED_VALUE: {
|
|
13
|
+
readonly __class__: "ConnectedValue";
|
|
14
|
+
};
|
|
15
|
+
export declare const RUNTIME_VALUE: {
|
|
16
|
+
readonly __class__: "RuntimeValue";
|
|
17
|
+
};
|
|
18
|
+
export declare function isConnectedValue(value: unknown): boolean;
|
|
19
|
+
export declare function isRuntimeValue(value: unknown): boolean;
|
|
20
|
+
//# sourceMappingURL=runtime-markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-markers.d.ts","sourceRoot":"","sources":["../../src/workflow/runtime-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,eAAe;;CAA2C,CAAC;AACxE,eAAO,MAAM,aAAa;;CAAyC,CAAC;AAEpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOxD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOtD"}
|