# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

# Example: input and output parameters with advanced fields
packages:
  hello_world_package:
    version: 1.0
    license: Apache-2.0
    actions:
      hello_world_advanced_parms:
        function: src/hello_plus.js
        inputs:
          name:
            type: string
            description: name of person
            default: unknown person
          place:
            type: string
            description: location of person
            value: the Shire
          children:
            type: integer
            description: Number of children
            default: 0
          height:
            type: float
            description: height in meters
            default: 0.0
        outputs:
          greeting:
            type: string
            description: greeting string
          details:
            type: string
            description: detailed information about the person
