1 | ## 3<sup>rd</sup> party libraries
|
2 |
|
3 | * [lazy-ass](https://github.com/bahmutov/lazy-ass) and
|
4 | [check-more-types](https://github.com/kensho/check-more-types) are used to
|
5 | [defend against runtime errors](http://glebbahmutov.com/blog/lazy-and-async-assertions/).
|
6 | * [lo-dash](https://github.com/bestiejs/lodash) is used to deal with collections / iterators.
|
7 | * [check-types](https://github.com/philbooth/check-types.js) is used to verify arguments through out the code.
|
8 | * [optimist](https://github.com/substack/node-optimist) is used to process command line arguments.
|
9 | * [request](https://npmjs.org/package/request) is used to fetch NPM registry information.
|
10 | * [semver](https://npmjs.org/package/semver) is used to compare module version numbers.
|
11 | * [q](https://npmjs.org/package/q) library is used to handle promises. While developing this tool,
|
12 | I quickly ran into problems managing the asynchronous nature of fetching information, installing multiple modules,
|
13 | testing, etc. At first I used [async](https://npmjs.org/package/async), but it was still too complex.
|
14 | Using promises allowed to cut the program's code and the complexity to very manageable level.
|
15 | * [cli-color](https://npmjs.org/package/cli-color) prints colored text to the terminal.
|