{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/viash-package-config/_shared/0.8.3--config.schema.json",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/viash-io/viash-schemas/refs/heads/main/json_schemas/0.8.3/config.schema.json",
    "sourceSha256": "0b9446d05b7bb21de65ebcd73fec02920718ba7daf4ff434d002ffed3b21b0b6"
  },
  "oneOf": [
    {
      "$ref": "#/$defs/Config"
    }
  ],
  "$defs": {
    "Config": {
      "description": "A Viash configuration is a YAML file which contains metadata to describe the behaviour and build target(s) of a component.  \nWe commonly name this file `config.vsh.yaml` in our examples, but you can name it however you choose.  \n",
      "type": "object",
      "properties": {
        "functionality": {
          "description": "The functionality describes the behaviour of the script in terms of arguments and resources.\nBy specifying a few restrictions (e.g. mandatory arguments) and adding some descriptions, Viash will automatically generate a stylish command-line interface for you.\n",
          "$ref": "#/$defs/Functionality"
        },
        "platforms": {
          "description": "A list of platforms to generate target artifacts for.\n\n - Native\n - Docker\n - Nextflow\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Platform"
          }
        }
      },
      "required": [
        "functionality",
        "platforms"
      ],
      "additionalProperties": false
    },
    "Project": {
      "description": "A Viash project configuration file. It's name should be `_viash.yaml`.",
      "type": "object",
      "properties": {
        "source": {
          "description": "Which source directory to use for the `viash ns` commands.",
          "type": "string"
        },
        "viash_version": {
          "description": "Which version of Viash to use.",
          "type": "string"
        },
        "config_mods": {
          "oneOf": [
            {
              "description": "Which config mods to apply.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Which config mods to apply.",
                "type": "string"
              }
            }
          ]
        },
        "target": {
          "description": "Which target directory to use for `viash ns build`.",
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "Info": {
      "description": "Meta information fields filled in by Viash during build.",
      "type": "object",
      "properties": {
        "git_tag": {
          "description": "Git tag.",
          "type": "string"
        },
        "git_remote": {
          "description": "Git remote name.",
          "type": "string"
        },
        "viash_version": {
          "description": "The Viash version that was used to build the component.",
          "type": "string"
        },
        "config": {
          "description": "Path to the config used during build.",
          "type": "string"
        },
        "output": {
          "description": "Folder path to the build artifacts.",
          "type": "string"
        },
        "platform": {
          "description": "The platform id used during build.",
          "type": "string"
        },
        "git_commit": {
          "description": "Git commit hash.",
          "type": "string"
        },
        "executable": {
          "description": "Output folder with main executable path.",
          "type": "string"
        }
      },
      "required": [
        "config"
      ],
      "additionalProperties": false
    },
    "EnvironmentVariables": {
      "description": "Viash checks several environment variables during operation.",
      "type": "object",
      "properties": {
        "VIASH_VERSION": {
          "description": "A specific Viash version can be set to run the commands with. If so required, the specific Viash version will be downloaded.\nThis is useful when replicating older results or building Viash components that use outdated code.\n",
          "type": "string"
        },
        "VIASH_HOME": {
          "description": "If `VIASH_HOME` is not defined, the fallback `HOME`/.viash is used.\n\nLocation where specific downloaded versions of Viash will be cached and run from.\n",
          "type": "string"
        }
      },
      "required": [
        "VIASH_HOME"
      ],
      "additionalProperties": false
    },
    "Functionality": {
      "description": "The functionality-part of the config file describes the behaviour of the script in terms of arguments and resources.\nBy specifying a few restrictions (e.g. mandatory arguments) and adding some descriptions, Viash will automatically generate a stylish command-line interface for you.\n",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of the component and the filename of the executable when built with `viash build`.",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "version": {
          "description": "Version of the component. This field will be used to version the executable and the Docker container.",
          "type": "string"
        },
        "authors": {
          "description": "A list of authors. An author must at least have a name, but can also have a list of roles, an e-mail address, and a map of custom properties.\n\nSuggested values for roles are:\n \n| Role | Abbrev. | Description |\n|------|---------|-------------|\n| maintainer | mnt | for the maintainer of the code. Ideally, exactly one maintainer is specified. |\n| author | aut | for persons who have made substantial contributions to the software. |\n| contributor | ctb| for persons who have made smaller contributions (such as code patches).\n| datacontributor | dtc | for persons or organisations that contributed data sets for the software\n| copyrightholder | cph | for all copyright holders. This is a legal concept so should use the legal name of an institution or corporate body.\n| funder | fnd | for persons or organizations that furnished financial support for the development of the software\n\nThe [full list of roles](https://www.loc.gov/marc/relators/relaterm.html) is extremely comprehensive.\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Author"
          }
        },
        "status": {
          "description": "Allows setting a component to active, deprecated or disabled.",
          "$ref": "#/$defs/Status"
        },
        "requirements": {
          "description": "Computational requirements related to running the component. \n`cpus` specifies the maximum number of (logical) cpus a component is allowed to use., whereas\n`memory` specifies the maximum amount of memory a component is allowed to allicate. Memory units must be\nin B, KB, MB, GB, TB or PB.",
          "$ref": "#/$defs/ComputationalRequirements"
        },
        "repositories": {
          "description": "(Pre-)defines repositories that can be used as repository in dependencies.\nAllows reusing repository definitions in case it is used in multiple dependencies.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/RepositoryWithName"
          }
        },
        "resources": {
          "description": "Resources are files that support the component. The first resource should be a script that will be executed when the functionality is run. Additional resources will be copied to the same directory.\n\nCommon properties:\n\n * type: `file` / `r_script` / `python_script` / `bash_script` / `javascript_script` / `scala_script` / `csharp_script`, specifies the type of the resource. The first resource cannot be of type `file`. When the type is not specified, the default type is simply `file`.\n * dest: filename, the resulting name of the resource.  From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.\n * path: `path/to/file`, the path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.\n * text: ...multiline text..., the content of the resulting file specified as a string. Mutually exclusive with `path`.\n * is_executable: `true` / `false`, whether the resulting resource file should be made executable.\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Resource"
          }
        },
        "test_resources": {
          "description": "One or more scripts to be used to test the component behaviour when `viash test` is invoked. Additional files of type `file` will be made available only during testing. Each test script should expect no command-line inputs, be platform-independent, and return an exit code >0 when unexpected behaviour occurs during testing. See Unit Testing for more info.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Resource"
          }
        },
        "dependencies": {
          "description": "Allows listing Viash components required by this Viash component",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Dependency"
          }
        },
        "argument_groups": {
          "description": "A grouping of the arguments, used to display the help message.\n\n - `name: foo`, the name of the argument group. \n - `description: Description of foo`, a description of the argument group. Multiline descriptions are supported.\n - `arguments: [arg1, arg2, ...]`, list of the arguments.\n\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ArgumentGroup"
          }
        },
        "description": {
          "description": "A description of the component. This will be displayed with `--help`.",
          "type": "string"
        },
        "usage": {
          "description": "A description on how to use the component. This will be displayed with `--help` under the 'Usage:' section.",
          "type": "string"
        },
        "namespace": {
          "description": "Namespace this component is a part of. See the Namespaces guide for more information on namespaces.",
          "type": "string"
        },
        "arguments": {
          "description": "A list of arguments for this component. For each argument, a type and a name must be specified. Depending on the type of argument, different properties can be set. See these reference pages per type for more information:  \n\n - string\n - file\n - integer\n - double\n - boolean\n - boolean_true\n - boolean_false\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Argument"
          }
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "Author": {
      "description": "Author metadata.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Full name of the author, usually in the name of FirstName MiddleName LastName.",
          "type": "string"
        },
        "email": {
          "description": "E-mail of the author.",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "roles": {
          "oneOf": [
            {
              "description": "Role of the author. Suggested items:\n\n* \"author\": Authors who have made substantial contributions to the component.\n* \"maintainer\": The maintainer of the component.\n* \"contributor\": Authors who have made smaller contributions (such as code patches etc.).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Role of the author. Suggested items:\n\n* \"author\": Authors who have made substantial contributions to the component.\n* \"maintainer\": The maintainer of the component.\n* \"contributor\": Authors who have made smaller contributions (such as code patches etc.).\n",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "ComputationalRequirements": {
      "description": "Computational requirements related to running the component.",
      "type": "object",
      "properties": {
        "cpus": {
          "description": "The maximum number of (logical) cpus a component is allowed to use.",
          "type": "integer"
        },
        "commands": {
          "description": "A list of commands which should be present on the system for the script to function.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "memory": {
          "description": "The maximum amount of memory a component is allowed to allocate. Unit must be one of B, KB, MB, GB, TB or PB.",
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "ArgumentGroup": {
      "description": "A grouping of the arguments, used to display the help message.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the argument group.",
          "type": "string"
        },
        "description": {
          "description": "Description of foo`, a description of the argument group. Multiline descriptions are supported.",
          "type": "string"
        },
        "arguments": {
          "description": "List of arguments.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Argument"
          }
        }
      },
      "required": [
        "name",
        "arguments"
      ],
      "additionalProperties": false
    },
    "Platform": {
      "oneOf": [
        {
          "$ref": "#/$defs/NativePlatform"
        },
        {
          "$ref": "#/$defs/DockerPlatform"
        },
        {
          "$ref": "#/$defs/NextflowPlatform"
        }
      ]
    },
    "NativePlatform": {
      "description": "Running a Viash component on a native platform means that the script will be executed in your current environment.\nAny dependencies are assumed to have been installed by the user, so the native platform is meant for developers (who know what they're doing) or for simple bash scripts (which have no extra dependencies).\n",
      "type": "object",
      "properties": {
        "id": {
          "description": "As with all platforms, you can give a platform a different name. By specifying `id: foo`, you can target this platform (only) by specifying `-p foo` in any of the Viash commands.",
          "type": "string"
        },
        "type": {
          "description": "Running a Viash component on a native platform means that the script will be executed in your current environment.\nAny dependencies are assumed to have been installed by the user, so the native platform is meant for developers (who know what they're doing) or for simple bash scripts (which have no extra dependencies).\n",
          "const": "native"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "DockerPlatform": {
      "description": "Run a Viash component on a Docker backend platform.\nBy specifying which dependencies your component needs, users will be able to build a docker container from scratch using the setup flag, or pull it from a docker repository.\n",
      "type": "object",
      "properties": {
        "organization": {
          "description": "Name of a container's [organization](https://docs.docker.com/docker-hub/orgs/).",
          "type": "string"
        },
        "registry": {
          "description": "The URL to the a [custom Docker registry](https://docs.docker.com/registry/)",
          "type": "string"
        },
        "image": {
          "description": "The base container to start from. You can also add the tag here if you wish.",
          "type": "string"
        },
        "tag": {
          "description": "Specify a Docker image based on its tag.",
          "type": "string"
        },
        "target_tag": {
          "description": "The tag the resulting image gets. Advanced usage only.",
          "type": "string"
        },
        "run_args": {
          "oneOf": [
            {
              "description": "Add [docker run](https://docs.docker.com/engine/reference/run/) arguments.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Add [docker run](https://docs.docker.com/engine/reference/run/) arguments.",
                "type": "string"
              }
            }
          ]
        },
        "namespace_separator": {
          "description": "The separator between the namespace and the name of the component, used for determining the image name. Default: \"/\".",
          "type": "string"
        },
        "resolve_volume": {
          "description": "Enables or disables automatic volume mapping. Enabled when set to `Automatic` or disabled when set to `Manual`. Default: `Automatic`.",
          "$ref": "#/$defs/DockerResolveVolume"
        },
        "id": {
          "description": "As with all platforms, you can give a platform a different name. By specifying `id: foo`, you can target this platform (only) by specifying `-p foo` in any of the Viash commands.",
          "type": "string"
        },
        "port": {
          "oneOf": [
            {
              "description": "A list of enabled ports. This doesn't change the Dockerfile but gets added as a command-line argument at runtime.",
              "type": "string"
            },
            {
              "description": "A list of enabled ports. This doesn't change the Dockerfile but gets added as a command-line argument at runtime.",
              "type": "integer"
            },
            {
              "description": "A list of enabled ports. This doesn't change the Dockerfile but gets added as a command-line argument at runtime.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "description": "A list of enabled ports. This doesn't change the Dockerfile but gets added as a command-line argument at runtime.",
              "type": "array",
              "items": {
                "type": "integer"
              }
            }
          ]
        },
        "setup": {
          "description": "A list of requirements for installing the following types of packages:\n\n - apt\n - apk\n - Docker setup instructions\n - JavaScript\n - Python\n - R\n - Ruby\n - yum\n\nThe order in which these dependencies are specified determines the order in which they will be installed.\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Requirements"
          }
        },
        "workdir": {
          "description": "The working directory when starting the container. This doesn't change the Dockerfile but gets added as a command-line argument at runtime.",
          "type": "string"
        },
        "target_image": {
          "description": "If anything is specified in the setup section, running the `---setup` will result in an image with the name of `<target_image>:<version>`. If nothing is specified in the `setup` section, simply `image` will be used. Advanced usage only.",
          "type": "string"
        },
        "cmd": {
          "oneOf": [
            {
              "description": "Set the default command being executed when running the Docker container.",
              "type": "string"
            },
            {
              "description": "Set the default command being executed when running the Docker container.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        },
        "target_image_source": {
          "description": "The source of the target image. This is used for defining labels in the dockerfile.",
          "type": "string"
        },
        "test_setup": {
          "description": "Additional requirements specific for running unit tests.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Requirements"
          }
        },
        "entrypoint": {
          "oneOf": [
            {
              "description": "Override the entrypoint of the base container. Default set `ENTRYPOINT []`.",
              "type": "string"
            },
            {
              "description": "Override the entrypoint of the base container. Default set `ENTRYPOINT []`.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        },
        "target_registry": {
          "description": "The URL where the resulting image will be pushed to. Advanced usage only.",
          "type": "string"
        },
        "setup_strategy": {
          "description": "The Docker setup strategy to use when building a container.\n\n| Strategy | Description |\n|-----|----------|\n| `alwaysbuild` / `build` / `b` | Always build the image from the dockerfile. This is the default setup strategy.\n| `alwayscachedbuild` / `cachedbuild` / `cb` | Always build the image from the dockerfile, with caching enabled.\n| `ifneedbebuild` |  Build the image if it does not exist locally.\n| `ifneedbecachedbuild` | Build the image with caching enabled if it does not exist locally, with caching enabled.\n| `alwayspull` / `pull` / `p` |  Try to pull the container from [Docker Hub](https://hub.docker.com) or the specified docker registry.\n| `alwayspullelsebuild` / `pullelsebuild` |  Try to pull the image from a registry and build it if it doesn't exist.\n| `alwayspullelsecachedbuild` / `pullelsecachedbuild` |  Try to pull the image from a registry and build it with caching if it doesn't exist.\n| `ifneedbepull` |  If the image does not exist locally, pull the image.\n| `ifneedbepullelsebuild` |  If the image does not exist locally, pull the image. If the image does exist, build it.\n| `ifneedbepullelsecachedbuild` | If the image does not exist locally, pull the image. If the image does exist, build it with caching enabled.\n| `push` | Push the container to [Docker Hub](https://hub.docker.com)  or the specified docker registry.\n| `pushifnotpresent` | Push the container to [Docker Hub](https://hub.docker.com) or the specified docker registry if the tag does not exist yet.\n| `donothing` / `meh` | Do not build or pull anything.\n\n",
          "$ref": "#/$defs/DockerSetupStrategy"
        },
        "type": {
          "description": "Run a Viash component on a Docker backend platform.\nBy specifying which dependencies your component needs, users will be able to build a docker container from scratch using the setup flag, or pull it from a docker repository.\n",
          "const": "docker"
        },
        "target_organization": {
          "description": "The organization set in the resulting image. Advanced usage only.",
          "type": "string"
        },
        "chown": {
          "description": "In Linux, files created by a Docker container will be owned by `root`. With `chown: true`, Viash will automatically change the ownership of output files (arguments with `type: file` and `direction: output`) to the user running the Viash command after execution of the component. Default value: `true`.",
          "type": "boolean"
        }
      },
      "required": [
        "image",
        "type"
      ],
      "additionalProperties": false
    },
    "NextflowPlatform": {
      "description": "Platform for generating Nextflow VDSL3 modules.",
      "type": "object",
      "properties": {
        "auto": {
          "description": "Automated processing flags which can be toggled on or off:\n\n| Flag | Description | Default |\n|---|---------|----|\n| `simplifyInput` | If `true`, an input tuple only containing only a single File (e.g. `[\"foo\", file(\"in.h5ad\")]`) is automatically transformed to a map (i.e. `[\"foo\", [ input: file(\"in.h5ad\") ] ]`). | `true` |\n| `simplifyOutput` | If `true`, an output tuple containing a map with a File (e.g. `[\"foo\", [ output: file(\"out.h5ad\") ] ]`) is automatically transformed to a map (i.e. `[\"foo\", file(\"out.h5ad\")]`). | `false` |\n| `transcript` | If `true`, the module's transcripts from `work/` are automatically published to `params.transcriptDir`. If not defined, `params.publishDir + \"/_transcripts\"` will be used. Will throw an error if neither are defined. | `false` |\n| `publish` | If `true`, the module's outputs are automatically published to `params.publishDir`. If equal to \"state\", also a `.state.yaml` file will be published in the publish dir. Will throw an error if `params.publishDir` is not defined. | `false` |\n\n",
          "$ref": "#/$defs/NextflowAuto"
        },
        "directives": {
          "description": "Directives are optional settings that affect the execution of the process. These mostly match up with the Nextflow counterparts.  \n",
          "$ref": "#/$defs/NextflowDirectives"
        },
        "container": {
          "description": "Specifies the Docker platform id to be used to run Nextflow.",
          "type": "string"
        },
        "config": {
          "description": "Allows tweaking how the Nextflow Config file is generated.",
          "$ref": "#/$defs/NextflowConfig"
        },
        "debug": {
          "description": "Whether or not to print debug messages.",
          "type": "boolean"
        },
        "id": {
          "description": "Every platform can be given a specific id that can later be referred to explicitly when running or building the Viash component.",
          "type": "string"
        },
        "type": {
          "description": "Platform for generating Nextflow VDSL3 modules.",
          "const": "nextflow"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "Requirements": {
      "oneOf": [
        {
          "$ref": "#/$defs/ApkRequirements"
        },
        {
          "$ref": "#/$defs/AptRequirements"
        },
        {
          "$ref": "#/$defs/DockerRequirements"
        },
        {
          "$ref": "#/$defs/JavaScriptRequirements"
        },
        {
          "$ref": "#/$defs/PythonRequirements"
        },
        {
          "$ref": "#/$defs/RRequirements"
        },
        {
          "$ref": "#/$defs/RubyRequirements"
        },
        {
          "$ref": "#/$defs/YumRequirements"
        }
      ]
    },
    "ApkRequirements": {
      "description": "Specify which apk packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Specify which apk packages should be available in order to run the component.",
          "const": "apk"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "AptRequirements": {
      "description": "Specify which apt packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "interactive": {
          "description": "If `false`, the Debian frontend is set to non-interactive (recommended). Default: false.",
          "type": "boolean"
        },
        "type": {
          "description": "Specify which apt packages should be available in order to run the component.",
          "const": "apt"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "DockerRequirements": {
      "description": "Specify which Docker commands should be run during setup.",
      "type": "object",
      "properties": {
        "run": {
          "oneOf": [
            {
              "description": "Specifies which `RUN` entries to add to the Dockerfile while building it.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `RUN` entries to add to the Dockerfile while building it.",
                "type": "string"
              }
            }
          ]
        },
        "label": {
          "oneOf": [
            {
              "description": "Specifies which `LABEL` entries to add to the Dockerfile while building it.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `LABEL` entries to add to the Dockerfile while building it.",
                "type": "string"
              }
            }
          ]
        },
        "build_args": {
          "oneOf": [
            {
              "description": "Specifies which `ARG` entries to add to the Dockerfile while building it.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `ARG` entries to add to the Dockerfile while building it.",
                "type": "string"
              }
            }
          ]
        },
        "copy": {
          "oneOf": [
            {
              "description": "Specifies which `COPY` entries to add to the Dockerfile while building it.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `COPY` entries to add to the Dockerfile while building it.",
                "type": "string"
              }
            }
          ]
        },
        "type": {
          "description": "Specify which Docker commands should be run during setup.",
          "const": "docker"
        },
        "add": {
          "oneOf": [
            {
              "description": "Specifies which `ADD` entries to add to the Dockerfile while building it.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `ADD` entries to add to the Dockerfile while building it.",
                "type": "string"
              }
            }
          ]
        },
        "env": {
          "oneOf": [
            {
              "description": "Specifies which `ENV` entries to add to the Dockerfile while building it. Unlike `ARG`, `ENV` entries are also accessible from inside the container.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which `ENV` entries to add to the Dockerfile while building it. Unlike `ARG`, `ENV` entries are also accessible from inside the container.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "JavaScriptRequirements": {
      "description": "Specify which JavaScript packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "github": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from GitHub.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from GitHub.",
                "type": "string"
              }
            }
          ]
        },
        "url": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a generic URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a generic URI.",
                "type": "string"
              }
            }
          ]
        },
        "git": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a Git URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a Git URI.",
                "type": "string"
              }
            }
          ]
        },
        "npm": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from npm.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from npm.",
                "type": "string"
              }
            }
          ]
        },
        "type": {
          "description": "Specify which JavaScript packages should be available in order to run the component.",
          "const": "javascript"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from npm.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from npm.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "PythonRequirements": {
      "description": "Specify which Python packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "github": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from GitHub.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from GitHub.",
                "type": "string"
              }
            }
          ]
        },
        "gitlab": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from GitLab.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from GitLab.",
                "type": "string"
              }
            }
          ]
        },
        "pip": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from pip.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from pip.",
                "type": "string"
              }
            }
          ]
        },
        "pypi": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from PyPI using pip.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from PyPI using pip.",
                "type": "string"
              }
            }
          ]
        },
        "git": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a Git URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a Git URI.",
                "type": "string"
              }
            }
          ]
        },
        "upgrade": {
          "description": "Sets the `--upgrade` flag when set to true. Default: true.",
          "type": "boolean"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from pip.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from pip.",
                "type": "string"
              }
            }
          ]
        },
        "url": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a generic URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a generic URI.",
                "type": "string"
              }
            }
          ]
        },
        "svn": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using an SVN URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using an SVN URI.",
                "type": "string"
              }
            }
          ]
        },
        "bazaar": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a Bazaar URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a Bazaar URI.",
                "type": "string"
              }
            }
          ]
        },
        "script": {
          "oneOf": [
            {
              "description": "Specifies a code block to run as part of the build.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies a code block to run as part of the build.",
                "type": "string"
              }
            }
          ]
        },
        "type": {
          "description": "Specify which Python packages should be available in order to run the component.",
          "const": "python"
        },
        "mercurial": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a Mercurial URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a Mercurial URI.",
                "type": "string"
              }
            }
          ]
        },
        "user": {
          "description": "Sets the `--user` flag when set to true. Default: false.",
          "type": "boolean"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "RRequirements": {
      "description": "Specify which R packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "bioc": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from BioConductor.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from BioConductor.",
                "type": "string"
              }
            }
          ]
        },
        "github": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from GitHub.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from GitHub.",
                "type": "string"
              }
            }
          ]
        },
        "gitlab": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from GitLab.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from GitLab.",
                "type": "string"
              }
            }
          ]
        },
        "url": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a generic URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a generic URI.",
                "type": "string"
              }
            }
          ]
        },
        "bioc_force_install": {
          "description": "Forces packages specified in `bioc` to be reinstalled, even if they are already present in the container. Default: false.",
          "type": "boolean"
        },
        "git": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using a Git URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using a Git URI.",
                "type": "string"
              }
            }
          ]
        },
        "cran": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from CRAN.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from CRAN.",
                "type": "string"
              }
            }
          ]
        },
        "bitbucket": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from Bitbucket.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from Bitbucket.",
                "type": "string"
              }
            }
          ]
        },
        "svn": {
          "oneOf": [
            {
              "description": "Specifies which packages to install using an SVN URI.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install using an SVN URI.",
                "type": "string"
              }
            }
          ]
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install from CRAN.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install from CRAN.",
                "type": "string"
              }
            }
          ]
        },
        "script": {
          "oneOf": [
            {
              "description": "Specifies a code block to run as part of the build.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies a code block to run as part of the build.",
                "type": "string"
              }
            }
          ]
        },
        "type": {
          "description": "Specify which R packages should be available in order to run the component.",
          "const": "r"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "RubyRequirements": {
      "description": "Specify which Ruby packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Specify which Ruby packages should be available in order to run the component.",
          "const": "ruby"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "YumRequirements": {
      "description": "Specify which yum packages should be available in order to run the component.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Specify which yum packages should be available in order to run the component.",
          "const": "yum"
        },
        "packages": {
          "oneOf": [
            {
              "description": "Specifies which packages to install.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Specifies which packages to install.",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "Argument": {
      "oneOf": [
        {
          "$ref": "#/$defs/BooleanArgument"
        },
        {
          "$ref": "#/$defs/BooleanTrueArgument"
        },
        {
          "$ref": "#/$defs/BooleanFalseArgument"
        },
        {
          "$ref": "#/$defs/DoubleArgument"
        },
        {
          "$ref": "#/$defs/FileArgument"
        },
        {
          "$ref": "#/$defs/IntegerArgument"
        },
        {
          "$ref": "#/$defs/LongArgument"
        },
        {
          "$ref": "#/$defs/StringArgument"
        }
      ]
    },
    "BooleanArgument": {
      "description": "A `boolean` type argument has two possible values: `true` or `false`.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--trim`, `-t` or `trim`. The number of dashes determines how values can be passed:  \n\n  - `--trim` is a long option, which can be passed with `executable_name --trim`\n  - `-t` is a short option, which can be passed with `executable_name -t`\n  - `trim` is an argument, which can be passed with `executable_name trim`  \n",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "type": "boolean"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "type": "boolean"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "type": "boolean"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "type": "boolean"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "A `boolean` type argument has two possible values: `true` or `false`.",
          "const": "boolean"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "BooleanTrueArgument": {
      "description": "An argument of the `boolean_true` type acts like a `boolean` flag with a default value of `false`. When called as an argument it sets the `boolean` to `true`.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--silent`, `-s` or `silent`. The number of dashes determines how values can be passed:  \n\n  - `--silent` is a long option, which can be passed with `executable_name --silent`\n  - `-s` is a short option, which can be passed with `executable_name -s`\n  - `silent` is an argument, which can be passed with `executable_name silent`  \n",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "type": {
          "description": "An argument of the `boolean_true` type acts like a `boolean` flag with a default value of `false`. When called as an argument it sets the `boolean` to `true`.",
          "const": "boolean_true"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "BooleanFalseArgument": {
      "description": "An argument of the `boolean_false` type acts like an inverted `boolean` flag with a default value of `true`. When called as an argument it sets the `boolean` to `false`.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--no-log`, `-n` or `no-log`. The number of dashes determines how values can be passed:  \n\n  - `--no-log` is a long option, which can be passed with `executable_name --no-log`\n  - `-n` is a short option, which can be passed with `executable_name -n`\n  - `no-log` is an argument, which can be passed with `executable_name no-log`  \n",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "type": {
          "description": "An argument of the `boolean_false` type acts like an inverted `boolean` flag with a default value of `true`. When called as an argument it sets the `boolean` to `false`.",
          "const": "boolean_false"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "DoubleArgument": {
      "description": "A `double` type argument has a numeric value with decimal points",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--foo`, `-f` or `foo`. The number of dashes determines how values can be passed:  \n\n  - `--foo` is a long option, which can be passed with `executable_name --foo=value` or `executable_name --foo value`\n  - `-f` is a short option, which can be passed with `executable_name -f value`\n  - `foo` is an argument, which can be passed with `executable_name value`  \n",
          "type": "string"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "max": {
          "description": "Maximum allowed value for this argument. If set and the provided value is higher than the maximum, an error will be produced. Can be combined with [`min`](#min) to clamp values.",
          "$ref": "#/$defs/DoubleWithInf"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "$ref": "#/$defs/DoubleWithInf"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "$ref": "#/$defs/DoubleWithInf"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "$ref": "#/$defs/DoubleWithInf"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "$ref": "#/$defs/DoubleWithInf"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "min": {
          "description": "Minimum allowed value for this argument. If set and the provided value is lower than the minimum, an error will be produced. Can be combined with [`max`](#max) to clamp values.",
          "$ref": "#/$defs/DoubleWithInf"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "A `double` type argument has a numeric value with decimal points",
          "const": "double"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "FileArgument": {
      "description": "A `file` type argument has a string value that points to a file or folder path.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--foo`, `-f` or `foo`. The number of dashes determines how values can be passed:  \n\n  - `--foo` is a long option, which can be passed with `executable_name --foo=value` or `executable_name --foo value`\n  - `-f` is a short option, which can be passed with `executable_name -f value`\n  - `foo` is an argument, which can be passed with `executable_name value`  \n",
          "type": "string"
        },
        "create_parent": {
          "description": "If the output filename is a path and it does not exist, create it before executing the script (only for `direction: output`).",
          "type": "boolean"
        },
        "direction": {
          "description": "Makes this argument an `input` or an `output`, as in does the file/folder needs to be read or written. `input` by default.",
          "$ref": "#/$defs/Direction"
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "must_exist": {
          "description": "Checks whether the file or folder exists. For input files, this check will happen before the execution of the script, while for output files the check will happen afterwards.",
          "type": "boolean"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "type": "string"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "type": "string"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "A `file` type argument has a string value that points to a file or folder path.",
          "const": "file"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "IntegerArgument": {
      "description": "An `integer` type argument has a numeric value without decimal points.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--foo`, `-f` or `foo`. The number of dashes determines how values can be passed:  \n\n  - `--foo` is a long option, which can be passed with `executable_name --foo=value` or `executable_name --foo value`\n  - `-f` is a short option, which can be passed with `executable_name -f value`\n  - `foo` is an argument, which can be passed with `executable_name value`  \n",
          "type": "string"
        },
        "choices": {
          "description": "Limit the amount of valid values for this argument to those set in this list. When set and a value not present in the list is provided, an error will be produced.",
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "max": {
          "description": "Maximum allowed value for this argument. If set and the provided value is higher than the maximum, an error will be produced. Can be combined with [`min`](#min) to clamp values.",
          "type": "integer"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "type": "integer"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "type": "integer"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "type": "integer"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "type": "integer"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "min": {
          "description": "Minimum allowed value for this argument. If set and the provided value is lower than the minimum, an error will be produced. Can be combined with [`max`](#max) to clamp values.",
          "type": "integer"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "An `integer` type argument has a numeric value without decimal points.",
          "const": "integer"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "LongArgument": {
      "description": "An `long` type argument has a numeric value without decimal points.",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--foo`, `-f` or `foo`. The number of dashes determines how values can be passed:  \n\n  - `--foo` is a long option, which can be passed with `executable_name --foo=value` or `executable_name --foo value`\n  - `-f` is a short option, which can be passed with `executable_name -f value`\n  - `foo` is an argument, which can be passed with `executable_name value`  \n",
          "type": "string"
        },
        "choices": {
          "description": "Limit the amount of valid values for this argument to those set in this list. When set and a value not present in the list is provided, an error will be produced.",
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "max": {
          "description": "Maximum allowed value for this argument. If set and the provided value is higher than the maximum, an error will be produced. Can be combined with [`min`](#min) to clamp values.",
          "type": "integer"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "type": "integer"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "type": "integer"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "type": "integer"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "type": "integer"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "min": {
          "description": "Minimum allowed value for this argument. If set and the provided value is lower than the minimum, an error will be produced. Can be combined with [`max`](#max) to clamp values.",
          "type": "integer"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "An `long` type argument has a numeric value without decimal points.",
          "const": "long"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "StringArgument": {
      "description": "A `string` type argument has a value made up of an ordered sequences of characters, like \"Hello\" or \"I'm a string\".",
      "type": "object",
      "properties": {
        "alternatives": {
          "oneOf": [
            {
              "description": "List of alternative format variations for this argument.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "List of alternative format variations for this argument.",
                "type": "string"
              }
            }
          ]
        },
        "name": {
          "description": "The name of the argument. Can be in the formats `--foo`, `-f` or `foo`. The number of dashes determines how values can be passed:  \n\n  - `--foo` is a long option, which can be passed with `executable_name --foo=value` or `executable_name --foo value`\n  - `-f` is a short option, which can be passed with `executable_name -f value`\n  - `foo` is an argument, which can be passed with `executable_name value`  \n",
          "type": "string"
        },
        "choices": {
          "description": "Limit the amount of valid values for this argument to those set in this list. When set and a value not present in the list is provided, an error will be produced.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "info": {
          "description": "Structured information. Can be any shape: a string, vector, map or even nested map.",
          "type": "object"
        },
        "default": {
          "oneOf": [
            {
              "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The default value when no argument value is provided. This will not work if the [`required`](#required) property is enabled.",
                "type": "string"
              }
            }
          ]
        },
        "example": {
          "oneOf": [
            {
              "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "An example value for this argument. If no [`default`](#default) property was specified, this will be used for that purpose.",
                "type": "string"
              }
            }
          ]
        },
        "description": {
          "description": "A description of the argument. This will be displayed with `--help`.",
          "type": "string"
        },
        "multiple_sep": {
          "description": "The delimiter character for providing [`multiple`](#multiple) values. `:` by default.",
          "type": "string"
        },
        "multiple": {
          "description": "Treat the argument value as an array. Arrays can be passed using the delimiter `--foo=1:2:3` or by providing the same argument multiple times `--foo 1 --foo 2`. You can use a custom delimiter by using the [`multiple_sep`](#multiple_sep) property. `false` by default.",
          "type": "boolean"
        },
        "type": {
          "description": "A `string` type argument has a value made up of an ordered sequences of characters, like \"Hello\" or \"I'm a string\".",
          "const": "string"
        },
        "required": {
          "description": "Make the value for this argument required. If set to `true`, an error will be produced if no value was provided. `false` by default.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "Resource": {
      "oneOf": [
        {
          "$ref": "#/$defs/BashScript"
        },
        {
          "$ref": "#/$defs/CSharpScript"
        },
        {
          "$ref": "#/$defs/Executable"
        },
        {
          "$ref": "#/$defs/JavaScriptScript"
        },
        {
          "$ref": "#/$defs/NextflowScript"
        },
        {
          "$ref": "#/$defs/PlainFile"
        },
        {
          "$ref": "#/$defs/PythonScript"
        },
        {
          "$ref": "#/$defs/RScript"
        },
        {
          "$ref": "#/$defs/ScalaScript"
        }
      ]
    },
    "BashScript": {
      "description": "An executable Bash script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable Bash script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "bash_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "CSharpScript": {
      "description": "An executable C# script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable C# script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "csharp_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "Executable": {
      "description": "An executable file.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable file.",
          "const": "executable"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "JavaScriptScript": {
      "description": "An executable JavaScript script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable JavaScript script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "javascript_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "NextflowScript": {
      "description": "A Nextflow script. Work in progress; added mainly for annotation at the moment.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "entrypoint": {
          "description": "The name of the workflow to be wrapped.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "A Nextflow script. Work in progress; added mainly for annotation at the moment.",
          "const": "nextflow_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "entrypoint",
        "type"
      ],
      "additionalProperties": false
    },
    "PlainFile": {
      "description": "A plain file. This can only be used as a supporting resource for the main script or unit tests.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "A plain file. This can only be used as a supporting resource for the main script or unit tests.",
          "const": "file"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "PythonScript": {
      "description": "An executable Python script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable Python script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "python_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "RScript": {
      "description": "An executable R script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable R script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "r_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "ScalaScript": {
      "description": "An executable Scala script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
      "type": "object",
      "properties": {
        "path": {
          "description": "The path of the input file. Can be a relative or an absolute path, or a URI. Mutually exclusive with `text`.",
          "type": "string"
        },
        "text": {
          "description": "The content of the resulting file specified as a string. Mutually exclusive with `path`.",
          "type": "string"
        },
        "is_executable": {
          "description": "Whether the resulting resource file should be made executable.",
          "type": "boolean"
        },
        "type": {
          "description": "An executable Scala script.\nWhen defined in functionality.resources, only the first entry will be executed when running the built component or when running `viash run`.\nWhen defined in functionality.test_resources, all entries will be executed during `viash test`.",
          "const": "scala_script"
        },
        "dest": {
          "description": "Resulting filename of the resource. From within a script, the file can be accessed at `meta[\"resources_dir\"] + \"/\" + dest`. If unspecified, `dest` will be set to the basename of the `path` parameter.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "NextflowDirectives": {
      "description": "Directives are optional settings that affect the execution of the process.\n",
      "type": "object",
      "properties": {
        "beforeScript": {
          "description": "The `beforeScript` directive allows you to execute a custom (Bash) snippet before the main process script is run. This may be useful to initialise the underlying cluster environment or for other custom initialisation.\n\nSee [`beforeScript`](https://www.nextflow.io/docs/latest/process.html#beforeScript).\n",
          "type": "string"
        },
        "module": {
          "oneOf": [
            {
              "description": "Environment Modules is a package manager that allows you to dynamically configure your execution environment and easily switch between multiple versions of the same software tool.\n\nIf it is available in your system you can use it with Nextflow in order to configure the processes execution environment in your pipeline.\n\nIn a process definition you can use the `module` directive to load a specific module version to be used in the process execution environment.\n\nSee [`module`](https://www.nextflow.io/docs/latest/process.html#module).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Environment Modules is a package manager that allows you to dynamically configure your execution environment and easily switch between multiple versions of the same software tool.\n\nIf it is available in your system you can use it with Nextflow in order to configure the processes execution environment in your pipeline.\n\nIn a process definition you can use the `module` directive to load a specific module version to be used in the process execution environment.\n\nSee [`module`](https://www.nextflow.io/docs/latest/process.html#module).\n",
                "type": "string"
              }
            }
          ]
        },
        "queue": {
          "oneOf": [
            {
              "description": "The `queue` directory allows you to set the queue where jobs are scheduled when using a grid based executor in your pipeline.\n\nSee [`queue`](https://www.nextflow.io/docs/latest/process.html#queue).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The `queue` directory allows you to set the queue where jobs are scheduled when using a grid based executor in your pipeline.\n\nSee [`queue`](https://www.nextflow.io/docs/latest/process.html#queue).\n",
                "type": "string"
              }
            }
          ]
        },
        "label": {
          "oneOf": [
            {
              "description": "The `label` directive allows the annotation of processes with mnemonic identifier of your choice.\n\nSee [`label`](https://www.nextflow.io/docs/latest/process.html#label).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The `label` directive allows the annotation of processes with mnemonic identifier of your choice.\n\nSee [`label`](https://www.nextflow.io/docs/latest/process.html#label).\n",
                "type": "string"
              }
            }
          ]
        },
        "container": {
          "oneOf": [
            {
              "description": "The `container` directive allows you to execute the process script in a Docker container.\n\nIt requires the Docker daemon to be running in machine where the pipeline is executed, i.e. the local machine when using the local executor or the cluster nodes when the pipeline is deployed through a grid executor.\n\nViash implements allows either a string value or a map. In case a map is used, the allowed keys are: `registry`, `image`, and `tag`. The `image` value must be specified.\n\nSee [`container`](https://www.nextflow.io/docs/latest/process.html#container).\n",
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "description": "The `container` directive allows you to execute the process script in a Docker container.\n\nIt requires the Docker daemon to be running in machine where the pipeline is executed, i.e. the local machine when using the local executor or the cluster nodes when the pipeline is deployed through a grid executor.\n\nViash implements allows either a string value or a map. In case a map is used, the allowed keys are: `registry`, `image`, and `tag`. The `image` value must be specified.\n\nSee [`container`](https://www.nextflow.io/docs/latest/process.html#container).\n",
              "type": "string"
            }
          ]
        },
        "publishDir": {
          "oneOf": [
            {
              "oneOf": [
                {
                  "description": "The `publishDir` directive allows you to publish the process output files to a specified folder.\n\nViash implements this directive as a plain string or a map. The allowed keywords for the map are: `path`, `mode`, `overwrite`, `pattern`, `saveAs`, `enabled`. The `path` key and value are required.\nThe allowed values for `mode` are: `symlink`, `rellink`, `link`, `copy`, `copyNoFollow`, `move`.\n\nSee [`publishDir`](https://www.nextflow.io/docs/latest/process.html#publishdir).\n",
                  "type": "string"
                },
                {
                  "description": "The `publishDir` directive allows you to publish the process output files to a specified folder.\n\nViash implements this directive as a plain string or a map. The allowed keywords for the map are: `path`, `mode`, `overwrite`, `pattern`, `saveAs`, `enabled`. The `path` key and value are required.\nThe allowed values for `mode` are: `symlink`, `rellink`, `link`, `copy`, `copyNoFollow`, `move`.\n\nSee [`publishDir`](https://www.nextflow.io/docs/latest/process.html#publishdir).\n",
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              ]
            },
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "description": "The `publishDir` directive allows you to publish the process output files to a specified folder.\n\nViash implements this directive as a plain string or a map. The allowed keywords for the map are: `path`, `mode`, `overwrite`, `pattern`, `saveAs`, `enabled`. The `path` key and value are required.\nThe allowed values for `mode` are: `symlink`, `rellink`, `link`, `copy`, `copyNoFollow`, `move`.\n\nSee [`publishDir`](https://www.nextflow.io/docs/latest/process.html#publishdir).\n",
                    "type": "string"
                  },
                  {
                    "description": "The `publishDir` directive allows you to publish the process output files to a specified folder.\n\nViash implements this directive as a plain string or a map. The allowed keywords for the map are: `path`, `mode`, `overwrite`, `pattern`, `saveAs`, `enabled`. The `path` key and value are required.\nThe allowed values for `mode` are: `symlink`, `rellink`, `link`, `copy`, `copyNoFollow`, `move`.\n\nSee [`publishDir`](https://www.nextflow.io/docs/latest/process.html#publishdir).\n",
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                ]
              }
            }
          ]
        },
        "maxForks": {
          "oneOf": [
            {
              "description": "The `maxForks` directive allows you to define the maximum number of process instances that can be executed in parallel. By default this value is equals to the number of CPU cores available minus 1.\n\nIf you want to execute a process in a sequential manner, set this directive to one.\n\nSee [`maxForks`](https://www.nextflow.io/docs/latest/process.html#maxforks).\n",
              "type": "string"
            },
            {
              "description": "The `maxForks` directive allows you to define the maximum number of process instances that can be executed in parallel. By default this value is equals to the number of CPU cores available minus 1.\n\nIf you want to execute a process in a sequential manner, set this directive to one.\n\nSee [`maxForks`](https://www.nextflow.io/docs/latest/process.html#maxforks).\n",
              "type": "integer"
            }
          ]
        },
        "maxErrors": {
          "oneOf": [
            {
              "description": "The `maxErrors` directive allows you to specify the maximum number of times a process can fail when using the `retry` error strategy. By default this directive is disabled.\n\nSee [`maxErrors`](https://www.nextflow.io/docs/latest/process.html#maxerrors).\n",
              "type": "string"
            },
            {
              "description": "The `maxErrors` directive allows you to specify the maximum number of times a process can fail when using the `retry` error strategy. By default this directive is disabled.\n\nSee [`maxErrors`](https://www.nextflow.io/docs/latest/process.html#maxerrors).\n",
              "type": "integer"
            }
          ]
        },
        "cpus": {
          "oneOf": [
            {
              "description": "The `cpus` directive allows you to define the number of (logical) CPU required by the process' task.\n\nSee [`cpus`](https://www.nextflow.io/docs/latest/process.html#cpus).\n",
              "type": "integer"
            },
            {
              "description": "The `cpus` directive allows you to define the number of (logical) CPU required by the process' task.\n\nSee [`cpus`](https://www.nextflow.io/docs/latest/process.html#cpus).\n",
              "type": "string"
            }
          ]
        },
        "accelerator": {
          "description": "The `accelerator` directive allows you to specify the hardware accelerator requirement for the task execution e.g. GPU processor.\n\nViash implements this directive as a map with accepted keywords: `type`, `limit`, `request`, and `runtime`.\n\nSee [`accelerator`](https://www.nextflow.io/docs/latest/process.html#accelerator).\n",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "time": {
          "description": "The `time` directive allows you to define how long a process is allowed to run.\n\nSee [`time`](https://www.nextflow.io/docs/latest/process.html#time).\n",
          "type": "string"
        },
        "afterScript": {
          "description": "The `afterScript` directive allows you to execute a custom (Bash) snippet immediately after the main process has run. This may be useful to clean up your staging area.\n\nSee [`afterScript`](https://www.nextflow.io/docs/latest/process.html#afterscript).\n",
          "type": "string"
        },
        "executor": {
          "description": "The `executor` defines the underlying system where processes are executed. By default a process uses the executor defined globally in the nextflow.config file.\n\nThe `executor` directive allows you to configure what executor has to be used by the process, overriding the default configuration. The following values can be used:\n\n| Name | Executor |\n|------|----------|\n| awsbatch | The process is executed using the AWS Batch service. | \n| azurebatch | The process is executed using the Azure Batch service. | \n| condor | The process is executed using the HTCondor job scheduler. | \n| google-lifesciences | The process is executed using the Google Genomics Pipelines service. | \n| ignite | The process is executed using the Apache Ignite cluster. | \n| k8s | The process is executed using the Kubernetes cluster. | \n| local | The process is executed in the computer where Nextflow is launched. | \n| lsf | The process is executed using the Platform LSF job scheduler. | \n| moab | The process is executed using the Moab job scheduler. | \n| nqsii | The process is executed using the NQSII job scheduler. | \n| oge | Alias for the sge executor. | \n| pbs | The process is executed using the PBS/Torque job scheduler. | \n| pbspro | The process is executed using the PBS Pro job scheduler. | \n| sge | The process is executed using the Sun Grid Engine / Open Grid Engine. | \n| slurm | The process is executed using the SLURM job scheduler. | \n| tes | The process is executed using the GA4GH TES service. | \n| uge | Alias for the sge executor. |\n\nSee [`executor`](https://www.nextflow.io/docs/latest/process.html#executor).\n",
          "type": "string"
        },
        "containerOptions": {
          "oneOf": [
            {
              "description": "The `containerOptions` directive allows you to specify any container execution option supported by the underlying container engine (ie. Docker, Singularity, etc). This can be useful to provide container settings only for a specific process e.g. mount a custom path.\n\nSee [`containerOptions`](https://www.nextflow.io/docs/latest/process.html#containeroptions).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The `containerOptions` directive allows you to specify any container execution option supported by the underlying container engine (ie. Docker, Singularity, etc). This can be useful to provide container settings only for a specific process e.g. mount a custom path.\n\nSee [`containerOptions`](https://www.nextflow.io/docs/latest/process.html#containeroptions).\n",
                "type": "string"
              }
            }
          ]
        },
        "disk": {
          "description": "The `disk` directive allows you to define how much local disk storage the process is allowed to use.\n\nSee [`disk`](https://www.nextflow.io/docs/latest/process.html#disk).\n",
          "type": "string"
        },
        "tag": {
          "description": "The `tag` directive allows you to associate each process execution with a custom label, so that it will be easier to identify them in the log file or in the trace execution report.\n\nFor ease of use, the default tag is set to \"$id\", which allows tracking the progression of the channel events through the workflow more easily.\n\nSee [`tag`](https://www.nextflow.io/docs/latest/process.html#tag).\n",
          "type": "string"
        },
        "conda": {
          "oneOf": [
            {
              "description": "The `conda` directive allows for the definition of the process dependencies using the Conda package manager.\n\nNextflow automatically sets up an environment for the given package names listed by in the `conda` directive.\n\nSee [`conda`](https://www.nextflow.io/docs/latest/process.html#conda).\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "The `conda` directive allows for the definition of the process dependencies using the Conda package manager.\n\nNextflow automatically sets up an environment for the given package names listed by in the `conda` directive.\n\nSee [`conda`](https://www.nextflow.io/docs/latest/process.html#conda).\n",
                "type": "string"
              }
            }
          ]
        },
        "machineType": {
          "description": " The `machineType` can be used to specify a predefined Google Compute Platform machine type when running using the Google Life Sciences executor.\n\nSee [`machineType`](https://www.nextflow.io/docs/latest/process.html#machinetype).\n",
          "type": "string"
        },
        "stageInMode": {
          "description": "The `stageInMode` directive defines how input files are staged-in to the process work directory. The following values are allowed:\n\n| Value | Description |\n|-------|-------------| \n| copy | Input files are staged in the process work directory by creating a copy. | \n| link | Input files are staged in the process work directory by creating an (hard) link for each of them. | \n| symlink | Input files are staged in the process work directory by creating a symbolic link with an absolute path for each of them (default). | \n| rellink | Input files are staged in the process work directory by creating a symbolic link with a relative path for each of them. | \n\nSee [`stageInMode`](https://www.nextflow.io/docs/latest/process.html#stageinmode).\n",
          "type": "string"
        },
        "cache": {
          "oneOf": [
            {
              "description": "The `cache` directive allows you to store the process results to a local cache. When the cache is enabled and the pipeline is launched with the resume option, any following attempt to execute the process, along with the same inputs, will cause the process execution to be skipped, producing the stored data as the actual results.\n\nThe caching feature generates a unique key by indexing the process script and inputs. This key is used to identify univocally the outputs produced by the process execution.\n\nThe `cache` is enabled by default, you can disable it for a specific process by setting the cache directive to `false`.\n\nAccepted values are: `true`, `false`, \"deep\", and \"lenient\".\n\nSee [`cache`](https://www.nextflow.io/docs/latest/process.html#cache).\n",
              "type": "boolean"
            },
            {
              "description": "The `cache` directive allows you to store the process results to a local cache. When the cache is enabled and the pipeline is launched with the resume option, any following attempt to execute the process, along with the same inputs, will cause the process execution to be skipped, producing the stored data as the actual results.\n\nThe caching feature generates a unique key by indexing the process script and inputs. This key is used to identify univocally the outputs produced by the process execution.\n\nThe `cache` is enabled by default, you can disable it for a specific process by setting the cache directive to `false`.\n\nAccepted values are: `true`, `false`, \"deep\", and \"lenient\".\n\nSee [`cache`](https://www.nextflow.io/docs/latest/process.html#cache).\n",
              "type": "string"
            }
          ]
        },
        "pod": {
          "oneOf": [
            {
              "description": "The `pod` directive allows the definition of pods specific settings, such as environment variables, secrets and config maps when using the Kubernetes executor.\n\nSee [`pod`](https://www.nextflow.io/docs/latest/process.html#pod).\n",
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            {
              "type": "array",
              "items": {
                "description": "The `pod` directive allows the definition of pods specific settings, such as environment variables, secrets and config maps when using the Kubernetes executor.\n\nSee [`pod`](https://www.nextflow.io/docs/latest/process.html#pod).\n",
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          ]
        },
        "penv": {
          "description": "The `penv` directive allows you to define the parallel environment to be used when submitting a parallel task to the SGE resource manager.\n\nSee [`penv`](https://www.nextflow.io/docs/latest/process.html#penv).\n",
          "type": "string"
        },
        "scratch": {
          "oneOf": [
            {
              "description": "The `scratch` directive allows you to execute the process in a temporary folder that is local to the execution node.\n\nSee [`scratch`](https://www.nextflow.io/docs/latest/process.html#scratch).\n",
              "type": "boolean"
            },
            {
              "description": "The `scratch` directive allows you to execute the process in a temporary folder that is local to the execution node.\n\nSee [`scratch`](https://www.nextflow.io/docs/latest/process.html#scratch).\n",
              "type": "string"
            }
          ]
        },
        "storeDir": {
          "description": "The `storeDir` directive allows you to define a directory that is used as a permanent cache for your process results.\n\nSee [`storeDir`](https://www.nextflow.io/docs/latest/process.html#storeDir).\n",
          "type": "string"
        },
        "maxRetries": {
          "oneOf": [
            {
              "description": "The `maxRetries` directive allows you to define the maximum number of times a process instance can be re-submitted in case of failure. This value is applied only when using the retry error strategy. By default only one retry is allowed.\n\nSee [`maxRetries`](https://www.nextflow.io/docs/latest/process.html#maxretries).\n",
              "type": "string"
            },
            {
              "description": "The `maxRetries` directive allows you to define the maximum number of times a process instance can be re-submitted in case of failure. This value is applied only when using the retry error strategy. By default only one retry is allowed.\n\nSee [`maxRetries`](https://www.nextflow.io/docs/latest/process.html#maxretries).\n",
              "type": "integer"
            }
          ]
        },
        "echo": {
          "oneOf": [
            {
              "description": "By default the stdout produced by the commands executed in all processes is ignored. By setting the `echo` directive to true, you can forward the process stdout to the current top running process stdout file, showing it in the shell terminal.\n \nSee [`echo`](https://www.nextflow.io/docs/latest/process.html#echo).\n",
              "type": "boolean"
            },
            {
              "description": "By default the stdout produced by the commands executed in all processes is ignored. By setting the `echo` directive to true, you can forward the process stdout to the current top running process stdout file, showing it in the shell terminal.\n \nSee [`echo`](https://www.nextflow.io/docs/latest/process.html#echo).\n",
              "type": "string"
            }
          ]
        },
        "errorStrategy": {
          "description": "The `errorStrategy` directive allows you to define how an error condition is managed by the process. By default when an error status is returned by the executed script, the process stops immediately. This in turn forces the entire pipeline to terminate.\n\nTable of available error strategies:\n| Name | Executor |\n|------|----------|\n| `terminate` | Terminates the execution as soon as an error condition is reported. Pending jobs are killed (default) |\n| `finish` | Initiates an orderly pipeline shutdown when an error condition is raised, waiting the completion of any submitted job. |\n| `ignore` | Ignores processes execution errors. |\n| `retry` | Re-submit for execution a process returning an error condition. |\n\nSee [`errorStrategy`](https://www.nextflow.io/docs/latest/process.html#errorstrategy).\n",
          "type": "string"
        },
        "memory": {
          "description": "The `memory` directive allows you to define how much memory the process is allowed to use.\n\nSee [`memory`](https://www.nextflow.io/docs/latest/process.html#memory).\n",
          "type": "string"
        },
        "stageOutMode": {
          "description": "The `stageOutMode` directive defines how output files are staged-out from the scratch directory to the process work directory. The following values are allowed:\n\n| Value | Description |\n|-------|-------------| \n| copy | Output files are copied from the scratch directory to the work directory. | \n| move | Output files are moved from the scratch directory to the work directory. | \n| rsync | Output files are copied from the scratch directory to the work directory by using the rsync utility. |\n\nSee [`stageOutMode`](https://www.nextflow.io/docs/latest/process.html#stageoutmode).\n",
          "type": "string"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "NextflowAuto": {
      "description": "Automated processing flags which can be toggled on or off.",
      "type": "object",
      "properties": {
        "simplifyInput": {
          "description": "If `true`, an input tuple only containing only a single File (e.g. `[\"foo\", file(\"in.h5ad\")]`) is automatically transformed to a map (i.e. `[\"foo\", [ input: file(\"in.h5ad\") ] ]`).\n\nDefault: `true`.\n",
          "type": "boolean"
        },
        "simplifyOutput": {
          "description": "If `true`, an output tuple containing a map with a File (e.g. `[\"foo\", [ output: file(\"out.h5ad\") ] ]`) is automatically transformed to a map (i.e. `[\"foo\", file(\"out.h5ad\")]`).\n\nDefault: `false`.\n",
          "type": "boolean"
        },
        "publish": {
          "oneOf": [
            {
              "description": "If `true`, the module's outputs are automatically published to `params.publishDir`.\nIf equal to \"state\", also a `.state.yaml` file will be published in the publish dir.\nWill throw an error if `params.publishDir` is not defined.\n\nDefault: `false`.\n",
              "type": "boolean"
            },
            {
              "description": "If `true`, the module's outputs are automatically published to `params.publishDir`.\nIf equal to \"state\", also a `.state.yaml` file will be published in the publish dir.\nWill throw an error if `params.publishDir` is not defined.\n\nDefault: `false`.\n",
              "type": "string"
            }
          ]
        },
        "transcript": {
          "description": "If `true`, the module's transcripts from `work/` are automatically published to `params.transcriptDir`.\nIf not defined, `params.publishDir + \"/_transcripts\"` will be used.\nWill throw an error if neither are defined.\n\nDefault: `false`.\n",
          "type": "boolean"
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "NextflowConfig": {
      "description": "Allows tweaking how the Nextflow Config file is generated.",
      "type": "object",
      "properties": {
        "labels": {
          "description": "A series of default labels to specify memory and cpu constraints.\n\nThe default memory labels are defined as \"mem1gb\", \"mem2gb\", \"mem4gb\", ... upto \"mem512tb\" and follows powers of 2.\nThe default cpu labels are defined as \"cpu1\", \"cpu2\", \"cpu5\", \"cpu10\", ... upto \"cpu1000\" and follows a semi logarithmic scale (1, 2, 5 per decade).\n\nConceptually it is possible for a Viash Config to overwrite the full labels parameter, however likely it is more efficient to add additional labels\nin the Viash Project with a config mod.\n",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "script": {
          "oneOf": [
            {
              "description": "Includes a single string or list of strings into the nextflow.config file.\nThis can be used to add custom profiles or include an additional config file.\n",
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "description": "Includes a single string or list of strings into the nextflow.config file.\nThis can be used to add custom profiles or include an additional config file.\n",
                "type": "string"
              }
            }
          ]
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "Dependency": {
      "description": "Specifies a Viash component (script or executable) that should be made available for the code defined in the functionality.\nThe dependency components are collected and copied to the output folder during the Viash build step.\n",
      "type": "object",
      "properties": {
        "name": {
          "description": "The full name of the dependency component. This should include the namespace.",
          "type": "string"
        },
        "repository": {
          "oneOf": [
            {
              "description": "Specifies the location where the dependency component can be found.\nThis must either be a full definition of the repository or the name of a repository refenced as it is defined under functionality.repositories.\nAdditionally, the full definition can be specified as a single string where all parameters such as repository type, url, branch or tag are specified.\n",
              "type": "string"
            },
            {
              "description": "Specifies the location where the dependency component can be found.\nThis must either be a full definition of the repository or the name of a repository refenced as it is defined under functionality.repositories.\nAdditionally, the full definition can be specified as a single string where all parameters such as repository type, url, branch or tag are specified.\n",
              "$ref": "#/$defs/Repository"
            }
          ]
        },
        "alias": {
          "description": "An alternative name for the dependency component. This can include a namespace if so needed.",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "Repository": {
      "oneOf": [
        {
          "$ref": "#/$defs/LocalRepository"
        },
        {
          "$ref": "#/$defs/GitRepository"
        },
        {
          "$ref": "#/$defs/GithubRepository"
        },
        {
          "$ref": "#/$defs/ViashhubRepository"
        }
      ]
    },
    "LocalRepository": {
      "description": "Defines a locally present and available repository.\nThis can be used to define components from the same code base as the current component.\nAlternatively, this can be used to refer to a code repository present on the local hard-drive instead of fetchable remotely, for example during development.\n",
      "type": "object",
      "properties": {
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "type": {
          "description": "Defines a locally present and available repository.\nThis can be used to define components from the same code base as the current component.\nAlternatively, this can be used to refer to a code repository present on the local hard-drive instead of fetchable remotely, for example during development.\n",
          "const": "local"
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false
    },
    "GitRepository": {
      "description": "A Git repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "uri": {
          "description": "The URI of the Git repository.",
          "type": "string"
        },
        "type": {
          "description": "A Git repository where remote dependency components can be found.",
          "const": "git"
        }
      },
      "required": [
        "uri",
        "type"
      ],
      "additionalProperties": false
    },
    "GithubRepository": {
      "description": "A GitHub repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "repo": {
          "description": "The name of the GitHub repository.",
          "type": "string"
        },
        "type": {
          "description": "A GitHub repository where remote dependency components can be found.",
          "const": "github"
        }
      },
      "required": [
        "repo",
        "type"
      ],
      "additionalProperties": false
    },
    "ViashhubRepository": {
      "description": "A Viash-Hub repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "repo": {
          "description": "The name of the Viash-Hub repository.",
          "type": "string"
        },
        "type": {
          "description": "A Viash-Hub repository where remote dependency components can be found.",
          "const": "viashhub"
        }
      },
      "required": [
        "repo",
        "type"
      ],
      "additionalProperties": false
    },
    "RepositoryWithName": {
      "oneOf": [
        {
          "$ref": "#/$defs/LocalRepositoryWithName"
        },
        {
          "$ref": "#/$defs/GitRepositoryWithName"
        },
        {
          "$ref": "#/$defs/GithubRepositoryWithName"
        },
        {
          "$ref": "#/$defs/ViashhubRepositoryWithName"
        }
      ]
    },
    "LocalRepositoryWithName": {
      "description": "Defines a locally present and available repository.\nThis can be used to define components from the same code base as the current component.\nAlternatively, this can be used to refer to a code repository present on the local hard-drive instead of fetchable remotely, for example during development.\n",
      "type": "object",
      "properties": {
        "name": {
          "description": "The identifier used to refer to this repository from dependencies.",
          "type": "string"
        },
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "type": {
          "description": "Defines a locally present and available repository.\nThis can be used to define components from the same code base as the current component.\nAlternatively, this can be used to refer to a code repository present on the local hard-drive instead of fetchable remotely, for example during development.\n",
          "const": "localwithname"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "additionalProperties": false
    },
    "GitRepositoryWithName": {
      "description": "A Git repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The identifier used to refer to this repository from dependencies.",
          "type": "string"
        },
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "uri": {
          "description": "The URI of the Git repository.",
          "type": "string"
        },
        "type": {
          "description": "A Git repository where remote dependency components can be found.",
          "const": "gitwithname"
        }
      },
      "required": [
        "name",
        "uri",
        "type"
      ],
      "additionalProperties": false
    },
    "GithubRepositoryWithName": {
      "description": "A GitHub repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The identifier used to refer to this repository from dependencies.",
          "type": "string"
        },
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "repo": {
          "description": "The name of the GitHub repository.",
          "type": "string"
        },
        "type": {
          "description": "A GitHub repository where remote dependency components can be found.",
          "const": "githubwithname"
        }
      },
      "required": [
        "name",
        "repo",
        "type"
      ],
      "additionalProperties": false
    },
    "ViashhubRepositoryWithName": {
      "description": "A Viash-Hub repository where remote dependency components can be found.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The identifier used to refer to this repository from dependencies.",
          "type": "string"
        },
        "path": {
          "description": "Defines a subfolder of the repository to use as base to look for the dependency components.",
          "type": "string"
        },
        "tag": {
          "description": "Defines which version of the dependency component to use. Typically this can be a specific tag, branch or commit hash.",
          "type": "string"
        },
        "repo": {
          "description": "The name of the Viash-Hub repository.",
          "type": "string"
        },
        "type": {
          "description": "A Viash-Hub repository where remote dependency components can be found.",
          "const": "viashhubwithname"
        }
      },
      "required": [
        "name",
        "repo",
        "type"
      ],
      "additionalProperties": false
    },
    "DockerSetupStrategy": {
      "enum": [
        "cb",
        "ifneedbepullelsecachedbuild",
        "donothing",
        "gentlepush",
        "alwayspullelsebuild",
        "build",
        "alwayspull",
        "alwaysbuild",
        "ifneedbebuild",
        "pullelsebuild",
        "p",
        "alwayspullelsecachedbuild",
        "pull",
        "maybepush",
        "ifneedbepullelsebuild",
        "cachedbuild",
        "pullelsecachedbuild",
        "push",
        "forcepush",
        "alwayspush",
        "b",
        "pushifnotpresent",
        "alwayscachedbuild",
        "meh",
        "ifneedbepull",
        "ifneedbecachedbuild"
      ],
      "$comment": "TODO add descriptions to different strategies",
      "description": "The Docker setup strategy to use when building a container."
    },
    "Direction": {
      "enum": [
        "input",
        "output"
      ],
      "description": "Makes this argument an `input` or an `output`, as in does the file/folder needs to be read or written. `input` by default."
    },
    "Status": {
      "enum": [
        "enabled",
        "disabled",
        "deprecated"
      ],
      "description": "Allows setting a component to active, deprecated or disabled."
    },
    "DockerResolveVolume": {
      "enum": [
        "manual",
        "automatic",
        "auto",
        "Manual",
        "Automatic",
        "Auto"
      ],
      "$comment": "TODO make fully case insensitive",
      "description": "Enables or disables automatic volume mapping. Enabled when set to `Automatic` or disabled when set to `Manual`. Default: `Automatic`"
    },
    "DoubleStrings": {
      "enum": [
        "+.inf",
        "+inf",
        "+infinity",
        "positiveinfinity",
        "positiveinf",
        "-.inf",
        "-inf",
        "-infinity",
        "negativeinfinity",
        "negativeinf",
        ".nan",
        "nan"
      ]
    },
    "DoubleWithInf": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "$ref": "#/$defs/DoubleStrings"
        }
      ]
    }
  }
}
