@galaxy-tool-util/schema 0.1.0 → 0.2.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 +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/workflow/clean.d.ts +27 -0
- package/dist/workflow/clean.d.ts.map +1 -1
- package/dist/workflow/clean.js +29 -0
- 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 +6 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +6 -1
- package/dist/workflow/index.js.map +1 -1
- 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/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 +108 -332
- package/dist/workflow/raw/gxformat2.effect.d.ts.map +1 -1
- package/dist/workflow/raw/gxformat2.effect.js +106 -94
- package/dist/workflow/raw/gxformat2.effect.js.map +1 -1
- package/dist/workflow/raw/native.effect.d.ts +30 -177
- package/dist/workflow/raw/native.effect.d.ts.map +1 -1
- package/dist/workflow/raw/native.effect.js +43 -31
- package/dist/workflow/raw/native.effect.js.map +1 -1
- package/dist/workflow/roundtrip.d.ts +54 -0
- package/dist/workflow/roundtrip.d.ts.map +1 -0
- package/dist/workflow/roundtrip.js +516 -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/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.map +1 -1
- package/dist/workflow/state-merge.js +5 -22
- 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 +46 -0
- package/dist/workflow/stateful-validate.d.ts.map +1 -0
- package/dist/workflow/stateful-validate.js +96 -0
- package/dist/workflow/stateful-validate.js.map +1 -0
- package/dist/workflow/walker.d.ts +53 -0
- package/dist/workflow/walker.d.ts.map +1 -0
- package/dist/workflow/walker.js +189 -0
- package/dist/workflow/walker.js.map +1 -0
- package/package.json +18 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-merge.d.ts","sourceRoot":"","sources":["../../src/workflow/state-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EAKhB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"state-merge.d.ts","sourceRoot":"","sources":["../../src/workflow/state-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EAKhB,MAAM,2BAA2B,CAAC;AAMnC,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAQ7F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GACxB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAuBrB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,yBAAyB,EACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,eAAe,GAAG,IAAI,CAmBxB;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,kBAAkB,EAAE,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAkGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,kBAAkB,EAAE,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAIN"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* repeats, and sections. Used by validate-workflow for both native
|
|
10
10
|
* and format2 validation paths.
|
|
11
11
|
*/
|
|
12
|
+
import { parseBool } from "./coercions.js";
|
|
13
|
+
import { CONNECTED_VALUE, isConnectedValue } from "./runtime-markers.js";
|
|
12
14
|
// --- Helpers (ported from Python visitor.py) ---
|
|
13
15
|
/** Build flat pipe-separated state path: `name` or `prefix|name`. */
|
|
14
16
|
export function flatStatePath(name, prefix) {
|
|
@@ -80,27 +82,14 @@ export function selectWhichWhen(conditional, state) {
|
|
|
80
82
|
function _testValueMatchesDiscriminator(testParam, testValue, discriminator) {
|
|
81
83
|
if (testParam.parameter_type === "gx_boolean") {
|
|
82
84
|
// Boolean coercion: handle string "true"/"false"/"True"/"False" and actual booleans
|
|
83
|
-
const boolValue =
|
|
84
|
-
const discBool = typeof discriminator === "boolean" ? discriminator :
|
|
85
|
+
const boolValue = parseBool(testValue);
|
|
86
|
+
const discBool = typeof discriminator === "boolean" ? discriminator : parseBool(discriminator);
|
|
85
87
|
return boolValue === discBool;
|
|
86
88
|
}
|
|
87
89
|
// Select: string comparison
|
|
88
90
|
return String(testValue) === String(discriminator);
|
|
89
91
|
}
|
|
90
|
-
function _coerceToBool(value) {
|
|
91
|
-
if (typeof value === "boolean")
|
|
92
|
-
return value;
|
|
93
|
-
if (typeof value === "string") {
|
|
94
|
-
const lower = value.toLowerCase();
|
|
95
|
-
if (lower === "true")
|
|
96
|
-
return true;
|
|
97
|
-
if (lower === "false")
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
92
|
// --- Main injection function ---
|
|
103
|
-
const CONNECTED_VALUE = { __class__: "ConnectedValue" };
|
|
104
93
|
/**
|
|
105
94
|
* Inject ConnectedValue markers into a state dict for all connections.
|
|
106
95
|
*
|
|
@@ -181,12 +170,6 @@ function _mergeParam(connections, toolInput, state, prefix, branchConnections) {
|
|
|
181
170
|
}
|
|
182
171
|
}
|
|
183
172
|
// --- ConnectedValue stripping ---
|
|
184
|
-
function _isConnectedValue(value) {
|
|
185
|
-
return (value != null &&
|
|
186
|
-
typeof value === "object" &&
|
|
187
|
-
!Array.isArray(value) &&
|
|
188
|
-
value.__class__ === "ConnectedValue");
|
|
189
|
-
}
|
|
190
173
|
/**
|
|
191
174
|
* Strip ConnectedValue markers from a state dict using the parameter tree.
|
|
192
175
|
*
|
|
@@ -240,7 +223,7 @@ function _stripParam(toolInput, state, prefix) {
|
|
|
240
223
|
}
|
|
241
224
|
else {
|
|
242
225
|
// Leaf parameter
|
|
243
|
-
if (
|
|
226
|
+
if (isConnectedValue(state[name])) {
|
|
244
227
|
delete state[name];
|
|
245
228
|
}
|
|
246
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-merge.js","sourceRoot":"","sources":["../../src/workflow/state-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"state-merge.js","sourceRoot":"","sources":["../../src/workflow/state-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-aware (stateful) state conversion between native and format2 formats.
|
|
3
|
+
*
|
|
4
|
+
* Uses the walker to traverse tool_state with parameter definitions,
|
|
5
|
+
* coercing scalar types and separating connections/runtime values.
|
|
6
|
+
*
|
|
7
|
+
* Design: no double encoding, no legacy decode, clean dicts throughout.
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolParameterModel } from "../schema/bundle-types.js";
|
|
10
|
+
import type { NormalizedNativeStep } from "./normalized/native.js";
|
|
11
|
+
/**
|
|
12
|
+
* Coerce a native scalar value to its format2 representation.
|
|
13
|
+
*
|
|
14
|
+
* Native tool_state may have string-typed numbers, booleans, or
|
|
15
|
+
* comma-delimited multi-selects. Format2 uses proper JS types.
|
|
16
|
+
*/
|
|
17
|
+
export declare function convertScalarValue(toolInput: ToolParameterModel, value: unknown): unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Reverse-coerce a format2 scalar value back to native representation.
|
|
20
|
+
*
|
|
21
|
+
* Format2 uses proper JS types; native may need string coercions for
|
|
22
|
+
* multi-select and data_column values.
|
|
23
|
+
*/
|
|
24
|
+
export declare function reverseScalarValue(toolInput: ToolParameterModel, value: unknown): unknown;
|
|
25
|
+
export interface Format2ConvertedState {
|
|
26
|
+
state: Record<string, unknown>;
|
|
27
|
+
in: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert a native step's tool_state to format2 state + in block.
|
|
31
|
+
*
|
|
32
|
+
* Walks the parameter tree:
|
|
33
|
+
* - Data params → `in` block (connected/runtime) or SKIP
|
|
34
|
+
* - ConnectedValue/RuntimeValue markers → `in` block
|
|
35
|
+
* - gx_rules → parse JSON string, SKIP if null/connected
|
|
36
|
+
* - Null/"null" values → SKIP
|
|
37
|
+
* - Scalars → coerce via convertScalarValue()
|
|
38
|
+
*/
|
|
39
|
+
export declare function convertStateToFormat2(nativeStep: NormalizedNativeStep, toolInputs: ToolParameterModel[]): Format2ConvertedState;
|
|
40
|
+
/**
|
|
41
|
+
* Encode format2 state back to native tool_state.
|
|
42
|
+
*
|
|
43
|
+
* Walks format2 state reversing coercions (e.g. number arrays → string arrays
|
|
44
|
+
* for multi-select/data_column). Returns a clean dict — no JSON.stringify per key.
|
|
45
|
+
*/
|
|
46
|
+
export declare function encodeStateToNative(toolInputs: ToolParameterModel[], state: Record<string, unknown>): Record<string, unknown>;
|
|
47
|
+
//# sourceMappingURL=stateful-convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateful-convert.d.ts","sourceRoot":"","sources":["../../src/workflow/stateful-convert.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQnE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA8BzF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAqBzF;AAID,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAKD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,oBAAoB,EAChC,UAAU,EAAE,kBAAkB,EAAE,GAC/B,qBAAqB,CA+DvB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,kBAAkB,EAAE,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-aware (stateful) state conversion between native and format2 formats.
|
|
3
|
+
*
|
|
4
|
+
* Uses the walker to traverse tool_state with parameter definitions,
|
|
5
|
+
* coercing scalar types and separating connections/runtime values.
|
|
6
|
+
*
|
|
7
|
+
* Design: no double encoding, no legacy decode, clean dicts throughout.
|
|
8
|
+
*/
|
|
9
|
+
import { walkNativeState, walkFormat2State, SKIP_VALUE } from "./walker.js";
|
|
10
|
+
import { isConnectedValue, isRuntimeValue } from "./runtime-markers.js";
|
|
11
|
+
import { parseBool, parseNumber, parseStringArray, parseNumberArray } from "./coercions.js";
|
|
12
|
+
// --- Scalar coercions ---
|
|
13
|
+
/**
|
|
14
|
+
* Coerce a native scalar value to its format2 representation.
|
|
15
|
+
*
|
|
16
|
+
* Native tool_state may have string-typed numbers, booleans, or
|
|
17
|
+
* comma-delimited multi-selects. Format2 uses proper JS types.
|
|
18
|
+
*/
|
|
19
|
+
export function convertScalarValue(toolInput, value) {
|
|
20
|
+
const paramType = toolInput.parameter_type;
|
|
21
|
+
if (paramType === "gx_integer" || paramType === "gx_float") {
|
|
22
|
+
return parseNumber(value) ?? value;
|
|
23
|
+
}
|
|
24
|
+
if (paramType === "gx_boolean") {
|
|
25
|
+
return parseBool(value) ?? value;
|
|
26
|
+
}
|
|
27
|
+
if (paramType === "gx_select") {
|
|
28
|
+
const select = toolInput;
|
|
29
|
+
if (select.multiple) {
|
|
30
|
+
return parseStringArray(value) ?? value;
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
if (paramType === "gx_data_column") {
|
|
35
|
+
const col = toolInput;
|
|
36
|
+
if (col.multiple) {
|
|
37
|
+
return parseNumberArray(value) ?? value;
|
|
38
|
+
}
|
|
39
|
+
return parseNumber(value) ?? value;
|
|
40
|
+
}
|
|
41
|
+
// Passthrough for text, color, hidden, directory_uri, genomebuild,
|
|
42
|
+
// baseurl, drill_down, group_tag, and CWL types
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reverse-coerce a format2 scalar value back to native representation.
|
|
47
|
+
*
|
|
48
|
+
* Format2 uses proper JS types; native may need string coercions for
|
|
49
|
+
* multi-select and data_column values.
|
|
50
|
+
*/
|
|
51
|
+
export function reverseScalarValue(toolInput, value) {
|
|
52
|
+
const paramType = toolInput.parameter_type;
|
|
53
|
+
if (paramType === "gx_select") {
|
|
54
|
+
const select = toolInput;
|
|
55
|
+
if (select.multiple && Array.isArray(value)) {
|
|
56
|
+
return value.map(String);
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
if (paramType === "gx_data_column") {
|
|
61
|
+
const col = toolInput;
|
|
62
|
+
if (col.multiple && Array.isArray(value)) {
|
|
63
|
+
return value.map(String);
|
|
64
|
+
}
|
|
65
|
+
return typeof value === "number" ? String(value) : value;
|
|
66
|
+
}
|
|
67
|
+
// Most types pass through unchanged
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
/** Data parameter types — always go to `in` block, never to state. */
|
|
71
|
+
const DATA_PARAM_TYPES = new Set(["gx_data", "gx_data_collection"]);
|
|
72
|
+
/**
|
|
73
|
+
* Convert a native step's tool_state to format2 state + in block.
|
|
74
|
+
*
|
|
75
|
+
* Walks the parameter tree:
|
|
76
|
+
* - Data params → `in` block (connected/runtime) or SKIP
|
|
77
|
+
* - ConnectedValue/RuntimeValue markers → `in` block
|
|
78
|
+
* - gx_rules → parse JSON string, SKIP if null/connected
|
|
79
|
+
* - Null/"null" values → SKIP
|
|
80
|
+
* - Scalars → coerce via convertScalarValue()
|
|
81
|
+
*/
|
|
82
|
+
export function convertStateToFormat2(nativeStep, toolInputs) {
|
|
83
|
+
const toolState = nativeStep.tool_state;
|
|
84
|
+
// Widen readonly tuples to unknown for the walker's connection lookup.
|
|
85
|
+
const inputConnections = nativeStep.input_connections;
|
|
86
|
+
const connectedPaths = nativeStep.connected_paths;
|
|
87
|
+
const inBlock = {};
|
|
88
|
+
const leafCallback = (toolInput, value, statePath) => {
|
|
89
|
+
const paramType = toolInput.parameter_type;
|
|
90
|
+
// Data parameters: always to `in` block
|
|
91
|
+
if (DATA_PARAM_TYPES.has(paramType)) {
|
|
92
|
+
if (isConnectedValue(value) || connectedPaths.has(statePath)) {
|
|
93
|
+
// Connected data param — recorded via input_connections, handled by structural conversion
|
|
94
|
+
}
|
|
95
|
+
if (isRuntimeValue(value)) {
|
|
96
|
+
inBlock[statePath] = "runtime_value";
|
|
97
|
+
}
|
|
98
|
+
return SKIP_VALUE;
|
|
99
|
+
}
|
|
100
|
+
// Rules parameter: parse JSON string
|
|
101
|
+
if (paramType === "gx_rules") {
|
|
102
|
+
if (value == null || isConnectedValue(value)) {
|
|
103
|
+
if (isConnectedValue(value) || connectedPaths.has(statePath)) {
|
|
104
|
+
// Will be in `in` block via structural conversion
|
|
105
|
+
}
|
|
106
|
+
return SKIP_VALUE;
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === "string") {
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(value);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
// ConnectedValue → record in `in` block, skip from state
|
|
119
|
+
if (isConnectedValue(value)) {
|
|
120
|
+
// Connection source handled by structural conversion's input_connections
|
|
121
|
+
return SKIP_VALUE;
|
|
122
|
+
}
|
|
123
|
+
// RuntimeValue → record in `in` block, skip from state
|
|
124
|
+
if (isRuntimeValue(value)) {
|
|
125
|
+
inBlock[statePath] = "runtime_value";
|
|
126
|
+
return SKIP_VALUE;
|
|
127
|
+
}
|
|
128
|
+
// Null / "null" values → skip
|
|
129
|
+
if (value === null || value === undefined || value === "null") {
|
|
130
|
+
return SKIP_VALUE;
|
|
131
|
+
}
|
|
132
|
+
// Scalar coercion
|
|
133
|
+
return convertScalarValue(toolInput, value);
|
|
134
|
+
};
|
|
135
|
+
const state = walkNativeState(inputConnections, toolInputs, toolState, leafCallback);
|
|
136
|
+
return { state, in: inBlock };
|
|
137
|
+
}
|
|
138
|
+
// --- Format2 → Native conversion ---
|
|
139
|
+
/**
|
|
140
|
+
* Encode format2 state back to native tool_state.
|
|
141
|
+
*
|
|
142
|
+
* Walks format2 state reversing coercions (e.g. number arrays → string arrays
|
|
143
|
+
* for multi-select/data_column). Returns a clean dict — no JSON.stringify per key.
|
|
144
|
+
*/
|
|
145
|
+
export function encodeStateToNative(toolInputs, state) {
|
|
146
|
+
const leafCallback = (toolInput, value) => {
|
|
147
|
+
return reverseScalarValue(toolInput, value);
|
|
148
|
+
};
|
|
149
|
+
return walkFormat2State(toolInputs, state, leafCallback);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=stateful-convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateful-convert.js","sourceRoot":"","sources":["../../src/workflow/stateful-convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validation wrappers for stateful conversion.
|
|
3
|
+
*
|
|
4
|
+
* Runs the generated Effect Schema (`createFieldModel`) against native
|
|
5
|
+
* tool_state (pre-conversion) and format2 state (post-conversion), throwing
|
|
6
|
+
* a tagged `ConversionValidationFailure` on mismatch. The stateful wrappers
|
|
7
|
+
* catch this and push a structured fallback entry so callers can
|
|
8
|
+
* distinguish validation failures from walker errors.
|
|
9
|
+
*
|
|
10
|
+
* Deferred from Step 2 of TS_STATEFUL_CONVERSION_PLAN — integration point
|
|
11
|
+
* is the stateful runner, which calls these pre/post `convert`.
|
|
12
|
+
*/
|
|
13
|
+
import "../schema/parameters/index.js";
|
|
14
|
+
import type { ToolParameterModel } from "../schema/bundle-types.js";
|
|
15
|
+
export type ValidationPhase = "pre" | "post";
|
|
16
|
+
/**
|
|
17
|
+
* Thrown when tool_state fails Effect Schema validation before or after
|
|
18
|
+
* stateful conversion. Carries the phase and formatted issue list so the
|
|
19
|
+
* runner can emit a structured fallback status.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ConversionValidationFailure extends Error {
|
|
22
|
+
readonly phase: ValidationPhase;
|
|
23
|
+
readonly issues: string[];
|
|
24
|
+
readonly _tag: "ConversionValidationFailure";
|
|
25
|
+
constructor(phase: ValidationPhase, issues: string[]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate native tool_state against `workflow_step_native`. Connection
|
|
29
|
+
* paths are merged as `ConnectedValue` markers before validation so linked
|
|
30
|
+
* fields don't trip the schema.
|
|
31
|
+
*
|
|
32
|
+
* Returns silently if the schema cannot be built (unsupported parameter
|
|
33
|
+
* types) or if validation passes. Throws `ConversionValidationFailure`
|
|
34
|
+
* with phase="pre" on validation failure.
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateNativeStepState(inputs: ToolParameterModel[], toolState: Record<string, unknown>, inputConnections?: Record<string, unknown>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Validate format2 tool_state against `workflow_step`. Any stray
|
|
39
|
+
* `ConnectedValue` markers left over from normalization are stripped
|
|
40
|
+
* before validation (they belong in the `in` block, not the state).
|
|
41
|
+
*
|
|
42
|
+
* Returns silently on success or if the schema cannot be built. Throws
|
|
43
|
+
* `ConversionValidationFailure` with phase="post" on validation failure.
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateFormat2StepState(inputs: ToolParameterModel[], format2State: Record<string, unknown>): void;
|
|
46
|
+
//# sourceMappingURL=stateful-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateful-validate.d.ts","sourceRoot":"","sources":["../../src/workflow/stateful-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG9F,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7C;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;aAGlC,KAAK,EAAE,eAAe;aACtB,MAAM,EAAE,MAAM,EAAE;IAHlC,QAAQ,CAAC,IAAI,EAAG,6BAA6B,CAAU;gBAErC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,EAAE;CAKnC;AAiBD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC7C,IAAI,CAiBN;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,IAAI,CAaN"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema validation wrappers for stateful conversion.
|
|
3
|
+
*
|
|
4
|
+
* Runs the generated Effect Schema (`createFieldModel`) against native
|
|
5
|
+
* tool_state (pre-conversion) and format2 state (post-conversion), throwing
|
|
6
|
+
* a tagged `ConversionValidationFailure` on mismatch. The stateful wrappers
|
|
7
|
+
* catch this and push a structured fallback entry so callers can
|
|
8
|
+
* distinguish validation failures from walker errors.
|
|
9
|
+
*
|
|
10
|
+
* Deferred from Step 2 of TS_STATEFUL_CONVERSION_PLAN — integration point
|
|
11
|
+
* is the stateful runner, which calls these pre/post `convert`.
|
|
12
|
+
*/
|
|
13
|
+
import * as S from "effect/Schema";
|
|
14
|
+
import * as ParseResult from "effect/ParseResult";
|
|
15
|
+
// Side-effect import: registers all parameter generators so createFieldModel
|
|
16
|
+
// can look them up. Without this, a direct import of model-factory returns
|
|
17
|
+
// undefined for every call (the parameters/index.js side-effects never run).
|
|
18
|
+
import "../schema/parameters/index.js";
|
|
19
|
+
import { createFieldModel } from "../schema/model-factory.js";
|
|
20
|
+
import { injectConnectionsIntoState, stripConnectedValues } from "./state-merge.js";
|
|
21
|
+
/**
|
|
22
|
+
* Thrown when tool_state fails Effect Schema validation before or after
|
|
23
|
+
* stateful conversion. Carries the phase and formatted issue list so the
|
|
24
|
+
* runner can emit a structured fallback status.
|
|
25
|
+
*/
|
|
26
|
+
export class ConversionValidationFailure extends Error {
|
|
27
|
+
phase;
|
|
28
|
+
issues;
|
|
29
|
+
_tag = "ConversionValidationFailure";
|
|
30
|
+
constructor(phase, issues) {
|
|
31
|
+
super(`state failed ${phase}-conversion validation: ${issues.join("; ")}`);
|
|
32
|
+
this.phase = phase;
|
|
33
|
+
this.issues = issues;
|
|
34
|
+
this.name = "ConversionValidationFailure";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function formatIssues(error) {
|
|
38
|
+
const issues = ParseResult.ArrayFormatter.formatErrorSync(error);
|
|
39
|
+
return issues.map((i) => (i.path.length ? `${i.path.join(".")}: ${i.message}` : i.message));
|
|
40
|
+
}
|
|
41
|
+
function buildBundle(inputs) {
|
|
42
|
+
return { parameters: inputs };
|
|
43
|
+
}
|
|
44
|
+
/** JSON-safe deep clone — tool_state is plain data. Avoids `structuredClone`
|
|
45
|
+
* which isn't in the schema package's TS lib (no `@types/node`). */
|
|
46
|
+
function deepClone(value) {
|
|
47
|
+
return JSON.parse(JSON.stringify(value));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate native tool_state against `workflow_step_native`. Connection
|
|
51
|
+
* paths are merged as `ConnectedValue` markers before validation so linked
|
|
52
|
+
* fields don't trip the schema.
|
|
53
|
+
*
|
|
54
|
+
* Returns silently if the schema cannot be built (unsupported parameter
|
|
55
|
+
* types) or if validation passes. Throws `ConversionValidationFailure`
|
|
56
|
+
* with phase="pre" on validation failure.
|
|
57
|
+
*/
|
|
58
|
+
export function validateNativeStepState(inputs, toolState, inputConnections = {}) {
|
|
59
|
+
const bundle = buildBundle(inputs);
|
|
60
|
+
const model = createFieldModel(bundle, "workflow_step_native");
|
|
61
|
+
if (!model)
|
|
62
|
+
return; // unsupported parameter types — skip validation, conversion may still work
|
|
63
|
+
// Deep copy + inject connections so ConnectedValue markers appear where the
|
|
64
|
+
// schema expects them (matches validate-workflow's native path).
|
|
65
|
+
const state = deepClone(toolState);
|
|
66
|
+
if (Object.keys(inputConnections).length > 0) {
|
|
67
|
+
injectConnectionsIntoState(inputs, state, inputConnections);
|
|
68
|
+
}
|
|
69
|
+
const decode = S.decodeUnknownEither(model, { onExcessProperty: "ignore" });
|
|
70
|
+
const result = decode(state);
|
|
71
|
+
if (result._tag === "Left") {
|
|
72
|
+
throw new ConversionValidationFailure("pre", formatIssues(result.left));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate format2 tool_state against `workflow_step`. Any stray
|
|
77
|
+
* `ConnectedValue` markers left over from normalization are stripped
|
|
78
|
+
* before validation (they belong in the `in` block, not the state).
|
|
79
|
+
*
|
|
80
|
+
* Returns silently on success or if the schema cannot be built. Throws
|
|
81
|
+
* `ConversionValidationFailure` with phase="post" on validation failure.
|
|
82
|
+
*/
|
|
83
|
+
export function validateFormat2StepState(inputs, format2State) {
|
|
84
|
+
const bundle = buildBundle(inputs);
|
|
85
|
+
const model = createFieldModel(bundle, "workflow_step");
|
|
86
|
+
if (!model)
|
|
87
|
+
return;
|
|
88
|
+
const state = deepClone(format2State);
|
|
89
|
+
stripConnectedValues(inputs, state);
|
|
90
|
+
const decode = S.decodeUnknownEither(model, { onExcessProperty: "ignore" });
|
|
91
|
+
const result = decode(state);
|
|
92
|
+
if (result._tag === "Left") {
|
|
93
|
+
throw new ConversionValidationFailure("post", formatIssues(result.left));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=stateful-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateful-validate.js","sourceRoot":"","sources":["../../src/workflow/stateful-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-aware state walkers for native and format2 workflow tool state.
|
|
3
|
+
*
|
|
4
|
+
* Port of Python galaxy.tool_util.workflow_state._walker.
|
|
5
|
+
*
|
|
6
|
+
* Walks the parameter tree using tool definitions, calling a leaf callback
|
|
7
|
+
* for each scalar parameter. Handles conditionals (branch selection),
|
|
8
|
+
* repeats (instance expansion), and sections (recursion). Builds a new
|
|
9
|
+
* state dict from callback return values.
|
|
10
|
+
*
|
|
11
|
+
* Design principles:
|
|
12
|
+
* - No double encoding: containers must be proper dicts/lists, never JSON strings
|
|
13
|
+
* - No legacy decode: string containers are errors, not silently accommodated
|
|
14
|
+
* - SKIP_VALUE sentinel omits a value from the output
|
|
15
|
+
*/
|
|
16
|
+
import type { ToolParameterModel } from "../schema/bundle-types.js";
|
|
17
|
+
/** Sentinel: return from leaf callback to omit a value from output. */
|
|
18
|
+
export declare const SKIP_VALUE: unique symbol;
|
|
19
|
+
export type LeafCallback = (toolInput: ToolParameterModel, value: unknown, statePath: string) => unknown | typeof SKIP_VALUE;
|
|
20
|
+
export interface WalkNativeOptions {
|
|
21
|
+
prefix?: string;
|
|
22
|
+
checkUnknownKeys?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Walk native workflow tool_state using the parameter tree.
|
|
26
|
+
*
|
|
27
|
+
* For each leaf parameter, calls `leafCallback(toolInput, value, statePath)`.
|
|
28
|
+
* Return values build the output dict; return SKIP_VALUE to omit.
|
|
29
|
+
*
|
|
30
|
+
* Containers (conditionals, repeats, sections) are recursed into.
|
|
31
|
+
* Bookkeeping keys (__current_case__, etc.) are stripped.
|
|
32
|
+
* Input connections are used to determine repeat instance counts.
|
|
33
|
+
*
|
|
34
|
+
* @throws Error if a container parameter value is a string (legacy encoding)
|
|
35
|
+
*/
|
|
36
|
+
export declare function walkNativeState(inputConnections: Record<string, unknown>, toolInputs: ToolParameterModel[], state: Record<string, unknown>, leafCallback: LeafCallback, options?: WalkNativeOptions): Record<string, unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* Walk format2 workflow tool state using the parameter tree.
|
|
39
|
+
*
|
|
40
|
+
* Simpler than native walking — no bookkeeping keys, no input connections,
|
|
41
|
+
* no double-encoding concerns. Clean dict walking with conditional branch
|
|
42
|
+
* selection, repeat iteration, section recursion.
|
|
43
|
+
*
|
|
44
|
+
* @throws Error if a container parameter value is a string
|
|
45
|
+
*/
|
|
46
|
+
export declare function walkFormat2State(toolInputs: ToolParameterModel[], state: Record<string, unknown>, leafCallback: LeafCallback, prefix?: string): Record<string, unknown>;
|
|
47
|
+
/** Error thrown when unknown keys are detected in native state. */
|
|
48
|
+
export declare class UnknownKeyError extends Error {
|
|
49
|
+
readonly key: string;
|
|
50
|
+
readonly prefix?: string | undefined;
|
|
51
|
+
constructor(key: string, prefix?: string | undefined);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../../src/workflow/walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,2BAA2B,CAAC;AAKnC,uEAAuE;AACvE,eAAO,MAAM,UAAU,EAAE,OAAO,MAA6B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,CACzB,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,KACd,OAAO,GAAG,OAAO,UAAU,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,kBAAkB,EAAE,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqGzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,kBAAkB,EAAE,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,YAAY,EAAE,YAAY,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2EzB;AAED,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,GAAG,EAAE,MAAM;aACX,MAAM,CAAC,EAAE,MAAM;gBADf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,YAAA;CAMlC"}
|