@galaxy-tool-util/schema 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.
Files changed (137) hide show
  1. package/dist/index.d.ts +75 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +48 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/schema/type-guards.d.ts +14 -0
  6. package/dist/schema/type-guards.d.ts.map +1 -0
  7. package/dist/schema/type-guards.js +25 -0
  8. package/dist/schema/type-guards.js.map +1 -0
  9. package/dist/test-format/cross-check/check.d.ts +18 -0
  10. package/dist/test-format/cross-check/check.d.ts.map +1 -0
  11. package/dist/test-format/cross-check/check.js +89 -0
  12. package/dist/test-format/cross-check/check.js.map +1 -0
  13. package/dist/test-format/cross-check/extract-format2.d.ts +13 -0
  14. package/dist/test-format/cross-check/extract-format2.d.ts.map +1 -0
  15. package/dist/test-format/cross-check/extract-format2.js +98 -0
  16. package/dist/test-format/cross-check/extract-format2.js.map +1 -0
  17. package/dist/test-format/cross-check/extract-native.d.ts +4 -0
  18. package/dist/test-format/cross-check/extract-native.d.ts.map +1 -0
  19. package/dist/test-format/cross-check/extract-native.js +89 -0
  20. package/dist/test-format/cross-check/extract-native.js.map +1 -0
  21. package/dist/test-format/cross-check/extract.d.ts +9 -0
  22. package/dist/test-format/cross-check/extract.d.ts.map +1 -0
  23. package/dist/test-format/cross-check/extract.js +16 -0
  24. package/dist/test-format/cross-check/extract.js.map +1 -0
  25. package/dist/test-format/cross-check/index.d.ts +7 -0
  26. package/dist/test-format/cross-check/index.d.ts.map +1 -0
  27. package/dist/test-format/cross-check/index.js +6 -0
  28. package/dist/test-format/cross-check/index.js.map +1 -0
  29. package/dist/test-format/cross-check/type-compat.d.ts +23 -0
  30. package/dist/test-format/cross-check/type-compat.d.ts.map +1 -0
  31. package/dist/test-format/cross-check/type-compat.js +48 -0
  32. package/dist/test-format/cross-check/type-compat.js.map +1 -0
  33. package/dist/test-format/cross-check/types.d.ts +23 -0
  34. package/dist/test-format/cross-check/types.d.ts.map +1 -0
  35. package/dist/test-format/cross-check/types.js +10 -0
  36. package/dist/test-format/cross-check/types.js.map +1 -0
  37. package/dist/test-format/index.d.ts +3 -0
  38. package/dist/test-format/index.d.ts.map +1 -0
  39. package/dist/test-format/index.js +3 -0
  40. package/dist/test-format/index.js.map +1 -0
  41. package/dist/test-format/tests.schema.generated.d.ts +5610 -0
  42. package/dist/test-format/tests.schema.generated.d.ts.map +1 -0
  43. package/dist/test-format/tests.schema.generated.js +6899 -0
  44. package/dist/test-format/tests.schema.generated.js.map +1 -0
  45. package/dist/test-format/validate.d.ts +20 -0
  46. package/dist/test-format/validate.d.ts.map +1 -0
  47. package/dist/test-format/validate.js +41 -0
  48. package/dist/test-format/validate.js.map +1 -0
  49. package/dist/tool-state-validator.d.ts +23 -0
  50. package/dist/tool-state-validator.d.ts.map +1 -0
  51. package/dist/tool-state-validator.js +59 -0
  52. package/dist/tool-state-validator.js.map +1 -0
  53. package/dist/workflow/clean.d.ts +29 -3
  54. package/dist/workflow/clean.d.ts.map +1 -1
  55. package/dist/workflow/clean.js +199 -28
  56. package/dist/workflow/clean.js.map +1 -1
  57. package/dist/workflow/index.d.ts +13 -5
  58. package/dist/workflow/index.d.ts.map +1 -1
  59. package/dist/workflow/index.js +13 -3
  60. package/dist/workflow/index.js.map +1 -1
  61. package/dist/workflow/lint-profiles.d.ts +27 -0
  62. package/dist/workflow/lint-profiles.d.ts.map +1 -0
  63. package/dist/workflow/lint-profiles.js +49 -0
  64. package/dist/workflow/lint-profiles.js.map +1 -0
  65. package/dist/workflow/lint-rules.d.ts +15 -0
  66. package/dist/workflow/lint-rules.d.ts.map +1 -0
  67. package/dist/workflow/lint-rules.js +15 -0
  68. package/dist/workflow/lint-rules.js.map +1 -0
  69. package/dist/workflow/lint.d.ts +4 -18
  70. package/dist/workflow/lint.d.ts.map +1 -1
  71. package/dist/workflow/lint.js +9 -30
  72. package/dist/workflow/lint.js.map +1 -1
  73. package/dist/workflow/lint_profiles.yml +41 -0
  74. package/dist/workflow/linting.d.ts +54 -0
  75. package/dist/workflow/linting.d.ts.map +1 -0
  76. package/dist/workflow/linting.js +71 -0
  77. package/dist/workflow/linting.js.map +1 -0
  78. package/dist/workflow/param-navigation.d.ts +26 -0
  79. package/dist/workflow/param-navigation.d.ts.map +1 -0
  80. package/dist/workflow/param-navigation.js +60 -0
  81. package/dist/workflow/param-navigation.js.map +1 -0
  82. package/dist/workflow/raw/gxformat2.effect.d.ts +341 -117
  83. package/dist/workflow/raw/gxformat2.effect.d.ts.map +1 -1
  84. package/dist/workflow/raw/gxformat2.effect.js +107 -109
  85. package/dist/workflow/raw/gxformat2.effect.js.map +1 -1
  86. package/dist/workflow/raw/native.d.ts +2 -2
  87. package/dist/workflow/raw/native.d.ts.map +1 -1
  88. package/dist/workflow/raw/native.effect.d.ts +150 -3
  89. package/dist/workflow/raw/native.effect.d.ts.map +1 -1
  90. package/dist/workflow/raw/native.effect.js +3 -5
  91. package/dist/workflow/raw/native.effect.js.map +1 -1
  92. package/dist/workflow/report-models.d.ts +412 -0
  93. package/dist/workflow/report-models.d.ts.map +1 -0
  94. package/dist/workflow/report-models.js +342 -0
  95. package/dist/workflow/report-models.js.map +1 -0
  96. package/dist/workflow/roundtrip.d.ts +31 -8
  97. package/dist/workflow/roundtrip.d.ts.map +1 -1
  98. package/dist/workflow/roundtrip.js +107 -26
  99. package/dist/workflow/roundtrip.js.map +1 -1
  100. package/dist/workflow/schema-rules.d.ts +38 -0
  101. package/dist/workflow/schema-rules.d.ts.map +1 -0
  102. package/dist/workflow/schema-rules.js +28 -0
  103. package/dist/workflow/schema-rules.js.map +1 -0
  104. package/dist/workflow/schema_rules.yml +69 -0
  105. package/dist/workflow/serialize.d.ts +30 -0
  106. package/dist/workflow/serialize.d.ts.map +1 -0
  107. package/dist/workflow/serialize.js +37 -0
  108. package/dist/workflow/serialize.js.map +1 -0
  109. package/dist/workflow/state-merge.d.ts +15 -32
  110. package/dist/workflow/state-merge.d.ts.map +1 -1
  111. package/dist/workflow/state-merge.js +30 -207
  112. package/dist/workflow/state-merge.js.map +1 -1
  113. package/dist/workflow/stateful-validate.d.ts +21 -0
  114. package/dist/workflow/stateful-validate.d.ts.map +1 -1
  115. package/dist/workflow/stateful-validate.js +27 -0
  116. package/dist/workflow/stateful-validate.js.map +1 -1
  117. package/dist/workflow/strict-checks.d.ts +22 -0
  118. package/dist/workflow/strict-checks.d.ts.map +1 -0
  119. package/dist/workflow/strict-checks.js +95 -0
  120. package/dist/workflow/strict-checks.js.map +1 -0
  121. package/dist/workflow/tool-state-io.d.ts +14 -0
  122. package/dist/workflow/tool-state-io.d.ts.map +1 -0
  123. package/dist/workflow/tool-state-io.js +33 -0
  124. package/dist/workflow/tool-state-io.js.map +1 -0
  125. package/dist/workflow/validators.d.ts +34 -0
  126. package/dist/workflow/validators.d.ts.map +1 -0
  127. package/dist/workflow/validators.js +83 -0
  128. package/dist/workflow/validators.js.map +1 -0
  129. package/dist/workflow/walk-helpers.d.ts +29 -0
  130. package/dist/workflow/walk-helpers.d.ts.map +1 -0
  131. package/dist/workflow/walk-helpers.js +89 -0
  132. package/dist/workflow/walk-helpers.js.map +1 -0
  133. package/dist/workflow/walker.d.ts +2 -0
  134. package/dist/workflow/walker.d.ts.map +1 -1
  135. package/dist/workflow/walker.js +16 -6
  136. package/dist/workflow/walker.js.map +1 -1
  137. package/package.json +7 -6
