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

packages:
  helloworld:
    actions:
      hello:
        code: |
              function main(params) {
                console.log(params);
                return params || {};
              }
