# grunt-cover-ts
[![Build Status](https://travis-ci.org/kitsonk/grunt-cover-ts.svg)](https://travis-ci.org/kitsonk/grunt-cover-ts)

Takes line coverage information and source maps to determine coverage for TypeScript.

This plugin has been designed to work with an `lcov.info` that is generated from [Istanbul](https://gotwarlost.github.io/istanbul/).  It also has only been designed to re-map source maps generated by [TypeScript](http://www.typescriptlang.org/) that are peers of the emitted JavaScript.  Because it simply walks the `lcov.info` and maps back via [Mozilla's source-map](https://github.com/mozilla/source-map/), it may work in other use cases.

This plugin supports both external source map files as well as base64 encoded data URI's that can be embedded inline within the target file.

## Getting Started

This plugin requires Grunt `~0.4.5`

If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

```shell
npm install grunt-cover-ts --save-dev
```

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

```js
grunt.loadNpmTasks('grunt-cover-ts');
```

## The "map_coverage_json" task

### Overview

In your project's Gruntfile, add a section named `map_coverage_json` to the data object passed into `grunt.initConfig()`.

```js
grunt.initConfig({
    map_coverage_json: {
        files: {
            src: 'coverage-final.json', // location of the source json
            dest: 'dest/coverage-final.json' // location of the destination json
        },
        your_target: {
            files: {
                src: 'tmp/coverage-final.json' // when using a specific target, location of your source json
            }
        }
    }
})
```

### Usage Examples

#### Basic Usage

You just need to provide a location of a JSON coverage file and it will then be analysed and rewritten by the plugin, so basic usage would look something like this:

```js
grunt.initConfig({
    map_coverage_json: {
        files: {
            src: 'coverage-final.info'
        }
    }
});
```

## The "cover_ts" task

### Overview

In your project's Gruntfile, add a section named `cover_ts` to the data object passed into `grunt.initConfig()`.

```js
grunt.initConfig({
  cover_ts: {
      files: {
          src: 'lcov.info', // location of the source lcov.info
          dest: 'dest/lcov.info' // location of the destination lcov.info
      },
      your_target: {
          files: {
              src: 'tmp/lcov.info'  // when using a specific target, location of your source lcov.info
          }
      }
  }
});
```

### Usage Examples

#### Basic Usage

You just need to provide a location of a `lcov.info` and it will then be analysed and rewritten by the plugin, so basic usage would look something like this:

```js
grunt.initConfig({
    cover_ts: {
        files: {
            src: 'lcov.info'
        }
    }
});
```

If you are then submitting your coverage information somewhere, just ensure that this task occurs after your coverage information is produced and before submission to the remote host.

If you omit a `dest` property, the task will assume you want to overwrite the original source.  While the grunt task interface allows for multiple source file mappings to a single destination, that doesn't make a lot of sense with a `lcov.info`, but if there are multiple source files the task will simply concatenate these together into a single file.