package/dist/index.d.ts CHANGED
@@ -20,7 +20,25 @@ registeredValidatorTypes,
20
20
  /** Extract the set of parameter types used in a tool bundle. */
21
21
  collectParameterTypes,
22
22
  /** Extract the set of validator types used in a tool bundle. */
23
- collectValidatorTypes, type ToolParameterBundleModel, } from "./schema/index.js";
23
+ collectValidatorTypes, } from "./schema/index.js";
24
+ export {
25
+ /** Top-level bundle of tool parameters. */
26
+ type ToolParameterBundleModel,
27
+ /** Union of all tool parameter types (discriminated on parameter_type). */
28
+ type ToolParameterModel,
29
+ /** Union of leaf (non-container) Galaxy parameter types. */
30
+ type GalaxyParameterModel,
31
+ /** Union of container parameter types (section, repeat, conditional). */
32
+ type ContainerParameterModel,
33
+ /** Base fields shared by all leaf Galaxy parameter types. */
34
+ type BaseGalaxyParameterModel, type SelectParameterModel, type GenomeBuildParameterModel, type DrillDownParameterModel, type BooleanParameterModel, type SectionParameterModel, type RepeatParameterModel, type ConditionalParameterModel,
35
+ /** A single branch of a ConditionalParameterModel. */
36
+ type ConditionalWhen,
37
+ /** A label/value pair used in select and genomebuild options. */
38
+ type LabelValue, } from "./schema/bundle-types.js";
39
+ export {
40
+ /** True for gx_select, gx_genomebuild, gx_drill_down — params with an options list. */
41
+ isSelectLikeParam, isBooleanParam, isSectionParam, isRepeatParam, isConditionalParam, } from "./schema/type-guards.js";
24
42
  export { type GalaxyWorkflow,
25
43
  /** Union schema accepting any Galaxy workflow format (format2 or native). */
26
44
  GalaxyWorkflowSchema, type NativeGalaxyWorkflow,
@@ -59,17 +77,29 @@ toNativeStateful, type StepConversionStatus, type StepConversionFailureClass, ty
59
77
  /** Precheck a native workflow / step for stateful conversion compatibility. */
60
78
  precheckNativeWorkflow, precheckNativeStep, type PrecheckResult, type StepPrecheckResult,
61
79
  /** Effect Schema validation wrappers for stateful conversion (pre/post). */
62
- ConversionValidationFailure, validateNativeStepState, validateFormat2StepState, type ValidationPhase,
80
+ ConversionValidationFailure, validateNativeStepState, validateFormat2StepState,
81
+ /** Strict format2 state validation — reports unknown keys as diagnostics. */
82
+ validateFormat2StepStateStrict, type ValidationPhase,
83
+ /** Navigate a tool parameter tree by path segments (for LSP completion/hover). */
84
+ findParamAtPath, type ParamNavigationResult,
63
85
  /** Roundtrip a native workflow through format2 and back, diffing tool_state per step. */
64
- roundtripValidate, type RoundtripResult, type StepRoundtripResult, type StepDiff, type DiffSeverity, type BenignArtifactKind, type RoundtripFailureClass,
86
+ roundtripValidate, type RoundtripResult, type RoundtripStrictOptions, type StepRoundtripResult, type BenignArtifactKind, type RoundtripFailureClass,
65
87
  /** Scan native workflow tool_state for legacy parameter encoding signals. */
66
88
  scanToolState, type LegacyEncodingClassification, type LegacyEncodingHit, type LegacyEncodingScanResult,
67
89
  /** Clean a workflow — strip stale keys, decode legacy tool_state encoding. */
68
- cleanWorkflow,
90
+ cleanWorkflow, type CleanWorkflowResult,
69
91
  /** Detect whether a workflow dict is native (.ga) or format2 (.gxwf.yml). */
70
92
  detectFormat, type WorkflowFormat,
93
+ /** Format-aware workflow serializer (JSON/YAML, configurable indent and newline). */
94
+ serializeWorkflow, type SerializeWorkflowOptions,
95
+ /** Resolve workflow format from an optional override, falling back to detectFormat. */
96
+ resolveFormat,
71
97
  /** Lint context for tracking errors and warnings during workflow linting. */
72
98
  LintContext,
99
+ /** Structured lint emission (message + level + linter + json_pointer). */
100
+ LintMessage,
101
+ /** Metadata-only base class for lint rules. */
102
+ Linter, LEVEL_ERROR, LEVEL_WARN,
73
103
  /** Lint a native Galaxy workflow (.ga format). */
74
104
  lintNative,
75
105
  /** Lint a Format2 Galaxy workflow (.gxwf.yml format). */
@@ -79,5 +109,45 @@ lintWorkflow,
79
109
  /** Lint best practices for a Format2 Galaxy workflow. */
80
110
  lintBestPracticesFormat2,
81
111
  /** Lint best practices for a native Galaxy workflow. */
82
- lintBestPracticesNative, type LintResult, } from "./workflow/index.js";
112
+ lintBestPracticesNative, type LintLevel, type LintResult, type LinterRef, type EmitOptions,
113
+ /** Lint rule classes (one per rule id). */
114
+ NativeStepKeyNotInteger,
115
+ /** Lint profile catalog loader — parses `lint_profiles.yml`. */
116
+ parseLintProfiles, lintProfilesById, rulesForProfile, iwcRuleIds, LINT_PROFILES_FILENAME, IWC_PROFILE_NAMES, type LintProfile,
117
+ /** Strict encoding check — reject JSON-string tool_state (native) or tool_state field misuse (format2). */
118
+ validateEncodingNative, validateEncodingFormat2, checkStrictEncoding,
119
+ /** Strict structure check — reject unknown keys via onExcessProperty: "error". */
120
+ checkStrictStructure,
121
+ /** Inject `class` discriminator into workflow dict when missing (recursive over step subworkflows). */
122
+ withClass,
123
+ /** Effect-schema validator dispatch mirroring gxformat2/validators.py. */
124
+ validateFormat2, validateFormat2Strict, validateNative, validateNativeStrict, validatorForFixture, type StepStatus, SKIP_STATUSES, type ValidationStepResult, type CleanStepResult, type ResolvedOutputType, type ConnectionResult, type ConnectionStepResult, type ConnectionValidationReport, type WorkflowEntry, type WorkflowIndex, type SingleValidationReport, type SingleLintReport, type SingleCleanReport, type DiffType, type DiffSeverity, type BenignArtifact, type StepDiff, type SkipWorkflowReason, type FailureClass, type StepResult, type RoundTripResult, type StepIdMappingResult, type RoundTripValidationResult, type SingleRoundTripReport, type SingleExportReport, type StepEncodeStatus, type ToNativeResult, type WorkflowSourceFormat, type ExportResult, type ConvertResult, type WorkflowValidationResult, type LintWorkflowResult, type WorkflowCleanResult, type CategoryGroup, type TreeValidationReport, type LintTreeReport, type TreeCleanReport, type WorkflowExportResult, type ExportTreeReport, type WorkflowToNativeResult, type ToNativeTreeReport, type ToolFailureMode, type RoundTripTreeReport, validationSummary, validationFailures, cleanDisplayLabel, categoryOf, groupByCategory, buildSingleValidationReport, buildSingleLintReport, buildSingleCleanReport, buildWorkflowValidationResult, buildLintWorkflowResult, buildWorkflowCleanResult, buildTreeValidationReport, buildLintTreeReport, buildTreeCleanReport, buildWorkflowExportResult, buildExportTreeReport, buildWorkflowToNativeResult, buildToNativeTreeReport, buildRoundTripTreeReport, type CleanWorkflowOptions, } from "./workflow/index.js";
125
+ export { ToolStateValidator, type ToolStateDiagnostic } from "./tool-state-validator.js";
126
+ export {
127
+ /** Validate a parsed *.gxwf-tests.yml / Planemo *-tests.yml document. */
128
+ validateTestsFile,
129
+ /** Raw JSON Schema synced from galaxy.tool_util_models.Tests (Python source of truth). */
130
+ testsSchema, type TestFormatDiagnostic,
131
+ /** Workflow-input DTO shared with the VS Code plugin. */
132
+ type WorkflowInput,
133
+ /** Workflow-output DTO shared with the VS Code plugin. */
134
+ type WorkflowOutput,
135
+ /** Workflow parameter type vocabulary (stringified; extractors don't canonicalize). */
136
+ type WorkflowDataType,
137
+ /** Workflow shape consumed by `checkTestsAgainstWorkflow`. */
138
+ type WorkflowShape,
139
+ /** Extract inputs from a parsed workflow dict (auto-detects format). */
140
+ extractWorkflowInputs,
141
+ /** Extract outputs from a parsed workflow dict (auto-detects format). */
142
+ extractWorkflowOutputs,
143
+ /** Format2-specific extractors (operate on raw parsed dicts, not AST). */
144
+ extractFormat2Inputs, extractFormat2Outputs,
145
+ /** Native (.ga) extractors (read step-level tool_state for default/optional). */
146
+ extractNativeInputs, extractNativeOutputs,
147
+ /** Coarse type compatibility used by cross-check; permissive default. Takes type *strings* on both sides. */
148
+ isCompatibleType,
149
+ /** Runtime type tag for a JS value, in the YAML-language-server AST vocabulary. */
150
+ jsTypeOf,
151
+ /** Cross-check a tests doc against workflow shape; emits JSON-pointer diagnostics. */
152
+ checkTestsAgainstWorkflow, } from "./test-format/index.js";
83
153
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO;AACL,0FAA0F;AAC1F,gBAAgB,EAChB,KAAK,mBAAmB;AACxB,4CAA4C;AAC5C,qBAAqB;AACrB,wEAAwE;AACxE,yBAAyB;AACzB,6DAA6D;AAC7D,wBAAwB;AACxB,wEAAwE;AACxE,yBAAyB;AACzB,6DAA6D;AAC7D,wBAAwB;AACxB,gEAAgE;AAChE,qBAAqB;AACrB,gEAAgE;AAChE,qBAAqB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,cAAc;AACnB,6EAA6E;AAC7E,oBAAoB,EACpB,KAAK,oBAAoB;AACzB,oDAAoD;AACpD,0BAA0B;AAC1B,mFAAmF;AACnF,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B;AAChC,wFAAwF;AACxF,gBAAgB,EAChB,8BAA8B,EAC9B,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,aAAa;AAClB,iEAAiE;AACjE,0BAA0B;AAC1B,oEAAoE;AACpE,oBAAoB;AACpB,iEAAiE;AACjE,aAAa,EACb,gBAAgB;AAChB,6CAA6C;AAC7C,mBAAmB;AACnB,qEAAqE;AACrE,eAAe;AACf,6DAA6D;AAC7D,mBAAmB;AACnB,gFAAgF;AAChF,eAAe;AACf,+EAA+E;AAC/E,cAAc;AACd,mEAAmE;AACnE,QAAQ,EACR,mBAAmB,EACnB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,gBAAgB;AACrB,qDAAqD;AACrD,SAAS;AACT,qDAAqD;AACrD,QAAQ;AACR,0EAA0E;AAC1E,iBAAiB;AACjB,0EAA0E;AAC1E,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB;AACvB,+EAA+E;AAC/E,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB;AACvB,4EAA4E;AAC5E,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,eAAe;AACpB,yFAAyF;AACzF,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB;AAC1B,6EAA6E;AAC7E,aAAa,EACb,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,wBAAwB;AAC7B,8EAA8E;AAC9E,aAAa;AACb,6EAA6E;AAC7E,YAAY,EACZ,KAAK,cAAc;AACnB,6EAA6E;AAC7E,WAAW;AACX,kDAAkD;AAClD,UAAU;AACV,yDAAyD;AACzD,WAAW;AACX,8CAA8C;AAC9C,YAAY;AACZ,yDAAyD;AACzD,wBAAwB;AACxB,wDAAwD;AACxD,uBAAuB,EACvB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -22,6 +22,9 @@ collectParameterTypes,
22
22
  /** Extract the set of validator types used in a tool bundle. */
