#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# 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
