Contributing to Inferno
==========================
Many thanks for using Inferno and contributing to its development. The following is a quick set of guidelines designed to maximise your contribution's effectiveness.
Got a question or need help?
----------------------------
If you're having trouble getting Inferno to do what you want, there are a couple of places to get help before submitting an issue:
* [Stack Overflow questions tagged infernojs](http://stackoverflow.com/questions/tagged/infernojs)
Of course, if you've encountered a bug, then the best course of action is to raise an issue (if no-one else has!).
Reporting security vulnerabilities
----------------------------------
If you think you've found a security vulnerability, please email [Dominic Gannaway](mailto:dg@domgan.com) with details, and he will respond to you if he isn't at work by that time.
Repository Layout
-----------------
The repository structures as a monorepo utilizing [lerna](https://github.com/lerna/lerna) as a management tool of choice. Lerna setup and linking are part of the `postinstall` task so it should be automatically
run after `npm install`. `lerna` executes command based on a topological-sorted order of packages based on their dependencies.
For example, if you want to see the order of packages being processed, you can do:
```
$ lerna exec -- node -e "console.log(require('./package.json').name)"
inferno-shared
inferno-vnode-flags
inferno
inferno-hyperscript
inferno-create-element
inferno-extras
inferno-router
inferno-compat
inferno-server
inferno-redux
inferno-mobx
inferno-test-utils
```
Source files are written in TypeScript and tests are written in JS/JSX consuming the dist files.
Running tests
-------------
Always include tests for the functionality you want to add into Inferno. This way we can avoid regression in future.
Make sure you have lerna tool installed globally.
```
npm i -g lerna
```
- Clone the repository, and clean it. `lerna clean`
- Install development dependencies `npm i`
- build typescript files `npm run build`
- run tests `npm run test`
Pull requests
-------------
All pull requests are welcome.
*Caveat for what follows: If in doubt, submit the request - a PR that needs tweaking is infinitely more valuable than a request that wasn't made because you were worrying about meeting these requirements.*
Before submitting, run `npm run build` (which will concatenate, lint and test the code) to ensure the build passes - but don't include files from outside the `src` and `test` folders in the PR.
And make sure the PR haven't been published before!
There isn't (yet) a formal style guide for Inferno, so please take care to adhere to existing conventions:
* 2-space indentation, not tabs!
* Semi-colons
* Single-quotes for strings
Above all, code should be clean and readable, and commented where necessary. If you add a new feature, make sure you add a test to go along with it!
Before you commit your changes, please run `npm run prettier` to format code correctly
Small print
-----------
There's no contributor license agreement - contributions are made on a common sense basis. Inferno is distributed under the MIT license, which means your contributions will be too.
Debugging Browser
-----------------
Just run `npm run test:browser:debug` Open localhost:9876 and click debug!
Debugging NodeJS
----------------
Its possible to debug inferno tests by running following command `npm run debug` and open chrome web address: chrome://inspect/#devices
Pro tip: You can filter down number of tests by editing `debug` -task:
`node --inspect-brk ./node_modules/.bin/jest {*edit this*} --runInBand --no-cache --no-watchman`
Change parameter to jest to match only files you want to run.
Happy debugging!
## Credits
### Contributors
Thank you to all the people who have already contributed to inferno!
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/inferno#backer)]
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/inferno#sponsor))