# 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: processing data in a sequence
packages:
  fellowship_package:
    version: 1.0
    license: Apache-2.0
    actions:
      member_join:
        function: src/member_join.js
        inputs:
          name:
            type: string
            description: name of person
            default: unknown
          place:
            type: string
            description: location of person
            default: unknown
          job:
            type: string
            description: current occupation
            default: 0
        outputs:
          member:
            type: json
            description: member record
      member_process:
        function: src/member_process.js
        inputs:
          member: {}
      member_equip:
        function: src/member_equip.js
        inputs:
          member: {}
    sequences:
      fellowship_membership:
        actions: member_join, member_process, member_equip
