1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { Resource, ResourceKind } from "./resource";
6 import { safeLoad } from 'js-yaml';
8 export interface WorkflowResource extends Resource {
9 kind: ResourceKind.WORKFLOW;
14 export interface WorkflowResoruceDefinition {
16 $graph: Array<Workflow | CommandLineTool>;
18 export interface Workflow {
22 inputs: CommandInputParameter[];
27 export interface CommandLineTool {
28 class: 'CommandLineTool';
30 inputs: CommandInputParameter[];
34 export interface CommandInputParameter {
37 doc?: string | string[];
39 type?: CWLType | CWLType[] | CommandInputEnumSchema | CommandInputArraySchema;
51 DIRECTORY = 'Directory',
54 export interface CommandInputEnumSchema {
61 export interface CommandInputArraySchema {
67 export interface File {
74 export interface Directory {
75 class: CWLType.DIRECTORY;
81 export const parseWorkflowDefinition = (workflow: WorkflowResource): WorkflowResoruceDefinition => {
82 const definition = safeLoad(workflow.definition);
86 export const getWorkflowInputs = (workflowDefinition: WorkflowResoruceDefinition) => {
87 const mainWorkflow = workflowDefinition.$graph.find(item => item.class === 'Workflow' && item.id === '#main');
93 export const stringifyInputType = ({ type }: CommandInputParameter) => {
94 if (typeof type === 'string') {
96 } else if (type instanceof Array) {
97 return type.join(' | ');
98 } else if (typeof type === 'object') {
99 if (type.type === 'enum') {
101 } else if (type.type === 'array') {
102 return `${type.items}[]`;