X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/952aa1c7170d4b24951f40ed66b5f19a53d11daf..eb23ad3ba751b675858ef20ade568cd8c8688caa:/src/models/workflow.ts diff --git a/src/models/workflow.ts b/src/models/workflow.ts index 923a9cbd..ad84bd9e 100644 --- a/src/models/workflow.ts +++ b/src/models/workflow.ts @@ -11,9 +11,9 @@ export interface WorkflowResource extends Resource { description: string; definition: string; } -export interface WorkflowResoruceDefinition { +export interface WorkflowResourceDefinition { cwlVersion: string; - $graph: Array; + $graph?: Array; } export interface Workflow { class: 'Workflow'; @@ -22,6 +22,7 @@ export interface Workflow { inputs: CommandInputParameter[]; outputs: any[]; steps: any[]; + hints?: ProcessRequirement[]; } export interface CommandLineTool { @@ -29,16 +30,39 @@ export interface CommandLineTool { id: string; inputs: CommandInputParameter[]; outputs: any[]; + hints?: ProcessRequirement[]; } -export interface CommandInputParameter { - id: string; - label?: string; - doc?: string | string[]; - default?: any; - type?: CWLType | CWLType[] | CommandInputEnumSchema | CommandInputArraySchema; +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 = + BooleanCommandInputParameter | + IntCommandInputParameter | + LongCommandInputParameter | + FloatCommandInputParameter | + DoubleCommandInputParameter | + StringCommandInputParameter | + FileCommandInputParameter | + DirectoryCommandInputParameter | + StringArrayCommandInputParameter | + IntArrayCommandInputParameter | + FloatArrayCommandInputParameter | + FileArrayCommandInputParameter | + DirectoryArrayCommandInputParameter | + EnumCommandInputParameter; + export enum CWLType { NULL = 'null', BOOLEAN = 'boolean', @@ -58,8 +82,8 @@ export interface CommandInputEnumSchema { name?: string; } -export interface CommandInputArraySchema { - items: CWLType; +export interface CommandInputArraySchema { + items: ItemType; type: 'array'; label?: string; } @@ -78,18 +102,82 @@ export interface Directory { basename?: string; } -export const parseWorkflowDefinition = (workflow: WorkflowResource): WorkflowResoruceDefinition => { +export interface GenericCommandInputParameter { + id: string; + label?: string; + doc?: string | string[]; + default?: Value; + type?: Type | Array; + value?: Value; + disabled?: boolean; +} +export type GenericArrayCommandInputParameter = GenericCommandInputParameter, Value[]>; + +export type BooleanCommandInputParameter = GenericCommandInputParameter; +export type IntCommandInputParameter = GenericCommandInputParameter; +export type LongCommandInputParameter = GenericCommandInputParameter; +export type FloatCommandInputParameter = GenericCommandInputParameter; +export type DoubleCommandInputParameter = GenericCommandInputParameter; +export type StringCommandInputParameter = GenericCommandInputParameter; +export type FileCommandInputParameter = GenericCommandInputParameter; +export type DirectoryCommandInputParameter = GenericCommandInputParameter; +export type EnumCommandInputParameter = GenericCommandInputParameter; + +export type StringArrayCommandInputParameter = GenericArrayCommandInputParameter; +export type IntArrayCommandInputParameter = GenericArrayCommandInputParameter; +export type FloatArrayCommandInputParameter = GenericArrayCommandInputParameter; +export type FileArrayCommandInputParameter = GenericArrayCommandInputParameter; +export type DirectoryArrayCommandInputParameter = GenericArrayCommandInputParameter; + +export type WorkflowInputsData = { + [key: string]: boolean | number | string | File | Directory; +}; +export const parseWorkflowDefinition = (workflow: WorkflowResource): WorkflowResourceDefinition => { const definition = safeLoad(workflow.definition); return definition; }; -export const getWorkflowInputs = (workflowDefinition: WorkflowResoruceDefinition) => { +export const getWorkflow = (workflowDefinition: WorkflowResourceDefinition) => { + if (!workflowDefinition.$graph) { return undefined; } const mainWorkflow = workflowDefinition.$graph.find(item => item.class === 'Workflow' && 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 getInputLabel = (input: CommandInputParameter) => { + return `${input.label || input.id}`; +}; + +export const isRequiredInput = ({ type }: CommandInputParameter) => { + if (type instanceof Array) { + for (const t of type) { + if (t === CWLType.NULL) { + return false; + } + } + } + return true; +}; + +export const isPrimitiveOfType = (input: GenericCommandInputParameter, type: CWLType) => + input.type instanceof Array + ? input.type.indexOf(type) > -1 + : input.type === type; + +export const isArrayOfType = (input: GenericCommandInputParameter, type: CWLType) => + typeof input.type === 'object' && + input.type.type === 'array' + ? input.type.items === type + : false; + export const stringifyInputType = ({ type }: CommandInputParameter) => { if (typeof type === 'string') { return type;