23
23
  collectValidatorTypes, } from "./schema/index.js";
24
24
  export {
25
+ /** True for gx_select, gx_genomebuild, gx_drill_down — params with an options list. */
26
+ isSelectLikeParam, isBooleanParam, isSectionParam, isRepeatParam, isConditionalParam, } from "./schema/type-guards.js";
27
+ export {
25
28
  /** Union schema accepting any Galaxy workflow format (format2 or native). */
26
29
  GalaxyWorkflowSchema,
27
30
  /** Schema for raw native (.ga) Galaxy workflows. */
@@ -60,6 +63,10 @@ toNativeStateful,
60
63
  precheckNativeWorkflow, precheckNativeStep,
61
64
  /** Effect Schema validation wrappers for stateful conversion (pre/post). */
62
65
  ConversionValidationFailure, validateNativeStepState, validateFormat2StepState,
66
+ /** Strict format2 state validation — reports unknown keys as diagnostics. */
67
+ validateFormat2StepStateStrict,
68
+ /** Navigate a tool parameter tree by path segments (for LSP completion/hover). */
69
+ findParamAtPath,
63
70
  /** Roundtrip a native workflow through format2 and back, diffing tool_state per step. */
64
71
  roundtripValidate,
65
72
  /** Scan native workflow tool_state for legacy parameter encoding signals. */
@@ -68,8 +75,16 @@ scanToolState,
68
75
  cleanWorkflow,
69
76
  /** Detect whether a workflow dict is native (.ga) or format2 (.gxwf.yml). */
70
77
  detectFormat,
78
+ /** Format-aware workflow serializer (JSON/YAML, configurable indent and newline). */
79
+ serializeWorkflow,
80
+ /** Resolve workflow format from an optional override, falling back to detectFormat. */
81
+ resolveFormat,
71
82
  /** Lint context for tracking errors and warnings during workflow linting. */
72
83
  LintContext,
84
+ /** Structured lint emission (message + level + linter + json_pointer). */
85
+ LintMessage,
86
+ /** Metadata-only base class for lint rules. */
87
+ Linter, LEVEL_ERROR, LEVEL_WARN,
73
88
  /** Lint a native Galaxy workflow (.ga format). */
74
89
  lintNative,
75
90
  /** Lint a Format2 Galaxy workflow (.gxwf.yml format). */
@@ -79,5 +94,37 @@ lintWorkflow,
79
94
  /** Lint best practices for a Format2 Galaxy workflow. */
80
95
  lintBestPracticesFormat2,
81
96
  /** Lint best practices for a native Galaxy workflow. */
82
- lintBestPracticesNative, } from "./workflow/index.js";
97
+ lintBestPracticesNative,
98
+ /** Lint rule classes (one per rule id). */
99
+ NativeStepKeyNotInteger,
100
+ /** Lint profile catalog loader — parses `lint_profiles.yml`. */
101
+ parseLintProfiles, lintProfilesById, rulesForProfile, iwcRuleIds, LINT_PROFILES_FILENAME, IWC_PROFILE_NAMES,
102
+ /** Strict encoding check — reject JSON-string tool_state (native) or tool_state field misuse (format2). */
103
+ validateEncodingNative, validateEncodingFormat2, checkStrictEncoding,
104
+ /** Strict structure check — reject unknown keys via onExcessProperty: "error". */
105
+ checkStrictStructure,
106
+ /** Inject `class` discriminator into workflow dict when missing (recursive over step subworkflows). */
107
+ withClass,
108
+ /** Effect-schema validator dispatch mirroring gxformat2/validators.py. */
109
+ validateFormat2, validateFormat2Strict, validateNative, validateNativeStrict, validatorForFixture, SKIP_STATUSES, validationSummary, validationFailures, cleanDisplayLabel, categoryOf, groupByCategory, buildSingleValidationReport, buildSingleLintReport, buildSingleCleanReport, buildWorkflowValidationResult, buildLintWorkflowResult, buildWorkflowCleanResult, buildTreeValidationReport, buildLintTreeReport, buildTreeCleanReport, buildWorkflowExportResult, buildExportTreeReport, buildWorkflowToNativeResult, buildToNativeTreeReport, buildRoundTripTreeReport, } from "./workflow/index.js";
110
+ export { ToolStateValidator } from "./tool-state-validator.js";
111
+ export {
112
+ /** Validate a parsed *.gxwf-tests.yml / Planemo *-tests.yml document. */
113
+ validateTestsFile,
114
+ /** Raw JSON Schema synced from galaxy.tool_util_models.Tests (Python source of truth). */
115
+ testsSchema,
116
+ /** Extract inputs from a parsed workflow dict (auto-detects format). */
117
+ extractWorkflowInputs,
118
+ /** Extract outputs from a parsed workflow dict (auto-detects format). */
119
+ extractWorkflowOutputs,
120
+ /** Format2-specific extractors (operate on raw parsed dicts, not AST). */
121
+ extractFormat2Inputs, extractFormat2Outputs,
122
+ /** Native (.ga) extractors (read step-level tool_state for default/optional). */
123
+ extractNativeInputs, extractNativeOutputs,
124
+ /** Coarse type compatibility used by cross-check; permissive default. Takes type *strings* on both sides. */
125
+ isCompatibleType,
126
+ /** Runtime type tag for a JS value, in the YAML-language-server AST vocabulary. */
127
+ jsTypeOf,
128
+ /** Cross-check a tests doc against workflow shape; emits JSON-pointer diagnostics. */
129
+ checkTestsAgainstWorkflow, } from "./test-format/index.js";
83
130
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO;AACL,0FAA0F;AAC1F,gBAAgB;AAEhB,4CAA4C;AAC5C,qBAAqB;AACrB,wEAAwE;AACxE,yBAAyB;AACzB,6DAA6D;AAC7D,wBAAwB;AACxB,wEAAwE;AACxE,yBAAyB;AACzB,6DAA6D;AAC7D,wBAAwB;AACxB,gEAAgE;AAChE,qBAAqB;AACrB,gEAAgE;AAChE,qBAAqB,GAEtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO;AAEL,6EAA6E;AAC7E,oBAAoB;AAEpB,oDAAoD;AACpD,0BAA0B;AAC1B,mFAAmF;AACnF,iBAAiB,EACjB,+BAA+B,EAC/B,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC;AAOjC,wFAAwF;AACxF,gBAAgB,EAChB,8BAA8B,EAC9B,0BAA0B,EAC1B,mBAAmB;AAInB,iEAAiE;AACjE,0BAA0B;AAC1B,oEAAoE;AACpE,oBAAoB;AACpB,iEAAiE;AACjE,aAAa,EACb,gBAAgB;AAChB,6CAA6C;AAC7C,mBAAmB;AACnB,qEAAqE;AACrE,eAAe;AACf,6DAA6D;AAC7D,mBAAmB;AACnB,gFAAgF;AAChF,eAAe;AACf,+EAA+E;AAC/E,cAAc;AACd,mEAAmE;AACnE,QAAQ,EACR,mBAAmB;AAOnB,qDAAqD;AACrD,SAAS;AACT,qDAAqD;AACrD,QAAQ;AACR,0EAA0E;AAC1E,iBAAiB;AACjB,0EAA0E;AAC1E,gBAAgB;AAMhB,+EAA+E;AAC/E,sBAAsB,EACtB,kBAAkB;AAGlB,4EAA4E;AAC5E,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB;AAExB,yFAAyF;AACzF,iBAAiB;AAOjB,6EAA6E;AAC7E,aAAa;AAIb,8EAA8E;AAC9E,aAAa;AACb,6EAA6E;AAC7E,YAAY;AAEZ,6EAA6E;AAC7E,WAAW;AACX,kDAAkD;AAClD,UAAU;AACV,yDAAyD;AACzD,WAAW;AACX,8CAA8C;AAC9C,YAAY;AACZ,yDAAyD;AACzD,wBAAwB;AACxB,wDAAwD;AACxD,uBAAuB,GAExB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Type guard predicates for ToolParameterModel discriminated union.
3
+ *
4
+ * Exported from the package index so consumers (e.g. language servers)
5
+ * don't need to duplicate these guards or reference bundle-types directly.
6
+ */
7
+ import type { BooleanParameterModel, ConditionalParameterModel, DrillDownParameterModel, GenomeBuildParameterModel, RepeatParameterModel, SectionParameterModel, SelectParameterModel, ToolParameterModel } from "./bundle-types.js";
8
+ /** True for gx_select, gx_genomebuild, and gx_drill_down — params with a flat options list. */
9
+ export declare function isSelectLikeParam(p: ToolParameterModel): p is SelectParameterModel | GenomeBuildParameterModel | DrillDownParameterModel;
10
+ export declare function isBooleanParam(p: ToolParameterModel): p is BooleanParameterModel;
11
+ export declare function isSectionParam(p: ToolParameterModel): p is SectionParameterModel;
12
+ export declare function isRepeatParam(p: ToolParameterModel): p is RepeatParameterModel;
13
+ export declare function isConditionalParam(p: ToolParameterModel): p is ConditionalParameterModel;
14
+ //# sourceMappingURL=type-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../src/schema/type-guards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,kBAAkB,GACpB,CAAC,IAAI,oBAAoB,GAAG,yBAAyB,GAAG,uBAAuB,CAMjF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,qBAAqB,CAEhF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,qBAAqB,CAEhF;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,oBAAoB,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,yBAAyB,CAExF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Type guard predicates for ToolParameterModel discriminated union.
3
+ *
4
+ * Exported from the package index so consumers (e.g. language servers)
5
+ * don't need to duplicate these guards or reference bundle-types directly.
6
+ */
7
+ /** True for gx_select, gx_genomebuild, and gx_drill_down — params with a flat options list. */
8
+ export function isSelectLikeParam(p) {
9
+ return (p.parameter_type === "gx_select" ||
10
+ p.parameter_type === "gx_genomebuild" ||
11
+ p.parameter_type === "gx_drill_down");
12
+ }
13
+ export function isBooleanParam(p) {
14
+ return p.parameter_type === "gx_boolean";
15
+ }
16
+ export function isSectionParam(p) {
17
+ return p.parameter_type === "gx_section";
18
+ }
19
+ export function isRepeatParam(p) {
20
+ return p.parameter_type === "gx_repeat";
21
+ }
22
+ export function isConditionalParam(p) {
23
+ return p.parameter_type === "gx_conditional";
24
+ }
25
+ //# sourceMappingURL=type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../src/schema/type-guards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAC/B,CAAqB;IAErB,OAAO,CACL,CAAC,CAAC,cAAc,KAAK,WAAW;QAChC,CAAC,CAAC,cAAc,KAAK,gBAAgB;QACrC,CAAC,CAAC,cAAc,KAAK,eAAe,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAqB;IAClD,OAAO,CAAC,CAAC,cAAc,KAAK,YAAY,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAqB;IAClD,OAAO,CAAC,CAAC,cAAc,KAAK,YAAY,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAqB;IACjD,OAAO,CAAC,CAAC,cAAc,KAAK,WAAW,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAqB;IACtD,OAAO,CAAC,CAAC,cAAc,KAAK,gBAAgB,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { TestFormatDiagnostic } from "../validate.js";
2
+ import type { WorkflowInput, WorkflowOutput } from "./types.js";
3
+ export interface WorkflowShape {
4
+ inputs: WorkflowInput[];
5
+ outputs: WorkflowOutput[];
6
+ }
7
+ /**
8
+ * Cross-check a parsed tests document against workflow inputs/outputs. Emits
9
+ * one diagnostic per violation with a JSON-pointer path into the tests doc
10
+ * (matches Ajv's `instancePath`). Keywords:
11
+ *
12
+ * workflow_input_undefined job key not declared in workflow
13
+ * workflow_input_required required workflow input missing from job (and no default)
14
+ * workflow_input_type job value's JS type incompatible with declared type
15
+ * workflow_output_undefined output assertion name not declared in workflow
16
+ */
17
+ export declare function checkTestsAgainstWorkflow(testsDoc: unknown, workflow: WorkflowShape): TestFormatDiagnostic[];
18
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/test-format/cross-check/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmBhE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,aAAa,GACtB,oBAAoB,EAAE,CA8DxB"}
@@ -0,0 +1,89 @@
1
+ import { isCompatibleType, jsTypeOf } from "./type-compat.js";
2
+ /**
3
+ * JSON-pointer escaping per RFC 6901 — `~` → `~0`, `/` → `~1`.
4
+ */
5
+ function jptrEscape(s) {
6
+ return s.replace(/~/g, "~0").replace(/\//g, "~1");
7
+ }
8
+ function jptr(parts) {
9
+ return "/" + parts.map((p) => jptrEscape(String(p))).join("/");
10
+ }
11
+ function asRecord(v) {
12
+ return v && typeof v === "object" && !Array.isArray(v)
13
+ ? v
14
+ : undefined;
15
+ }
16
+ /**
17
+ * Cross-check a parsed tests document against workflow inputs/outputs. Emits
18
+ * one diagnostic per violation with a JSON-pointer path into the tests doc
19
+ * (matches Ajv's `instancePath`). Keywords:
20
+ *
21
+ * workflow_input_undefined job key not declared in workflow
22
+ * workflow_input_required required workflow input missing from job (and no default)
23
+ * workflow_input_type job value's JS type incompatible with declared type
24
+ * workflow_output_undefined output assertion name not declared in workflow
25
+ */
26
+ export function checkTestsAgainstWorkflow(testsDoc, workflow) {
27
+ if (!Array.isArray(testsDoc))
28
+ return [];
29
+ const inputByName = new Map(workflow.inputs.map((i) => [i.name, i]));
30
+ const outputNames = new Set(workflow.outputs.map((o) => o.name));
31
+ const diagnostics = [];
32
+ for (let testIdx = 0; testIdx < testsDoc.length; testIdx++) {
33
+ const entry = asRecord(testsDoc[testIdx]);
34
+ if (!entry)
35
+ continue;
36
+ const job = asRecord(entry.job) ?? {};
37
+ const outputs = asRecord(entry.outputs) ?? {};
38
+ // Inputs: flag unknowns, check types.
39
+ for (const [name, value] of Object.entries(job)) {
40
+ const declared = inputByName.get(name);
41
+ if (!declared) {
42
+ diagnostics.push({
43
+ path: jptr([testIdx, "job", name]),
44
+ message: `Input '${name}' is not defined in the associated workflow.`,
45
+ keyword: "workflow_input_undefined",
46
+ params: { input: name },
47
+ });
48
+ continue;
49
+ }
50
+ const actualType = jsTypeOf(value);
51
+ if (!isCompatibleType(declared.type, actualType)) {
52
+ diagnostics.push({
53
+ path: jptr([testIdx, "job", name]),
54
+ message: `Input '${name}' has an invalid type. Expected '${declared.type}' but found '${actualType}'.`,
55
+ keyword: "workflow_input_type",
56
+ params: { input: name, declaredType: declared.type, actualType },
57
+ });
58
+ }
59
+ }
60
+ // Inputs: flag required ones missing from the job.
61
+ for (const declared of workflow.inputs) {
62
+ if (declared.optional === true)
63
+ continue;
64
+ if (declared.default !== undefined)
65
+ continue;
66
+ if (Object.prototype.hasOwnProperty.call(job, declared.name))
67
+ continue;
68
+ diagnostics.push({
69
+ path: jptr([testIdx, "job"]),
70
+ message: `Input '${declared.name}' is required but no value or default was provided.`,
71
+ keyword: "workflow_input_required",
72
+ params: { input: declared.name },
73
+ });
74
+ }
75
+ // Outputs: flag assertions for outputs the workflow doesn't declare.
76
+ for (const name of Object.keys(outputs)) {
77
+ if (!outputNames.has(name)) {
78
+ diagnostics.push({
79
+ path: jptr([testIdx, "outputs", name]),
80
+ message: `Output '${name}' is not defined in the associated workflow.`,
81
+ keyword: "workflow_output_undefined",
82
+ params: { output: name },
83
+ });
84
+ }
85
+ }
86
+ }
87
+ return diagnostics;
88
+ }
89
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/test-format/cross-check/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { WorkflowInput, WorkflowOutput } from "./types.js";
2
+ /**
3
+ * Extract workflow inputs from a parsed Format2 (.gxwf.yml) workflow dict.
4
+ *
5
+ * Handles both dict form (`inputs: { name: { type: ... } }`) and list form
6
+ * (`inputs: [{ id: name, type: ... }]`). Plugin accepts both.
7
+ */
8
+ export declare function extractFormat2Inputs(parsed: unknown): WorkflowInput[];
9
+ /**
10
+ * Extract workflow outputs from a parsed Format2 workflow dict.
11
+ */
12
+ export declare function extractFormat2Outputs(parsed: unknown): WorkflowOutput[];
13
+ //# sourceMappingURL=extract-format2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-format2.d.ts","sourceRoot":"","sources":["../../../src/test-format/cross-check/extract-format2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgChE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,EAAE,CAqBrE;AAUD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,EAAE,CAqBvE"}
@@ -0,0 +1,98 @@
1
+ function asRecord(v) {
2
+ return v && typeof v === "object" && !Array.isArray(v)
3
+ ? v
4
+ : undefined;
5
+ }
6
+ function asString(v) {
7
+ return typeof v === "string" ? v : undefined;
8
+ }
9
+ function parseInputEntry(name, raw) {
10
+ // Shorthand: `name: File` or `name: int` — a bare string is the type.
11
+ if (typeof raw === "string") {
12
+ return { name, type: raw };
13
+ }
14
+ const entry = asRecord(raw);
15
+ if (!entry) {
16
+ return { name, type: "data" };
17
+ }
18
+ const type = asString(entry.type) ?? "data";
19
+ const doc = asString(entry.doc);
20
+ const optional = typeof entry.optional === "boolean" ? entry.optional : undefined;
21
+ const hasDefault = Object.prototype.hasOwnProperty.call(entry, "default");
22
+ const out = { name, type };
23
+ if (doc !== undefined)
24
+ out.doc = doc;
25
+ if (optional !== undefined)
26
+ out.optional = optional;
27
+ if (hasDefault)
28
+ out.default = entry.default;
29
+ return out;
30
+ }
31
+ /**
32
+ * Extract workflow inputs from a parsed Format2 (.gxwf.yml) workflow dict.
33
+ *
34
+ * Handles both dict form (`inputs: { name: { type: ... } }`) and list form
35
+ * (`inputs: [{ id: name, type: ... }]`). Plugin accepts both.
36
+ */
37
+ export function extractFormat2Inputs(parsed) {
38
+ const wf = asRecord(parsed);
39
+ if (!wf)
40
+ return [];
41
+ const inputs = wf.inputs;
42
+ if (inputs === undefined || inputs === null)
43
+ return [];
44
+ if (Array.isArray(inputs)) {
45
+ const out = [];
46
+ for (const entry of inputs) {
47
+ const r = asRecord(entry);
48
+ if (!r)
49
+ continue;
50
+ const name = asString(r.id) ?? asString(r.name);
51
+ if (!name)
52
+ continue;
53
+ out.push(parseInputEntry(name, r));
54
+ }
55
+ return out;
56
+ }
57
+ const dict = asRecord(inputs);
58
+ if (!dict)
59
+ return [];
60
+ return Object.entries(dict).map(([name, raw]) => parseInputEntry(name, raw));
61
+ }
62
+ function parseOutputEntry(name, raw) {
63
+ const entry = asRecord(raw);
64
+ const doc = entry ? asString(entry.doc) : undefined;
65
+ const out = { name };
66
+ if (doc !== undefined)
67
+ out.doc = doc;
68
+ return out;
69
+ }
70
+ /**
71
+ * Extract workflow outputs from a parsed Format2 workflow dict.
72
+ */
73
+ export function extractFormat2Outputs(parsed) {
74
+ const wf = asRecord(parsed);
75
+ if (!wf)
76
+ return [];
77
+ const outputs = wf.outputs;
78
+ if (outputs === undefined || outputs === null)
79
+ return [];
80
+ if (Array.isArray(outputs)) {
81
+ const out = [];
82
+ for (const entry of outputs) {
83
+ const r = asRecord(entry);
84
+ if (!r)
85
+ continue;
86
+ const name = asString(r.id) ?? asString(r.name);
87
+ if (!name)
88
+ continue;
89
+ out.push(parseOutputEntry(name, r));
90
+ }
91
+ return out;
92
+ }
93
+ const dict = asRecord(outputs);
94
+ if (!dict)
95
+ return [];
96
+ return Object.entries(dict).map(([name, raw]) => parseOutputEntry(name, raw));
97
+ }
98
+ //# sourceMappingURL=extract-format2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-format2.js","sourceRoot":"","sources":["../../../src/test-format/cross-check/extract-format2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkflowInput, WorkflowOutput } from "./types.js";
2
+ export declare function extractNativeInputs(parsed: unknown): WorkflowInput[];
3
+ export declare function extractNativeOutputs(parsed: unknown): WorkflowOutput[];
4
+ //# sourceMappingURL=extract-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-native.d.ts","sourceRoot":"","sources":["../../../src/test-format/cross-check/extract-native.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,EAAE,CAqBpE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,EAAE,CAmBtE"}
@@ -0,0 +1,89 @@
1
+ import { parseToolState } from "../../workflow/tool-state-io.js";
2
+ const INPUT_STEP_TYPES = new Set(["data_input", "data_collection_input", "parameter_input"]);
3
+ function asRecord(v) {
4
+ return v && typeof v === "object" && !Array.isArray(v)
5
+ ? v
6
+ : undefined;
7
+ }
8
+ function asString(v) {
9
+ return typeof v === "string" ? v : undefined;
10
+ }
11
+ function inputTypeFor(stepType, toolState) {
12
+ if (stepType === "data_input")
13
+ return "data";
14
+ if (stepType === "data_collection_input")
15
+ return "collection";
16
+ // parameter_input — tool_state carries `parameter_type` (e.g. "integer", "text", "boolean").
17
+ return asString(toolState.parameter_type) ?? "data";
18
+ }
19
+ /**
20
+ * Return parsed steps as an array ordered by numeric id. Native workflows
21
+ * store `steps` as a dict keyed by stringified id.
22
+ */
23
+ function orderedSteps(parsed) {
24
+ const steps = asRecord(parsed.steps);
25
+ if (!steps)
26
+ return [];
27
+ return Object.entries(steps)
28
+ .map(([key, value]) => {
29
+ const step = asRecord(value);
30
+ const id = step && typeof step.id === "number" ? step.id : Number.parseInt(key, 10);
31
+ return { id: Number.isFinite(id) ? id : 0, step };
32
+ })
33
+ .filter((e) => !!e.step)
34
+ .sort((a, b) => a.id - b.id)
35
+ .map((e) => e.step);
36
+ }
37
+ export function extractNativeInputs(parsed) {
38
+ const wf = asRecord(parsed);
39
+ if (!wf)
40
+ return [];
41
+ const out = [];
42
+ for (const step of orderedSteps(wf)) {
43
+ const stepType = asString(step.type);
44
+ if (!stepType || !INPUT_STEP_TYPES.has(stepType))
45
+ continue;
46
+ const name = asString(step.label);
47
+ if (!name)
48
+ continue;
49
+ const toolState = parseToolState(step.tool_state);
50
+ const type = inputTypeFor(stepType, toolState);
51
+ const input = { name, type };
52
+ const doc = asString(step.annotation);
53
+ if (doc)
54
+ input.doc = doc;
55
+ if (typeof toolState.optional === "boolean")
56
+ input.optional = toolState.optional;
57
+ if (Object.prototype.hasOwnProperty.call(toolState, "default")) {
58
+ input.default = toolState.default;
59
+ }
60
+ out.push(input);
61
+ }
62
+ return out;
63
+ }
64
+ export function extractNativeOutputs(parsed) {
65
+ const wf = asRecord(parsed);
66
+ if (!wf)
67
+ return [];
68
+ const out = [];
69
+ for (const step of orderedSteps(wf)) {
70
+ const workflowOutputs = step.workflow_outputs;
71
+ if (!Array.isArray(workflowOutputs))
72
+ continue;
73
+ for (const wo of workflowOutputs) {
74
+ const r = asRecord(wo);
75
+ if (!r)
76
+ continue;
77
+ const name = asString(r.label) ?? asString(r.output_name);
78
+ if (!name)
79
+ continue;
80
+ const entry = { name };
81
+ const uuid = asString(r.uuid);
82
+ if (uuid)
83
+ entry.uuid = uuid;
84
+ out.push(entry);
85
+ }
86
+ }
87
+ return out;
88
+ }
89
+ //# sourceMappingURL=extract-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-native.js","sourceRoot":"","sources":["../../../src/test-format/cross-check/extract-native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { WorkflowFormat } from "../../workflow/detect-format.js";
2
+ import type { WorkflowInput, WorkflowOutput } from "./types.js";
3
+ /**
4
+ * Format-aware extractor. Uses the schema package's `resolveFormat` so
5
+ * callers don't have to sniff native vs format2 themselves.
6
+ */
7
+ export declare function extractWorkflowInputs(parsed: Record<string, unknown>, format?: WorkflowFormat): WorkflowInput[];
8
+ export declare function extractWorkflowOutputs(parsed: Record<string, unknown>, format?: WorkflowFormat): WorkflowOutput[];
9
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/test-format/cross-check/extract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,cAAc,GACtB,aAAa,EAAE,CAGjB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,cAAc,GACtB,cAAc,EAAE,CAGlB"}