import { Resource, ResourceKind } from "./resource";
import { safeLoad } from 'js-yaml';
+import { CommandOutputParameter } from "cwlts/mappings/v1.0/CommandOutputParameter";
export interface WorkflowResource extends Resource {
kind: ResourceKind.WORKFLOW;
inputs: CommandInputParameter[];
outputs: any[];
steps: any[];
+ hints?: ProcessRequirement[];
}
export interface CommandLineTool {
id: string;
inputs: CommandInputParameter[];
outputs: any[];
+ hints?: ProcessRequirement[];
+}
+
+export type ProcessRequirement = GenericProcessRequirement | WorkflowRunnerResources;
+
+export interface GenericProcessRequirement {
+ class: string;
+}
+
+export interface WorkflowRunnerResources {
+ class: 'http://arvados.org/cwl#WorkflowRunnerResources';
+ ramMin?: number;
+ coresMin?: number;
+ keep_cache?: number;
+ acrContainerImage?: string;
}
export type CommandInputParameter =
return definition;
};
-export const getWorkflowInputs = (workflowDefinition: WorkflowResourceDefinition) => {
+export const getWorkflow = (workflowDefinition: WorkflowResourceDefinition) => {
if (!workflowDefinition.$graph) { return undefined; }
- const mainWorkflow = workflowDefinition.$graph.find(item => item.class === 'Workflow' && item.id === '#main');
+ const mainWorkflow = workflowDefinition.$graph.find(item => item.id === '#main');
return mainWorkflow
- ? mainWorkflow.inputs
+ ? mainWorkflow
+ : undefined;
+};
+
+export const getWorkflowInputs = (workflowDefinition: WorkflowResourceDefinition) => {
+ if (!workflowDefinition) { return undefined; }
+ return getWorkflow(workflowDefinition)
+ ? getWorkflow(workflowDefinition)!.inputs
+ : undefined;
+};
+
+export const getWorkflowOutputs = (workflowDefinition: WorkflowResourceDefinition) => {
+ if (!workflowDefinition) { return undefined; }
+ return getWorkflow(workflowDefinition)
+ ? getWorkflow(workflowDefinition)!.outputs
: undefined;
};
export const getInputLabel = (input: CommandInputParameter) => {
- return `${input.label || input.id}`;
+ return `${input.label || input.id.split('/').pop()}`;
+};
+
+export const getIOParamId = (input: CommandInputParameter | CommandOutputParameter) => {
+ return `${input.id.split('/').pop()}`;
};
export const isRequiredInput = ({ type }: CommandInputParameter) => {