Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Contracts for CoffeeScript
JavaScript CoffeeScript CSS

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
contracts.js @ 4e37267
documentation
examples
extras
lib
src
test
.gitignore
.gitmodules
.npmignore
Cakefile
LICENSE
README.md
Rakefile
index.html
package.json
syntax.coffee
test.html

README.md

contracts.coffee

contracts.coffee is a dialect of CoffeeScript with contract support.

Contracts allow you to write powerful runtime assertions about your code. Like types but less painful, like assert but more useful.

square :: (Num) -> Num
square = (x) -> x * x

# throws a run-time error
square "a string"   

Documentation, usage, and more examples: http://disnetdev.com/contracts.coffee/

Quick start

Install via npm:

npm install -g contracts.coffee

Use the compiler:

coffee -c --contracts /path/to/script.coffee

An alternative to using the --contracts flag is setting this env variable:

export CONTRACTS_COFFEE_ENABLED=1

If you are running in the browser then you'll need to load the contracts library (found in lib/contracts/contracts.js)

<script type="text/javascript" src="contracts.js"></script>

There is also experimental support for require.js. See here for an example.

If you are running in node.js then you'll need to install the contracts.js package

npm install contracts.js

Note that contracts.coffee requires some pretty new features of JavaScript (Proxies in particular) so it currently only works on Firefox 4+, node.js 0.5.x and 0.7.x (but not 0.6), and recent versions of Chrome (though you'll need to enable the experimental JavaScript flag in about:flags).

Change Log

  • 0.3.0 (March 15th, 2012)
    • change to dependent function contracts
    • various contracts.coffee bug fixes: #27, #41, #33, #31,
    • various contracts.js bug fixes: #9, #8, #7, #6, #5, #4
    • experimental support for require.js (see here for example use)
    • based off CoffeeScript 1.3.1
  • 0.2.0 (January 4th, 2012)
    • removed .use(), now using Contracts.exports and Contracts.use
    • various bug fixes
    • based off CoffeeScript 1.2.0
  • 0.1.0 (August 29th, 2011)
    • initial release
    • based off CoffeeScript 1.1.2
Something went wrong with that request. Please try again.