# Contributing to the Project

We welcome contributions, but request you follow these guidelines.

 - [Raising issues](#raising-issues)
 - [Feature requests](#feature-requests)
 - [Pull-Requests](#pull-requests)
   - [Coding standards](#coding-standards)
   - [Best practices](#best-practices)

This project adheres to the [Contributor Covenant 1.4](http://contributor-covenant.org/version/1/4/).
By participating, you are expected to uphold this code. Please report unacceptable behavior to the core team.

## Raising issues

Please raise any bug reports on the relevant project's issue tracker. Be sure to
search the list to see if your issue has already been raised.

A good bug report is one that make it easy for us to understand what you were
trying to do and what went wrong.

Provide as much context as possible so we can try to recreate the issue.
If possible, include the relevant part of your flow. To do this, select the
relevant nodes, press Ctrl-E and copy the flow data from the Export dialog.

## Feature requests

For feature requests, please raise them in issues and describe it at a feature to help prioritization.

## Pull-Requests

If you want to raise a pull-request with a new feature, or a refactoring
of existing code, it may well get rejected if you haven't discussed it on
the GitHub issues first.


## Coding standards

Please ensure you follow the coding standards used through-out the existing
code base. Some basic rules include:

 - indent with 4-spaces, no tabs. No arguments.
 - opening brace on same line as `if`/`for`/`function` and so on, closing brace
 on its own line.

## Best practices

Nodes can handle fields in various ways.

- `msg.payload` should contains the input required data to run the nodes and the output result
- Filesystem `path` should handle string with `{cwd}` to allow absolute or relative path and `{timestamp}` to add random timestamp.
- Fields should be able to rerieve data from `msg.*` according to a given property path.