# js2coffee
[![Build Status](http://img.shields.io/travis-ci/js2coffee/js2coffee.png?branch=master)](http://travis-ci.org/js2coffee/js2coffee "Check this project's build status on TravisCI")
[![NPM version](http://badge.fury.io/js/js2coffee.png)](https://npmjs.org/package/js2coffee "View this project on NPM")
[![Dependency Status](https://david-dm.org/js2coffee/js2coffee.png?theme=shields.io)](https://david-dm.org/js2coffee/js2coffee)
[![Development Dependency Status](https://david-dm.org/js2coffee/js2coffee/dev-status.png?theme=shields.io)](https://david-dm.org/js2coffee/js2coffee#info=devDependencies)
A JavaScript to [CoffeeScript](http://coffeescript.org/) compiler
## Install
### [NPM](http://npmjs.org/)
- Use: `require('js2coffee')`
- Install: `npm install --save js2coffee`
### [Browserify](http://browserify.org/)
- Use: `require('js2coffee')`
- Install: `npm install --save js2coffee`
- CDN URL: `//wzrd.in/bundle/js2coffee@0.3.1`
### [Ender](http://ender.jit.su/)
- Use: `require('js2coffee')`
- Install: `ender add js2coffee`
### Command Line Interface
- Install: `npm install -g js2coffee`
## Usage
### CLI
- Use:
``` bash
js2coffee input_file.js
js2coffee input_file.js > output.coffee
cat input.js | js2coffee
```
You can pass some options:
``` bash
--version # Show js2coffee version
--verbose # Be verbose
--no_comments # Do not translate comments
--show_src_lineno # Show src lineno's as comments
--single_quotes # Use single quoted string literals - default double quoted
--help # If you need help
--indent # Specify the indent character(s) - default 2 spaces
```
### API
``` javascript
js2coffee = require('js2coffee');
coffeeContent = js2coffee.build(jstContent, {show_src_lineno: true, indent: " "});
```
- `require('js2coffee').build(content, options)`, arguments:
- **content** String - javascript source code
- **options** Object - options object, available options:
- **no_comments** Boolean - ignore comments, if true
- **show_src_lineno** Boolean - show source line numbers in each line as comment, if true
- **indent** String - specify indent
- **single_quotes** Boolean - use single quoted string literals instead of double quoted
## Known issues
Js2coffee has some kown issues
- switch statements have always implict returns at the end of a function - [#250](https://github.com/rstacruz/js2coffee/pull/250)
- some switch statements fail - [switch](https://github.com/rstacruz/js2coffee/issues?direction=desc&labels=switch-case&page=1&sort=updated&state=open)
- CoffeeScript keywords become converted with an trailing underscore - [keywords](https://github.com/rstacruz/js2coffee/issues?direction=desc&labels=keywords&page=1&sort=updated&state=open)
- Narcissus fails to parse JavaScript keywords as object properties - [narcissus](https://github.com/rstacruz/js2coffee/issues?direction=desc&labels=narcissus&page=1&sort=updated&state=open)
- some IIFE syntaxes fail - [#190](https://github.com/rstacruz/js2coffee/issues/190)
- Empty function declrations within if statements fail - [#162](https://github.com/rstacruz/js2coffee/issues/162)
## Try out in the browser
[js2coffee.org](http://js2coffee.org)
You can swtich the mode (JS -> Coffee and Coffee -> JS) at the top in the center.
## History
[Discover the change history by heading on over to the `HISTORY.md` file.](https://github.com/js2coffee/js2coffee/blob/master/HISTORY.md#files)
## Contribute
[Discover how you can contribute by heading on over to the `CONTRIBUTING.md` file.](https://github.com/js2coffee/js2coffee/blob/master/CONTRIBUTING.md#files)
## Backers
### Maintainers
These amazing people are maintaining this project:
- Rico Sta. Cruz (http://ricostacruz.com)
- Benjamin Lupton (https://github.com/balupton)
- Anton Wilhelm (https://github.com/timaschew)
### Sponsors
No sponsors yet! Will you be the first?
### Contributors
These amazing people have contributed code to this project:
- [Anton Wilhelm](https://github.com/timaschew) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=timaschew)
- [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=balupton)
- [clkao](https://github.com/clkao) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=clkao)
- [codelahoma](https://github.com/codelahoma) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=codelahoma)
- [dburt](https://github.com/dburt) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=dburt)
- [ForbesLindesay](https://github.com/ForbesLindesay) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=ForbesLindesay)
- [gabipurcaru](https://github.com/gabipurcaru) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=gabipurcaru)
- [grandquista](https://github.com/grandquista) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=grandquista)
- [joelvh](https://github.com/joelvh) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=joelvh)
- [karlbohlmark](https://github.com/karlbohlmark) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=karlbohlmark)
- [MichaelBlume](https://github.com/MichaelBlume) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=MichaelBlume)
- [michaelficarra](https://github.com/michaelficarra) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=michaelficarra)
- [MissingHandle](https://github.com/MissingHandle) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=MissingHandle)
- [nateschiffer](https://github.com/nateschiffer) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=nateschiffer)
- [nilbus](https://github.com/nilbus) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=nilbus)
- [rstacruz](https://github.com/rstacruz) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=rstacruz)
- [thoka](https://github.com/thoka) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=thoka)
- [tricknotes](https://github.com/tricknotes) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=tricknotes)
- [tsantef](https://github.com/tsantef) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=tsantef)
- [twilson63](https://github.com/twilson63) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=twilson63)
- [wlaurance](https://github.com/wlaurance) — [view contributions](https://github.com/js2coffee/js2coffee/commits?author=wlaurance)
[Become a contributor!](https://github.com/js2coffee/js2coffee/blob/master/CONTRIBUTING.md#files)
## License
Licensed under the incredibly [permissive](http://en.wikipedia.org/wiki/Permissive_free_software_licence) [MIT license](http://creativecommons.org/licenses/MIT/)
Copyright © 2011+ Rico Sta. Cruz (http://ricostacruz.com)
## Thanks
Made possible thanks to the hard work of Js2coffee's dependency projects:
- [Narcissus](https://github.com/mozilla/narcissus), Mozilla's JavaScript engine
- [Node Narcissus](https://github.com/kuno/node-narcissus), the Node port of Narcissus
- [Underscore.js](http://documentcloud.github.com/underscore)
And of course:
- Jeremy Ashkenas's [CoffeeScript](http://jashkenas.github.com/coffee-script/)