Full Code of mojotech/pioneer for AI

master 2d3ade85e18e cached
69 files
393.2 KB
136.3k tokens
1 requests
Download .txt
Showing preview only (415K chars total). Download the full file or copy to clipboard to get everything.
Repository: mojotech/pioneer
Branch: master
Commit: 2d3ade85e18e
Files: 69
Total size: 393.2 KB

Directory structure:
gitextract_tafrd78b/

├── .gitignore
├── .npmignore
├── .travis.yml
├── ACKNOWLEDGEMENTS.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── bin/
│   └── pioneer
├── changelog.md
├── coverage.sh
├── docs/
│   ├── command_line.md
│   ├── config_file.md
│   ├── form.md
│   ├── getting_started.md
│   ├── globals.md
│   ├── list.md
│   ├── step_helpers.md
│   └── widget.md
├── gulpfile.js
├── mergelcov.sh
├── npm-shrinkwrap.json
├── package.json
├── pioneer.json
├── src/
│   ├── config_builder.coffee
│   ├── environment.coffee
│   ├── errorformat.coffee
│   ├── pioneer.coffee
│   ├── pioneerformat.js
│   ├── pioneersummaryformat.js
│   ├── scaffold/
│   │   ├── example.json
│   │   ├── simple.js
│   │   └── simple.txt
│   ├── scaffold_builder.coffee
│   ├── support/
│   │   └── index.coffee
│   └── widgets/
│       ├── Widget.Form.coffee
│       ├── Widget.Iframe.coffee
│       ├── Widget.List.coffee
│       ├── Widget.coffee
│       └── build/
│           └── widgets.coffee
└── test/
    ├── integration/
    │   ├── features/
    │   │   ├── findwidget.feature
    │   │   ├── form.feature
    │   │   ├── list.feature
    │   │   ├── pending.feature
    │   │   ├── readwidget.feature
    │   │   ├── shorthand.feature
    │   │   ├── simple.feature
    │   │   └── widget.feature
    │   ├── fixtures/
    │   │   ├── form.html
    │   │   ├── list.html
    │   │   ├── marionette.html
    │   │   └── sample.html
    │   ├── steps/
    │   │   ├── find_steps.coffee
    │   │   ├── form_steps.coffee
    │   │   ├── helper_steps.coffee
    │   │   ├── list_steps.coffee
    │   │   ├── read_steps.coffee
    │   │   ├── shorthand.coffee
    │   │   ├── steps.coffee
    │   │   ├── util.coffee
    │   │   └── widget_steps.coffee
    │   └── widgets/
    │       ├── div.coffee
    │       ├── form.coffee
    │       ├── list.coffee
    │       └── list_item.coffee
    ├── mocha.opts
    └── unit/
        ├── bin.coffee
        ├── config.coffee
        ├── scaffold.coffee
        └── widget.coffee

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz

pids
logs
results

npm-debug.log
node_modules
coverage

.DS_Store

lib/
src/pioneer.js
src/environment.js


================================================
FILE: .npmignore
================================================
test/
.pioneer.json


================================================
FILE: .travis.yml
================================================
language: node_js

before_script:
  - npm run-script build
  - sudo apt-get install -y lcov

node_js:
  - "10.15"

script:
  - npm test
  - npm run-script integration

after_script:
  - npm run coverage


================================================
FILE: ACKNOWLEDGEMENTS.md
================================================
# Inspiration

* Pioneer was originally inspired by [Dill](http://github.com/mojotech/dill), a Ruby
  take on  the [PageObject](http://martinfowler.com/bliki/PageObject.html) pattern.
  Dill  was created by [@david](http://github.com/david), with
  contributions from  the rest of the [Mojo Tech](http://www.mojotech.com) team!


================================================
FILE: CONTRIBUTING.md
================================================
Contributing
=====

* How things fit together[#thepieces]

* Install [nodejs](http://nodejs.org)

* Building
  * `$ npm install`.
  * `$ npm run-script build` to build the coffee-script.
  * `$ gulp watch` will automatically rebuild the files when source code changes

* Testing
  * `$ npm run-script integration` to run the integration test suite
  * `$ npm test` to run the unit tests

* Utility
  * `$ npm run-script pub` to release a new version.
  * `$ npm run-script clean` to remove the build coffee-script files.



## The Pieces

Development on Pioneer is quite simple and only requires a few steps to get up and going (after you know how the pieces fit together).

<img src="http://i.imgur.com/vS0Zexq.png" width="424px"/>

Pioneer can be quickly understood using this image as a reference.
Pioneer stresses a decoupling of testing components, to enable a developer to quickly change and iterate on their tests.
The highest level component is a `.feature` file. It is in this file that a developer defines (*from the users perspective*) how the webpage should work.

```cucumber
Scenario: Searching for dogs
  When I view google.com
  And I search for "dogs"
  Then I should see 100 results
```

The feature file is read by [cucumber.js](https://github.com/cucumber/cucumber-js) and then looks for matching step definitions to perform the actual assertion and interaction with the webpage.

```js
  this.When(/^I view google.com"$/, function() {
    return this.driver.get("http://google.com")
  });
```

It is from within the step definitions that widgets are created. Widgets are an abstraction layer between the raw [webElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html) and your `click` or interations.
This abstraction makes refactoring your application code and test code painless, since instead of having to redefine multiple selectors you only have to change one.
If you are familiar with a `backbone.view` a Widget should feel quite similar.

```js
  var MyWidget = Widget.extend({
    root: "div.wow",
    getName: function() {
      return this.read(".name");
    }
  })

  (new MyWidget()).getName().then(function(name) {
    expect(name).to.eql("Sam Jones");
  });
```


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2013 MojoTech

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
**This project is no longer actively maintained. If you'd like to help out, get in touch!**

<h1 align="center">Pioneer</h1>

<p align="center">
<img height="200px" width="200px" src="logo.png"/>
</p>
<p align="center">
  <a title='Build Status' href="https://travis-ci.org/mojotech/pioneer">
    <img src='http://img.shields.io/travis/mojotech/pioneer.svg?style=flat-square' />
  </a>
  <a href='https://gitter.im/mojotech/pioneer'>
    <img src='http://img.shields.io/badge/gitter-chat-blue.svg?style=flat-square' alt='Chat' />
  </a>
  <a href='https://coveralls.io/r/mojotech/pioneer'>
    <img src='http://img.shields.io/coveralls/mojotech/pioneer.svg?style=flat-square' />
  </a>
</p>

<h3 align="center"> Integration tests made easy. </h3>

Pioneer provides an abstraction layer between your integration tests and your DOM markup, DRYing up your step definitions and consolidating how people interact with the DOM in tests.

# Installing

    npm install pioneer --save-dev

# Get Started

### [Read the guide](docs/getting_started.md)

### [Watch the video](https://www.youtube.com/watch?v=ZRYcTzgtQRI)

# Docs

* [Global Variables](docs/globals.md)
* [Widget](docs/widget.md)
* [Widget.List](docs/list.md)
* [Widget.Form](docs/form.md)
* [Step Helpers](docs/step_helpers.md)
* [Command Line Options](docs/command_line.md)
* [Configuration File](docs/config_file.md)


================================================
FILE: bin/pioneer
================================================
#!/usr/bin/env node

var path        = require('path');
var fs          = require('fs');
var minimist    = require('minimist');
var lib         = path.join(path.dirname(fs.realpathSync(__filename)), path.join('../', 'lib'));
var Pioneer     = require(lib + path.join('/', 'pioneer'));
var pkg         = require('../package.json');

var checkForUpdates = process.argv.indexOf("--noUpdates") === -1

if (checkForUpdates) {
  var updateNotifier = require('update-notifier');
  var notifier = updateNotifier({pkg: pkg});

  if (notifier.update) {
      notifier.notify();
  }
}

global.ARGV = Array.prototype.slice.call(process.argv);
var options = minimist(process.argv.slice(2));

new Pioneer(lib, options);


================================================
FILE: changelog.md
================================================
### v0.11.6 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.5...v0.11.6)

* Fix release issue

### v0.11.5 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.4...v0.11.5)

#### Updates

* Update selenium-webdriver to 2.46.1

### v0.11.4 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.3...v0.11.4)

#### Updates

* Update selenium-webdriver to 2.45.1

#### Fixes

* Add shrinkwrap to lock dependencies.

### v0.11.3 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.2...v0.11.3)

#### Fixes

* Fixed a bug where it was impossible to pass multiple feature arguments via the command line.

### v0.11.2 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.1...v0.11.2)

#### Updates

* Users can now opt out of notifications.
* Allow for users to override the driver build phase. This allows users to use tools like sauce labs and other hosted selenium services.
* Minor Doc uodates

### v0.11.1 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.1...v0.11.1)

#### Updates

* Update selenium-webdriver version to use the latest and greatest version.

### v0.11.0 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.5...v0.11.0)

#### Features

* `Driver` is now exposed on the world.

* `getItemClass` is now available to lookup a `itemClass` at instantiation time of a List.

*  Finding by text now respects the internal global.timeout instead of failing right away.

* Test runs now have a clean output options (omitting message about the configPath)

* Enable the ability to toggle the visibility of the extra test run output, such as duration.

#### Fixes

* Update chai version to fix peer dependency issue
* Update todo mvc test link
* Doc consistency fixes

### v0.10.5 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.4...v0.10.5)

#### Fixes

* Pioneer bin file is now hardened for windows environments.

### v0.10.4 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.3...v0.10.4)

#### Features

Allow pioneer to be run with command line args alone.

`pioneer features --require=steps --require=widgets` now will work.

### v0.10.3 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.2...v0.10.3)

#### Features

* You are now able to mark steps as `pending` using the `this.Pending()` syntax.

#### Windows Support

* Pioneer, now works under windows.

### v0.10.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.1...v0.10.2)

#### Widget.list

* The list widget now has a has a `length` method to enable simple assertions about the number of child items.

#### Cleanups

* Fix broken links and typos across repo.

### v0.10.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.0...v0.10.1)

#### Fixes

* Fix broken `findAll` list el instantiation.

### v0.10.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.9.0...v0.10.0)

#### Breaking Changes

* `findAll` allows you to find a list of matching elements on a page. It returns a promise that resolves with a new [Widget List](docs/list.md) with the same root as the widget that invoked `findAll`. The `itemSelector` of the new `Widget.List` will be the selector argument passed.

* `submitSelector` no longer takes a node input. If you would like to use a submit selector other than `[type="submit"]` then you can override the `submitSelector` method

#### Widget.Form

* `readAll` now calls `getValue` on each field as opposed to `read`

### v0.9.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.2...v0.9.0)

#### Breaking Changes

* Widget `fill` method now clears the element before sending the value
* Pioneer no longer looks for a `.pioneer.json` file to read configuration options from. Instead it will look for a `pioneer.json` file.

#### Widget

###### Helpers

* `hasClass` will test the existence of the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve with `true` or `false`.

* `sendKeys` now supports hash style arguments, including an optional selector.

* `clear` calls the webdriver [clear](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html) method. It takes a hash that supports an optional selector to scope the `clear` operation. If only a string is passed to clear, and not an object then it will use it as a selector for the `find` operation. It returns a promise that resolves with a widget.

```js
new this.Widget({
  root: “.some-div”
}).sendKeys({
  selector: “input”,
  keys: [
    "wow",
    Driver.Key.SPACE,
    "pioneer",
    Driver.Key.ENTER
  ]
})
```

###### Static Methods

* Static methods can be used for situations where you do not want to declare a new Widget to do something.
* Static methods introduced for the following widget helpers:
  - click
  - fill
  - hover
  - doubleClick
  - read
  - isPresent
  - isVisible
  - getAttribute
  - getValue
  - getText
  - getInnerHTML
  - getOuterHTML
  - hasClass
  - sendKeys
  - clear


#### Command Line Flags

* Version: `--version` or `-v` may now be passed to display the current version of Pioneer

#### Driver

* `driver.visit` aliased to `driver.get`

#### Format

* pioneer format no longer displays the filename and line number of each scenario and step. Instead it will display the feature file at the beginning of each feature

### v0.8.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.1...v0.8.2)

#### Fixes

* Fix incorrect exit code on failure

### v0.8.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.0...v0.8.1)

#### Fixes

* Fix bug where `isPresent` would fail when the widget was constructed via an `el` based constructor.

* Fix broken multi-tag formatter.

#### New

* Added a global `timeout` to adjust how long a step will wait before failing.

* Added a new gloabl `ARGV` to give you access to the raw `process.argv` passed into the process.

### v0.8.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.2...v0.8.0)

#### Breaking Changes
* Removed global variables (`$`, `Driver`, ` _`,  `argv`)

* `read` no longer supports multiple arguments. Changed to hash-style arguments
* `findByText` removed. To find by text use the optional “text” key on the `find` method
* `fill` no longer supports multiple arguments. Changed to hash-style arguments
* `getValue` no longer supports multiple arguments. Changed to hash-style arguments

* `clickAt` no longer supports multiple arguments. Changed to hash-style arguments
* `readAt` no longer supports multiple arguments. Changed to hash-style arguments

###### Widget

* New shorthand declaration via `this.W` from `this.Widget`
* Methods now support hash-style arguments for instance…..

```js
return new this.Widget({
  root: “div”
})
.fill({
  selector: “input”,
  value: [“Pioneer” Driver.Key.SPACE, “is”, Driver.Key.SPACE, “awesome!”]
});
```

#### Helpers

* `addClass`, `removeClass`, `toggleClass` now accepts an optional selector to allow scoping within the widget
* `getAttribute` - now accepts an optional selector to allow scoping within the widget
* `isVisible` - will first check to see if an element is present and return false if it is not.
* `hover` - the `Hover` method on a widget takes the same params as find to locate the DOM node to be hovered. It returns a promise that is resolved with the widget after the mouse has been moved over the target element. If you do not pass anything to hover it will hover over the widgets root node.
* `doubleClick` - the `doubleClick` method on a widget takes the same params as [find](#find) to locate the DOM node to be doubleClicked. It returns a promise that is resolved with the widget after the mouse has been doubleClicked on the target element. If you do not pass anything to doubleClick it will double click the root node of the widget.

#### Widget.Fields
Fields Is now removed as being a base class. Its methods have been moved within `Widget.Form`

#### Widget.List

*  `select` can be used to select an option from a dropdown menu. It takes a hash with an optional `<selector>` in which you can specifiy either `<text>` or `<value>` to select by. Specifiying both text and a value will result in an error. It returns a promise that will resolve with null.

<needs a code example>
```html
<div class="form2">
  <select>
    <option value="one">Option Number 1</option>
    <option value="two">Option Number 2</option>
    <option value="three">Option Number 3</option>
  </select>
</div>
```

```js
return new this.Widget.Form({
  root: "form2"
})
.select({
  selector: "select",
  value: "three"
})

//Resulting in the selection of the option with a value of "three".
```

* `invoke` - arguments to pass to the invoking method can now be passed using an object


#### Scaffolding

Pioneer can generate a scaffold for you to build your suite on via the newly added`--scaffold` command line flag.

Scaffold generates a tests/ directory, with features/, steps/ and widgets/. It creates simple.feature and simple.js files that include your first Pioneer test! It also creates a .pioneer.json file in your current working directory.

The option to generate a scaffold is also presented if Pioneer is called without specifying a feature file.

#### Configuration

* Pioneer no longer has a default configuration. A similar goal can be accomplished via a `.pioneer.json` within the directory that you run your tests from.

### v0.7.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.1...v0.7.2)

#### Fixes

* Move bluebird dep out of dev dependencies.

### v0.7.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.0...v0.7.1)

#### Fixes

* Fix issue with output formatter path lookup.

### v0.7.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.6.3...v0.7.0)

#### Widget

##### Accessors

* getValue - The `getValue` method lets you get the current value of a given input node. It returns a promise that resolves with the value of the node.

* read - No longer to be used with input fields (was extracted to `getValue`)

* getInnerHTML - Returns a promise that resolves with the innerHTML of the selector element.

* getOuterHTML - Returns a promise that resolves with  the outerHTML of the selector element.

##### Helpers

* addClass
* removeClass
* toggleClass

#### Widget.List

##### Helpers

* clickAt - `clickAt` is a combination of the at method that allows clicking on a certain index of list. The optional `<selector>` parameter allows for scoping within index. It returns a promise that is resolved when the index has been clicked.

* readAt - `readAt` is a combination of the at method and the read method and allows for scoping within an el at the given index. The optional `<selector>` parameter allows for scoping within index. There is also an optional transformer argument that mirrors the default read implementation. Read at
returns a promise that resolves with the value of read

* each - Returns a promise that resolves with the list items after each item in the list has been iterated over. The iterator method receives two arguments, the widget instance and the index of the item being iterated over.

* invoke - Returns a promise that resolves when the specified method has been invoked on all children.

#### Docs

* Added missing documentation for forms and fields

#### Configuration

Configuring pioneer options can now be done using a JSON file. If no configuration path is passed in using `--configPath=`, then pioneer uses the [default configuration settings](https://github.com/mojotech/pioneer/blob/master/docs/config_file.md#default-configuration).

Pioneer will also look for a .pioneer.json file in the directory that you invoke the command from.

The `--prevent-browser-reload` flag is no longer valid, it has been changed to `--preventReload=true`. From configuration it can be specified as { “preventReload”: true }

#### Cleanup

* Remove Pioneer.Iframe from core - https://github.com/mojotech/pioneer.iframe
* Remove Pioneer.View from core - https://github.com/mojotech/pioneer.marionette
* Integration features/steps separated out to several files

#### Formatting

Pioneer now has its own format type that is uses by default. This formatter changed the way in which the test summary is displayed. Failing steps will now be accompanied by the feature file and line number that they correspond with.


### v0.6.3[view commit logs](https://github.com/mojotech/pioneer/compare/v0.6.2...v0.6.3)

  * Fixes

    * Fix broken bin path

### v0.6.2[view commit logs](https://github.com/mojotech/dill.js/compare/v0.6.1...v0.6.2)

  * Features
    * Add proxy `getInnerHTML` on the widget class.
    * Add proxy `getOuterHTML` on the widget class.

  * Fixes
      * Fix broken `at` selector for lists.


### v0.6.1[view commit logs](https://github.com/mojotech/dill.js/compare/v0.6.0...v0.6.1)

  * Fixes
      * fix xpath `findByText` relative selector bug.

### v0.6.0[view commit logs](https://github.com/mojotech/dill.js/compare/v0.5.0...v0.6.0)

  * Features
    * Forms now default to `form` for their root selector.
    * `getText` is now available on Widgets.
    * `sendKeys` is now available on Widgets.
    * The `fill` method now takes one or two arguments. When only passed a single argument will default to filling the widgets root node with the passed argument.

  * Refactors
    * Invoke cucumber programatically vs via an exec.
    * General Doc improvements

### v0.5.0[view commit logs](https://github.com/mojotech/dill.js/compare/v0.4.1...v0.5.0)

  * Features
    * `isVisible` is now available on a widget.
    * `findByText` is now available on a widget to enable you to lookup children of a widget based on arbitrary text content.
    * `getAttribute` is now available on a widget, for reading a single attribute of a node.
    * `findWhere` is now available on a `Dill.List` widget for finding a single `webElement` based on a filter method.
    * `Iframe` Widget was added for interacting with iframes and switching focus in and out of them.
    * You can now disable the reloading of the browser instance between tests via the `--prevent-browser-reload` CLI flag.
    * Error stacktraces are now limited to 5 lines.
    * A `freeze` utility method and step definition were added for aiding debugging. The freeze method prevents the steps from continuing until the user presses a key in the terminal.

  * Fixes
    * Widget.list children lookup no longer uses the broken `nth` child based selector.

### v0.4.1[view commit logs](https://github.com/mojotech/dill.js/compare/v0.4.0...v0.4.1)

  * Features
    * `isPresent` takes an optional CSS selector to further scope the lookup.
    * `Read` takes an additional transformer method to mutate the read result.

  * Selenium WebDriver
    * Bump version to fix two bugs introduced in ChromeDriver
      * FIXED: 7300: Connect to ChromeDriver using the loopback address since
      * FIXED: 7465: Fixed `net.getLoopbackAddress` on Windows

### v0.4.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.3.0...v0.4.0)

  * Widget
    * Add `getHtml` method.
    * Add a `find` based constructor to widgets that return a promise and resolves as a new widget with a pre found `webElement` instance under the `el` property. Thus preventing you from having to do a `find` to interact with the widgets DOM.

  * Widget.List
    * Add `map` method to list to interact with each item.
    * Add `filter` method to reduce items by a filter method.
    * Add `at` method to get an item at a given index.

  * Widget.View
    * Add a new widget type that integrates in with `Marionette` Views.

  * Tests
    * Add integration test coverage for dill.js.

  * General
    * Split widget files into seperate files.

### v0.3.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.2.0...v0.3.0)

* Fixes
  * Remove the automatic inclusion of the features directory. This was forcing projects to always have a feature directory relative to where the tests were run from.

### v0.2.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.1.1...v0.2.0)

* Fixes
  * Extend syntax now correctly sets instance properties. This is a breaking change if you were unknowingly depending on the broken functionality.

* Features
  * Tests now display total runtime after running.

### v0.1.1 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.1.0...v0.1.1)

* Features
  * You can now specify which driver dill.js uses when running tests via the --driver command line flag.


================================================
FILE: coverage.sh
================================================
#!/bin/bash
./mergelcov.sh ./coverage | ./node_modules/.bin/coveralls


================================================
FILE: docs/command_line.md
================================================
Command Line Options
====================

## Table of Contents
* [Driver Configuration](#driver-configuration)
* [Error Formatting](#error-formatting)
* [Tags](#tags)
* [Prevent Browser Reload](#prevent-browser-reload)
* [CoffeeScript Step Scaffold](#coffeescript-step-scaffold)
* [Configuration File Path](#configuration-file-path)
* [Scaffold Creation](#scaffold-creation)
* [Version](#version)

## Driver Configuration
You can customize which driver your tests use via the `--driver` command line flag. The default driver is chrome.
For example:
* --driver=phantomjs
* --driver=firefox

## Error Formatting
You can customize the format in which your errors are formatted via the `--error_formatter` command line flag. The default format is five lines of the stack trace with a blue first line. To customize the formatter see below

my_formatter.js should export a method like the following

```js
module.exports = function(err) {
  console.log("my custom error formatter", err.stack);
}
```

## Tags
To only run selected features include `--tags=@myTag` and insert @myTag directly before the intended feature(s).

## Prevent Browser Reload
To speed up testing, an optional `--preventReload` flag can be passed to prevent the web driver from restarting after each feature:
  ```bash
  ./node_modules/.bin/pioneer --preventReload=true
  ```

## CoffeeScript Step Scaffold
To have cucumber generate the step scaffold automatically in CoffeeScript, use the optional `--coffee` line flag.
```bash
./node_modules/.bin/pioneer --coffee
```

## Configuration File Path
Pioneer configuration options can be declared in the form of a JSON file. To declare the path to this file use the optional `--configPath=` flag. Addtional information on the format of this file can be found [here](config_file.md)
```bash
./node_modules/.bin/pioneer --configPath=myConfig.json
```

## Scaffold Creation
Pioneer can generate a scaffold for your first tests automatically using the optional `--scaffold` command line flag. This generates a tests/ directory, with features/, steps/ and widgets/. It creates simple.feature and simple.js files that include your first Pioneer test! It also creates a `pioneer.json` file in your current working directory. This config file automatically includes the created feature files, and the following information:
```json
{
  "feature": "tests/features",
  "require": [
    "tests/steps",
    "tests/widgets"
  ],
  "format": "pioneerformat.js",
  "driver": "chrome",
  "error_formatter": "errorformat.js",
  "preventReload": false,
  "coffee": false
}
```

## Verbosity
You can show some extra information about the test run by setting the `--verbose` flag. This can be used to override the value in the config file. You will need to use `--verbose=false` to turn off verbosity that has been set in the config file.

## Version

You can display the current version of Pioneer that you are using by passing the optional `--version` or `-v` command line flag.


================================================
FILE: docs/config_file.md
================================================
Configuration File
==================

## Table of Contents
* [Default Configuration](#default-configuration)
* [Driver Configuration](#driver-configuration)
* [Error Formatting](#error-formatting)
* [Tags](#tags)
* [Prevent Browser Reload](#prevent-browser-reload)
* [CoffeeScript Step Scaffold](#coffeescript-step-scaffold)
* [Update Notifications](#update-notifications)

## Default Configuration
If no configuration path is passed in using [--configPath=](command_line.md#configuration-file-path), then pioneer will check to see if the file `pioneer.json` exists in the current working directory.

## Driver Configuration

```json
{
  "driver": "firefox"
}
```

http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_Capabilities.html

## Error Formatting

```json
{
  "error_formatter": "myDirectory/my_error_formatter.js"
}
```

## Tags
To specify multiple tags, use an array.

```json
{
  "tags": "@myTag"
}
```
```json
{
  "tags": ["@myTag", "@thatTag", "@goodTag"]
}
```

## Prevent Browser Reload

If `preventReload` is not declared, then it will default to false.

```json
{
  "preventReload": true
}
```

## CoffeeScript Step Scaffold

If `coffee` is not declared, then it will default to false.

```json
{
  "coffee": true
}
```

## Verbosity

If `verbose` is set to true, it will show some extra information about the test run. If it is not declared, then it will default to false.

Note: this value can be overridden by the `--verbose` flag on the command line.

## Update Notifications

By default Pioneer will check to see if there are updates available. If they are, it will print a message to stdout. To disable this behavior you can pass the `--noUpdates` option when invoking the Pioneer binary.


================================================
FILE: docs/form.md
================================================
Widget.Form
=================

## Table of contents
  * [Api](#api)
    * [submitSelector](#submitselector)
    * [submitForm](#submitform)
    * [submitWith](#submitwith)
    * [select](#select)
    * [fillAll](#fillall)
    * [readAll](#readall)

## submitSelector

`submitSelector` finds and returns an element of type `submit`. It can be overridden to find select another element for the target of [submitForm](#submitform)

```js
var F = this.Widget.Form.extend({
  root: "#my-form",
  submitSelector: function(){
    return this.find("button.mySubmit")
  }
})
```

## submitForm

`submitForm` will find the submit selector and then call [click](widget.md#click)

## submitWith

`submitWith` will call [fillAll](#fillall) on each of keys value pairs passed into method, and then call the `click` method on the return of the `submitSelector` method.

```js
var F = this.Widget.Form.extend({
  root: "#waiver",
})

var waiver = new F;
waiver.submitWith({name: "Joe Doe", address: "55 Main St", reason: "N/A"});
```

## select

`function select({text: <text>, value: <value>})`

`select` takes a hash in which you can specifiy either `<text>` or `<value>` to select by. Specifiying both text and a value will result in an error. Alternately, you can also just pass a single string value and it will be the same as passing in the `<text>` hash option.  `select` returns a promise that will resolve with null.

```html
<div class="form2">
  <select>
    <option value="one">Option Number 1</option>
    <option value="two">Option Number 2</option>
    <option value="three">Option Number 3</option>
  </select>
</div>
```
```js
return new this.Widget.Form({
  root: "form2"
})
.select({
  selector: "select",
  value: "three"
})
//Resulting in the selection of the option with a value of "three".

// Two-forms of selecting by text
return new this.Widget.Form({
  root: "form2"
})
.select("Option Number 3")
// The above is the shortform of the following
return new this.Widget.Form({
  root: "form2"
})
.select({text: "Option Number 3"})

```

## fillAll

`fillAll` will call the [fill](widget.md#fill) method on each of the the keys value pairs passed into the method.

```js
Widget.find({
  root: 'form'
}).then(function(widget) {
  widget.fillAll({
    field1: "myEmail@example.com"
  })
});
```

## readAll

`readAll` will map all fields and then [getValue](widget.md#getvalue) its value. It returns an object with each field name as a key and the value of that field.

```html
<form>
Field 1: <input type="text" name="field1" value="firstValue"><br>
Field 2: <input type="text" name="field2" value="secondValue"><br>
Field 3: <input type="text" name="field3" value="thirdValue"><br>
</form>
```
```js
Widget.find({
  root: 'form'
}).then(function(widget) {
  widget.readAll()
})
// Result: {field1: "firstValue", field2: "secondValue", field3: "thirdValue"}
```


================================================
FILE: docs/getting_started.md
================================================
# Getting Started

- Require Pioneer as a dependency (and install)

```bash
$ npm install pioneer --save
```

- Setup your testing directory

```bash
$ ./node_modules/.bin/pioneer --scaffold
```

- Run your first Pioneer test!

```bash
$ ./node_modules/.bin/pioneer
```

- Expanding on your tests


  Now that you've run your first test, you are ready to add another one.
  To add another feature to your test, add the following to the end of the `test/features/simple.feature`

```gherkin
Scenario: Completing a Todo
  When I enter "Learn Pioneer"
  And complete the first todo
  Then I should see that the first todo is completed
```

  This will create another test that enters a new todo, clicks complete and then tests to ensure that the first todo is completed.

  If you ran

```bash
$ ./node_modules/.bin/pioneer
```

  right now, you would notice that you did not define step definitions for the second and third step of the "Completing a Todo" scenario.

  Pioneer will catch these undefined steps, and automatically generate a suggestion for that step.

  In this case, pioneer would generate something that looks like this:

  You can implement step definitions for undefined steps with these snippets:

```js
this.When(/^complete the first todo$/, function() {
  // express the regexp above with the code you wish you had
});

this.Then(/^I should see that the first todo is completed$/, function() {
  // express the regexp above with the code you wish you had
});
```

  Instead of adding that suggestion, you should append `tests/steps/simple.js` with the following

```js
this.When(/^complete the first todo$/, function(){
  return new this.Widget.List({
    root: "#todo-list"
  })
  .clickAt({
    index: 0,
    selector: "input"
  })
});

this.Then(/^I should see that the first todo is completed$/, function() {
  return new this.Widget.List({
    root: "#todo-list"
  })
  .at(0).then(function(el){
    return el.hasClass("completed").should.eventually.be.true;
  });
});
```

  To explain what these steps are doing:
   - First we create a new widget around the element `#todo-list` and click on the input in the first `<li>`. This is how one completes a todo.
   - To ensure that the todo was completed, we then check the class on the first `<li>` element of `#todo-list` to make sure that the class "completed" was added.

- Making your tests more efficient


  And there you have it, you wrote your first test using Pioneer! Easy right? But believe it or not, creating your step definitions is even easier if you take advantage of abstracting your own custom Widgets.

  Now create the file `tests/widgets/my_widget.js` and append the following:

```js
module.exports = function(){
  this.Widgets = this.Widgets || {};

  this.Widgets.TodoList = this.Widget.List.extend({
    root: "#todo-list",

    complete: function (index) {
      return this.clickAt({
        selector: "input",
        index: index
      })
    },


    isCompleted: function(index) {
      return this.at(index).then(function(el){
        return el.hasClass("completed");
      });
    }
  })
}
```

  You have now extracted the complicated logic of checking list items out into a seperate file which can easily be reused. Now your step definitions can look list this

```js
this.When(/^complete the first todo$/, function(){
  return new this.Widgets.TodoList().complete(0)
});

this.Then(/^I should see that the first todo is completed$/, function() {
  return new this.Widgets.TodoList()
  .isCompleted(0).should.eventually.eql(true)
});
```


================================================
FILE: docs/globals.md
================================================
Globals
=======

## Table of Contents
* [ARGV](#argv)
* [timeout](#timeout)
* [Configuring the Driver](#driver-configuration)

## ARGV

`global.ARGV` is available for those wanting to be able to provide custom command line arguments. `ARGV` contains all command line arguments.

## timeout

`global.timeout` is available for those wanting to adjust the amount of time the driver waits to ensure an element.


## Driver Configuration

If you would like to customize how your selenium driver is built, Pioneer provides a userful method `ConfigureDriver` that you can override to have full control.

```js
module.exports = function() {
  this.ConfigureDriver = function(SeleniumDriver, argv) {
    return new SeleniumDriver.Builder().withCapabilities(SeleniumDriver.Capabilities['chrome']()).build()
  }
}
```

This method can be useful for setting up things like sauce labs. For a detailed walk through on setting up selenium for sauce labs refer to this [article](http://samsaccone.com/posts/testing-with-travis-and-sauce-labs.html).


================================================
FILE: docs/list.md
================================================
Widget.List
===========

`Widget.List` is a utility to make operating on a collection of similar items intuitive. `Widget.List` allows you to specify collection specific methods, as well as the base `Widget` class to use for each `Widget` in the list.

Take for instance the following markup:

```html
<ul>
  <li> one </li>
  <li> sunny </li>
  <li> day </li>
</ul>
```

This list of words can abstracted and interacted with via a `List` with ease. Here is a simple example of asserting the length of the list.

```js
  ListItems = Widget.List.extend({
    root: "ul",
    itemSelector: "li"
  })

  list = new ListItems;

  list.items().should.eventually.have.length(3);
```

## Table of contents
  * [Api](#api)
    * [itemSelector](#itemselector)
    * [itemClass](#itemclass)
    * [getItemClass](#getItemClass)
    * [items](#items)
    * [length](#length)
    * [filter](#filter)
    * [map](#map)
    * [each](#each)
    * [invoke](#invoke)
    * [at](#at)
    * [clickAt](#clickat)
    * [readAt](#readat)

# API

## itemSelector

The `CSS` selector that is used when finding a single `Widget` contained within the list. It defaults to `li` but can be overridden to any valid `CSS` selector.

## itemClass

The `Widget` to be instantiated and used when interacting with each item in the list. `itemClass` defaults to a generic `World.Widget` class.

## getItemClass

The value returned by this method is the ItemClass that will be instantiated and used when interacting with each item in the list. This method gives you the ability to return a Customized ItemClass for each el. By default `itemClass` is returned.

```js
var MyListWidget = Widget.List.extend({
  getItemClass: function () {
    return this.Driver.promise.fulfilled(this.itemClass);
  }
});
```

## items

`function items()...`

Returns a `Promise` that resolves to a list of `Widgets` present in the `DOM` at call time.

## length

`function length()...`

Returns a `Promise` that resolves to the length of the list.

```js
new ListItems().length().should.eventually.eql(5)
```

## filter

`function filter(<predicateMethod>(itemInstance))...`

Returns a `Promise` that resolves to a reduced list of `items` according to the filter method.

The `predicateMethod` can either return a flat value or a `Promise` that resolves to a truthy or falsy value.

Here is an example of filtering the list of items down to those ending in "y".

```js
new ListItems().filter(function(item) {
  return item.find().then(function(elm) {
    return elm.getText().then(function(text) {
      return text.match(/y$/)
    });
  }
  })
});
```

## map

```js
function map(function iterator(widgetInstance, index) {
  //...
})
```

Returns a `Promise` that resolves to a list of items transformed according to the iterator method.

The `iterator` can return a flat value or a `Promise`.

Here is an example of mapping a list of items down to their text content.

```js
new ListItems().map(function(item, index) {
  // First we must find the `item`
  // and then call `getText` on the raw
  // `webElement` to get their contents.
  return item.find()
  .then(function(elm) {
    return elm.getText();
  })
})
.then(function(text) {
  return text.should.eql(["one", "sunny", "day"]);
})
```

## each

```js
function each(function iterator(widgetInstance, index) {
//...
}
```

Returns a promise that resolves with the list items after each item in the list has been iterated over. The iterator method receives two arguments, the widget instance and the index of the item being iterated over.

```js
new ListItems().each(function(item, index) {
  return item.click('.close');
});
```

## invoke

`function invoke({method: (methodName or method), arguments:<[arguments]>})...`

Returns a promise that resolves when the specified method has been invoked on all children.
If you only pass a string (or method) to `invoke`, and not an object, then it will use the string (or method) as the method to apply on each child.

```js
new ListItems().invoke('click').then(function() {
//....
});
```

```js
new ListItems().invoke(this.Widget.prototype.click).then(function() {
//....
});
```

```js
new ListItems().invoke({
  method: "click",
  arguments: [{
    selector: "p"
  }]
}).then(function(){
  //...
})
```

## at

`function at(0-based-index)...`

Returns a promise that resolves with a child `Widget` instance at a given index.

```js
new ListItems().at(2).then(function(item) {});
```

## findWhere

`function findWhere(<predicateMethod>(itemInstance))...`

Returns a `Promise` that resolves to a raw `WebElement` which represents the first element in the collection's items array which passes the filter method.

The `predicateMethod` can either return a flat value or a `Promise` that resolves to a truthy or falsy value.

Here is an example of finding the first item in a list of items that ends in "y".

```js
new ListItems().findWhere(function(item) {
  return item.find().then(function(elm) {
    return elm.getText().then(function(text) {
      return text.match(/y$/);
    });
  })
});
```
## clickAt

`function clickAt({index: index, selector:<selector>})`

`clickAt` is a combination of the [at](#at) method and the [click](widget.md#click) method that allows clicking on a certain index of list.
`clickAt` takes a hash, with an optional `<selector>` parameter which allows for scoping within index. If only a number is passed and not an options hash it will default to using that as the at index lookup
It returns a promise that is resolved when the child at the index has been clicked.

```html
<ul>
<li>zero</li>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
```
```js
new this.Widget.List()
.clickAt(3)         //results in <li>three</li> being clicked
```

## readAt

`function readAt({index: index, selector: <selector>, transformer: <transformer>)`

`readAt` is a combination of the [at](#at) method and the [read](widget.md#read) method and allows for scoping within an el at the given index. The optional `<selector>` parameter allows for scoping within index. There is also an optional transformer argument that mirrors the default [read transformer](widget.md#read) implementation. Read at returns a promise that resolves with the value of read.
If only a number is passed and not an options hash it will default to using that as the at index lookup


```js
new this.Widget.List().readAt(1, 'p', function(val){
  return $.trim(val);
})
```


================================================
FILE: docs/step_helpers.md
================================================
Step Helpers
===========

## Table of contents
* [Freeze](#freeze)
* [Pending](#pending)

###Freeze

Causes process to wait for any key press from the user before proceeding. `@Freeze()` returns a promise that is resolved once the user presses a key.

Can be used from within a step definition with
```coffeescript
@Freeze().then -> ..........
```
Or it can be used via a feature file with
```gherkin
When I Freeze
```

###Pending

Allows you to mark a step as `pending` and not currently implemented. Simply call `@Pending()` from within a step.

```js
this.When(/^I execute a pending step$/, function() {
  this.Pending();
});
```

================================================
FILE: docs/widget.md
================================================
Widget
===========

`Widget` is the base class upon which your custom widgets should extend from. The `Widget` class provides you with several helpful utility methods that interact with your DOM in an asynchronous promised based manner.

A simple example of an extension would look like this.

```js
MarketFilters = Widget.extend({
  root: '.market-place-filters',
  setSearchText: function(val) {
    return this.fill(".market-text-search", val);
  }
});
```

All `Widgets` extend from seleniums [WebElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html)

## Table of contents

* [Api](#api)
  * [Constructing](#constructing)
    * [Finding](#finding)
    * [Extending](#extending)
    * [Overriding](#overriding)
    * [Shorthand](#shorthand)
  * [Root](#root)
  * [Static Methods](#static-methods)
    * [click](#static-click)
    * [fill](#static-fill)
    * [hover](#static-hover)
    * [doubleClick](#static-doubleclick)
    * [read](#static-read)
    * [isPresent](#static-ispresent)
    * [isVisible](#static-isvisible)
    * [getAttribute](#static-getattribute)
    * [getValue](#static-getvalue)
    * [getText](#static-gettext)
    * [getInnerHTML](#static-getinnerhtml)
    * [getOuterHTML](#static-getouterhtml)
    * [hasClass](#static-hasclass)
    * [sendKeys](#static-sendkeys)
    * [clear](#clear)
  * [Interacting with the DOM](#interacting-with-the-dom)
    * [click](#click)
    * [fill](#fill)
    * [hover](#hover)
    * [doubleClick](#doubleclick)
    * [sendKeys](#sendkeys)
    * [addClass](#addclass)
    * [removeClass](#removeclass)
    * [toggleClass](#toggleclass)
    * [clear](#clear)
  * [Querying the DOM](#querying-the-dom)
    * [read](#read)
    * [find](#find)
    * [findAll](#findall)
    * [isPresent](#ispresent)
    * [isVisible](#isvisible)
    * [getAttribute](#getattribute)
    * [getValue](#getvalue)
    * [getText](#gettext)
    * [getInnerHTML](#getinnerhtml)
    * [getOuterHTML](#getouterhtml)
    * [hasClass](#hasclass)


# API

## Constructing

There are several ways to create a new `Widget` depending on your needs.

### Finding

In most cases the find based factory is going to suit your needs.

`find` returns a promise-based interface that eventually resolves to a widget with the `el` property already set to a [WebElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html) instance. It takes a hash of attributes that will be extended onto your object.

```js
Widget.find({
  root: "#big-papa"
}).then(function(widget) {
  // widget.el
  // is the raw WebElement node already found
  // for your convinence.
});
```

### Extending

Extending is simple way to create a new `Class` based on the base `Widget` class via the `.extend` syntax. Extend will override any method or value set on the base `Widget` object.

Using the extend functionality is a handy way to abstract widget configuration across multiple files and methods into reusable widgets

```js
MyWidget = Widget.extend({
  root: ".biggie-biggie"
});

// Creating a new instance via new
myWidget = new MyWidget({optional: args});

// Creating a new instance via the find factory
MyWidget.find({optional: args}).then(function(widget) {
  myWidget = widget;
});
```

### Overriding

In any `Widgets` contructor you can override the default attributes set on said widget.

This is a handy paradigm to embrace when you have small one-off widgets that do not need custom logic but rather just a few small helper methods and/or properties.

```js
// Creating a new instance with overrides
myWidget = new this.Widget({optional: args});

// Creating a new instance via the find factory with overrides
Widget.find({optional: args}).then(function(widget) {
  myWidget = widget;
});
```

### Shorthand

A `Widget` can be expressed using the shorthand `W`

```js
myWidget = new W({optional: args})
```

## Root

`root` must be provided in your widget class definition. It scopes all of a widgets DOM lookups to this root element.

The widget's required `root` property allows you to provide a scope on the page with which you are interacting. All operations for your widget will happen within the scope of the element.
It is a common pattern to have multiple widgets represent different parts of the page you are testing (e.g. the login div, the nav div, the form). This allows your widgets to be very focused and succinct.

```js
var PuppySearch = Widget.extend({
  root: '.dog-search',
});
```

## Static Methods

Static methods can be used for situations where you do not want to declare a new Widget to do something. Static methods ALWAYS require selectors, otherwise Pioneer won't know what you want to operate on!

These methods allow you to do simple operations with less code.
For example:

```js
new this.Widget({
  root: "#that-button"
}).click()
```

can be simplified to:

```js
this.Widget.click({selector: "#that-button"})
```

### static click

Static implementation of [click](#click)

### static fill

Static implementation of [fill](#fill)

```js
this.W.fill({
  selector: ".field1",
  value: ["such good text", Driver.Key.ENTER]
})
```

### static hover

Static implementation of [hover](#hover)

```js
this.W.hover({
  selector: "#your-target"
})
```

### static doubleClick

Static implementation of [doubleClick](#doubleclick)

```js
this.W.doubleClick({
  selector: "#some-target"
})
```

### static read

Static implementation of [read](#read)

```js
this.W.read({
  selector: "p.third",
  transformer: function(text){
    text.toUpperCase()
  }
})
```

### static isPresent

Static implementation of [isPresent](#ispresent) not the element is present.

```js
this.W.isPresent({
  selector: "body"
})
```

### static isVisible

Static implementation of [isVisible](#isvisible) not the element is visible.

```js
this.W.isVisible({
  selector: ".hidden"
})
```

### static getAttribute

Static implementation of [getAttribute](#getattribute)

```js
this.W.getAttribute({
  selector: "img.thumb",
  attribute: "width"
})
```

### static getValue

Static implementation of [getValue](#getvalue)

```js
this.W.getValue({
  selector: ".field2"
})
```

### static getText

Static implementation of [getText](#gettext)

```js
this.W.getText({
  selector: "p.fifth"
})
```

### static getInnerHTML

Static implementation of [getInnerHTML](#getinnerhtml)

```js
this.W.getInnerHTML({
  selector: ".some-div"
})
```

### static getOuterHTML

Static implementation of [getOuterHTML](#getouterhtml)

```js
this.W.getOuterHTML({
  selector: "#container"
})
```

### static hasClass

Static implementation of [hasClass](#hasclass)

```js
this.W.hasClass({
  selector: "li.active",
  className: "inactive"
})
```

### static sendKeys

Static implementation of [sendKeys](#sendkeys)

```js
this.W.sendKeys({
  selector: ".username",
  keys: "pioneer_expert"
})
```

### static clear

Static implementation of [clear](#clear)

```js
this.W.clear({
  selector: ".password"
}).then(function(widget){
  ...
})
```

## Interacting with the DOM

### click

`function click({selector:<cssSelector>})...`

`click` simulates a user clicking on the DOM selector that is passed in as a parameter to the function. It returns a promise to let you know when the click has been successful or rejected.
If only a string is passed, and not an object, it will parse it as a selector.

```js
var PuppySearch = Widget.extend({
  root: '.dog-search',
  clickOnTheDog: function() {
    return this.click(".dog");
  }
});
```

### fill

`function fill({selector:<cssSelector>, value: valueToFillWith})...`

`fill` allows you you to simulate a user filling in an input with a given value. It returns a promise to let you know when the fill has been successful or rejected.
`fill` takes a hash of options including an optional selector, and a required value to send to the widget. If only an array is passed, it will fill the root with that array.

```js
var name = ['Jack ', 'the ', 'Ripper', Driver.Enter]
var PuppyNamer = Widget.extend({
  root: '.dog-namer',
  nameDog: function(name) {
    return this.fill({
      selector: ".dog-name",
      value: name
    });
  }
});
```
If only one argument is passed it will fill the root node with the value passed.

```js
var PuppyNamer = Widget.extend({
  root: '.puppy-namer',
  namePuppy: function(name) {
    return this.fill(name);
  }
});
```

### hover

`function hover({find options})...`

the `hover` method on a widget takes the same params as [find](#find) to locate the DOM node to be hovered. It returns a promise that is resolved with the widget after the mouse has been moved over the target element. If you do not pass anything to hover it will hover over the widgets root node.

```js
new this.Widget({
  root: "h4"
})
.hover().then(function(widget) {
  //...
})
```

### doubleclick

`function doubleClick({find options})...`

the `doubleClick` method on a widget takes the same params as [find](#find) to locate the DOM node to be doubleClicked. It returns a promise that is resolved with the widget after the mouse has been doubleClicked on the target element. If you do not pass anything to doubleClick it will double click the root node of the widget.

```js
new this.Widget({
  root: ".double"
})
.doubleClick().then(function(widget) {
  //...
})
```

### sendKeys

`function sendKeys(<valueToSend>,...)`

`sendKeys` simulates a user typing. Derived from the [Webdriver sendKey method](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/actionsequence.js.src.html). It accepts a hash with an optional selector to scope the `find` operation. It requires a `keys` value in the hash which should be an array of the keys to be sent to the element. These keys may include special keys such as Driver.Key.ENTER. A list of those special keys can be found at [Selenium WebDriver docs](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/key.js.src.html).

```js
var Driver = require('selenium-webdriver');

new this.Widget({
  root: ".some-div"
}).sendKeys({
  selector: "input",
  keys: [
    "wow",
    Driver.Key.SPACE,
    "pioneer",
    Driver.Key.ENTER
  ]
}).then(function(){
  ...
})
```

### addClass

`function addClass({className: name, selector: <selector>})`

`addClass` will add the provided class name to the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been added.

```js
var hidden = new Widget.extend({
  root: '.showing'
})
.addClass('hidden')
```

### removeClass

`function removeClass({className: name, selector: <selector>})`

`removeClass` will remove the provided class name from the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been removed.

### toggleClass

`function toggleClass({className: name, selector: <selector>})`

`toggleClass` will toggle the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been toggled.

### clear

`function clear({selector: <selector>})`

`clear` will call [clear](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1967) on the element. Takes a hash that supports an optional selector to scope the `clear` operation. If only a string is passed to clear, and not an object then it will use it as a selector for the `find` operation.
Returns a promise that resolves with the widget once the element has been cleared.

```js
new this.Widget({
  root: "#container"
}).clear({
  selector: "input"
}).then(function(widget){
  ...
});
```

## Querying the DOM

## read

`function read({selector: <selector>, transformer: <function>})`

`read` allows you to get the text of a given DOM node. `read` takes a hash of options: `<selector>` can scope the read, and `<transformer>` performs a transformation on the value/text. If you only pass a string to the method and not an object then it will use the string as the selector scope for the read operation.
It returns a promise that resolves with the result of the read or rejection.

```js
var PuppyDetails = Widget.extend({
  root: '.puppy-details',
  getName: function(name) {
    return this.read(".dog-name");
  }
});
var HorseDetails = Widget.extend({
  root: '.horse-details',
  getName: function(name) {
    return this.read({
      selector: ".pony-name",
      transformer: function(text){
        return text.toLowerCase()
      }
    });
  }
});
```

## find

`function find({selector: <selector>, text: <text>})...`

`find` allows you to find a (single) matching element on the page and grab the resulting DOM node. If a node is not found it will reject the returned promise value, otherwise the promise is resolved with the DOM node.
`find` takes in an optional hash, in which a selector key can be specified, or text can be specified to find the first matching child of the widget. `find` does not function properly when both options are passed.
If only a string is passed to the method then it will use that string for selector for the find operation.

```js
var PuppyDetails = Widget.extend({
  root: '.puppy-details',
  getInfo: function(name) {
    return this.find(".dog-info");
  }
});
var ReptileDetails = Widget.extend({
  root: '.reptile-details',
  getInfo: function(name) {
    return this.find({text: "lizards"});
  }
});
```

## findAll

`function findAll(cssSelector)...`

`findAll` allows you to find a list of matching elements on a page. It returns a promise that resolves with a new [Widget List]() with the same root as the widget that invoked `findAll`. The item selector of this new Widget List will be the cssSelector argument.


```js
var PuppyDetails = Widget.extend({
  root: '.puppy-details',
  getInfoItems: function(name) {
    return this.findAll("li.dog-info");
  }
});
PuppyDetails.getInfoItems().then(function(list){
  list.invoke(...)
})
```

## isPresent

`function isPresent(<selector>)...`

`isPresent` is a utility method to check to see if a given widgets `root` or `root` scoped selector is present on the page.
If the element is found then the promise is successfully resolved with true, otherwise it is resolved with false.

## isVisible

`function isVisible({selector: <selector>})...`

`isVisible` is a utility method to check to see if a given selector is currently visible on the page.
If the element is visible then the promise is resolved with true, otherwise it is resolved with false.
If only a string is passed to the method then it will use that string as a selector.

## getAttribute

`function getAttribute({selector: <selector>, attribute: attributeName})...`

The `getAttribute` method allows you to search an element for a particular attribute. It takes a hash with an optional selector key. If you only pass a string to the method and not an object then it will use the string as the attribute name. It returns a promise that will resolve with the attribute value if found, otherwise it will resolve with null.
For further reference visit http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1851

```html
<p><img class='nested' width='400px'>I am nested</span></p>
```
```js
var width = Widget.extend({
  root: 'p',
  getImgWidth: function(){
    return this.getAttribute({selector: ".nested", attribute:"width"})
  }
});
```

## getValue

`function getValue({selector: <selector>, transformer: <transformer>})...`

The `getValue` method lets you get the current value of a given input node. It returns a promise that resolves with the value of the node.

It takes an optional hash with a scoping selector, and/or a transformer. if only a string is passed to the method and not an object, it will use the string as the selector.

## getText

`function getText({selector: <selector>})...`

The `getText` method allows you to retrieve the text of a given element. It returns a promise that will resolve with the text if found, otherwise it will resolve with null.
`getText` takes an optional hash with a selector key.If only a string is passed to the method then it will use that string for selector for the find operation.

## getInnerHTML

`function getInnerHTML({selector: <selector>})`

The `getInnerHTML` method will retrieve the innerHTML of the selector element. It returns a promise. Proxied off of [innerHTML](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l2016).
If a string is passed to `getInnerHTML` it will parse it as a selector.

## getOuterHTML

`function getOuterHTML({selector: <selector>})`

The `getOuterHTML` method retrives the outerHTML of the selector element. It returns a promise. Proxied off of [outerHTML](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1997).
If a string is passed to `getOuterHTML` it will parse it as a selector.

### hasClass

`function hasClass({className: name, selector: <selector>})`

`hasClass` will test the existence of the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve with `true` or `false`.


================================================
FILE: gulpfile.js
================================================
var gulp    = require("gulp"),
    include = require('gulp-include'),
    coffee  = require('gulp-coffee');

gulp.task("default", function(done) {
    gulp.src([
      'src/widgets/build/widgets.coffee',
      'src/support/index.coffee'
    ])
    .pipe(include())
    .pipe(coffee())
    .pipe(gulp.dest("lib/support"))

    gulp.src([
      'src/pioneer.coffee',
      'src/environment.coffee',
      'src/errorformat.coffee',
      'src/custom_formatter.coffee',
      'src/config_builder.coffee',
      'src/scaffold_builder.coffee'
    ], { allowEmpty: true })
    .pipe(coffee())
    .pipe(gulp.dest("lib/"))

    gulp.src([
      'src/config.json',
      'src/pioneerformat.js',
      'src/pioneersummaryformat.js'
    ], { allowEmpty: true })
    .pipe(gulp.dest("lib/"))

    gulp.src([
      'src/scaffold/simple.txt',
      'src/scaffold/simple.js',
      'src/scaffold/example.json'
    ])
    .pipe(gulp.dest("lib/scaffold"))

    done()
});

gulp.task("watch", function() {
  gulp.watch('src/**/*', ['default'])
});


================================================
FILE: mergelcov.sh
================================================
#!/bin/bash
while read FILENAME; do
    LCOV_INPUT_FILES="$LCOV_INPUT_FILES -a \"$FILENAME\""
done < <( find $1 -name lcov.info )

eval lcov "${LCOV_INPUT_FILES}" -q


================================================
FILE: npm-shrinkwrap.json
================================================
{
  "name": "pioneer",
  "version": "0.11.7",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "Base64": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.1.4.tgz",
      "integrity": "sha1-6fbGvvVn/WNepBYqsU3TKedKpt4="
    },
    "abbrev": {
      "version": "1.0.9",
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
      "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU="
    },
    "ajv": {
      "version": "6.9.2",
      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz",
      "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==",
      "dev": true,
      "requires": {
        "fast-deep-equal": "^2.0.1",
        "fast-json-stable-stringify": "^2.0.0",
        "json-schema-traverse": "^0.4.1",
        "uri-js": "^4.2.2"
      }
    },
    "amdefine": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
    },
    "ansi-align": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
      "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
      "requires": {
        "string-width": "^2.0.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
        },
        "is-fullwidth-code-point": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
        },
        "string-width": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
          "requires": {
            "is-fullwidth-code-point": "^2.0.0",
            "strip-ansi": "^4.0.0"
          }
        },
        "strip-ansi": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
          "requires": {
            "ansi-regex": "^3.0.0"
          }
        }
      }
    },
    "ansi-colors": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
      "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
      "dev": true,
      "requires": {
        "ansi-wrap": "^0.1.0"
      }
    },
    "ansi-gray": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
      "dev": true,
      "requires": {
        "ansi-wrap": "0.1.0"
      }
    },
    "ansi-regex": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
      "dev": true
    },
    "ansi-styles": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
      "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
      "dev": true
    },
    "ansi-wrap": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
      "dev": true
    },
    "anymatch": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
      "dev": true,
      "requires": {
        "micromatch": "^3.1.4",
        "normalize-path": "^2.1.1"
      }
    },
    "append-buffer": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
      "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
      "dev": true,
      "requires": {
        "buffer-equal": "^1.0.0"
      }
    },
    "archy": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
      "dev": true
    },
    "argparse": {
      "version": "1.0.10",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
      "dev": true,
      "requires": {
        "sprintf-js": "~1.0.2"
      }
    },
    "arr-diff": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
      "dev": true
    },
    "arr-filter": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
      "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
      "dev": true,
      "requires": {
        "make-iterator": "^1.0.0"
      }
    },
    "arr-flatten": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
      "dev": true
    },
    "arr-map": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
      "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
      "dev": true,
      "requires": {
        "make-iterator": "^1.0.0"
      }
    },
    "arr-union": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
      "dev": true
    },
    "array-differ": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
      "dev": true
    },
    "array-each": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
      "dev": true
    },
    "array-find-index": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
      "dev": true
    },
    "array-initial": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
      "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
      "dev": true,
      "requires": {
        "array-slice": "^1.0.0",
        "is-number": "^4.0.0"
      },
      "dependencies": {
        "is-number": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
          "dev": true
        }
      }
    },
    "array-last": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
      "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
      "dev": true,
      "requires": {
        "is-number": "^4.0.0"
      },
      "dependencies": {
        "is-number": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
          "dev": true
        }
      }
    },
    "array-slice": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
      "dev": true
    },
    "array-sort": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
      "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
      "dev": true,
      "requires": {
        "default-compare": "^1.0.0",
        "get-value": "^2.0.6",
        "kind-of": "^5.0.2"
      },
      "dependencies": {
        "kind-of": {
          "version": "5.1.0",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
          "dev": true
        }
      }
    },
    "array-uniq": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
      "dev": true
    },
    "array-unique": {
      "version": "0.3.2",
      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
      "dev": true
    },
    "asn1": {
      "version": "0.2.4",
      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
      "dev": true,
      "requires": {
        "safer-buffer": "~2.1.0"
      }
    },
    "assert-plus": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
      "dev": true
    },
    "assign-symbols": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
      "dev": true
    },
    "async": {
      "version": "1.5.2",
      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
      "dev": true
    },
    "async-done": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz",
      "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==",
      "dev": true,
      "requires": {
        "end-of-stream": "^1.1.0",
        "once": "^1.3.2",
        "process-nextick-args": "^1.0.7",
        "stream-exhaust": "^1.0.1"
      }
    },
    "async-each": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
      "dev": true
    },
    "async-settle": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
      "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
      "dev": true,
      "requires": {
        "async-done": "^1.2.2"
      }
    },
    "asynckit": {
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
      "dev": true
    },
    "atob": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
      "dev": true
    },
    "aws-sign2": {
      "version": "0.7.0",
      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
      "dev": true
    },
    "aws4": {
      "version": "1.8.0",
      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
      "dev": true
    },
    "bach": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
      "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
      "dev": true,
      "requires": {
        "arr-filter": "^1.1.1",
        "arr-flatten": "^1.0.1",
        "arr-map": "^2.0.0",
        "array-each": "^1.0.0",
        "array-initial": "^1.0.0",
        "array-last": "^1.1.1",
        "async-done": "^1.2.2",
        "async-settle": "^1.0.0",
        "now-and-later": "^2.0.0"
      }
    },
    "balanced-match": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
      "dev": true
    },
    "base": {
      "version": "0.11.2",
      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
      "dev": true,
      "requires": {
        "cache-base": "^1.0.1",
        "class-utils": "^0.3.5",
        "component-emitter": "^1.2.1",
        "define-property": "^1.0.0",
        "isobject": "^3.0.1",
        "mixin-deep": "^1.2.0",
        "pascalcase": "^0.1.1"
      },
      "dependencies": {
        "define-property": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
          "dev": true,
          "requires": {
            "is-descriptor": "^1.0.0"
          }
        },
        "is-accessor-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-data-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-descriptor": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
          "dev": true,
          "requires": {
            "is-accessor-descriptor": "^1.0.0",
            "is-data-descriptor": "^1.0.0",
            "kind-of": "^6.0.2"
          }
        }
      }
    },
    "base64-js": {
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz",
      "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q="
    },
    "bcrypt-pbkdf": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
      "dev": true,
      "requires": {
        "tweetnacl": "^0.14.3"
      }
    },
    "beeper": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
      "dev": true
    },
    "binary-extensions": {
      "version": "1.13.0",
      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
      "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
      "dev": true
    },
    "bluebird": {
      "version": "1.2.4",
      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz",
      "integrity": "sha512-nI6OoUVWcq6gV6kmgdaXpOMfBJhL9iq/pns0ORINhX3f51L9P87F5uvh9luqZuswURSQaN3082OfpwSDwA1KBw=="
    },
    "bops": {
      "version": "0.0.6",
      "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz",
      "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=",
      "requires": {
        "base64-js": "0.0.2",
        "to-utf8": "0.0.1"
      }
    },
    "boxen": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
      "requires": {
        "ansi-align": "^2.0.0",
        "camelcase": "^4.0.0",
        "chalk": "^2.0.1",
        "cli-boxes": "^1.0.0",
        "string-width": "^2.0.0",
        "term-size": "^1.2.0",
        "widest-line": "^2.0.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
        },
        "ansi-styles": {
          "version": "3.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
          "requires": {
            "color-convert": "^1.9.0"
          }
        },
        "camelcase": {
          "version": "4.1.0",
          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
        },
        "chalk": {
          "version": "2.4.2",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
          "requires": {
            "ansi-styles": "^3.2.1",
            "escape-string-regexp": "^1.0.5",
            "supports-color": "^5.3.0"
          }
        },
        "has-flag": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
        },
        "is-fullwidth-code-point": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
        },
        "string-width": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
          "requires": {
            "is-fullwidth-code-point": "^2.0.0",
            "strip-ansi": "^4.0.0"
          }
        },
        "strip-ansi": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
          "requires": {
            "ansi-regex": "^3.0.0"
          }
        },
        "supports-color": {
          "version": "5.5.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
          "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
          "requires": {
            "has-flag": "^3.0.0"
          }
        }
      }
    },
    "brace-expansion": {
      "version": "1.1.11",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
      "dev": true,
      "requires": {
        "balanced-match": "^1.0.0",
        "concat-map": "0.0.1"
      }
    },
    "braces": {
      "version": "2.3.2",
      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
      "dev": true,
      "requires": {
        "arr-flatten": "^1.1.0",
        "array-unique": "^0.3.2",
        "extend-shallow": "^2.0.1",
        "fill-range": "^4.0.0",
        "isobject": "^3.0.1",
        "repeat-element": "^1.1.2",
        "snapdragon": "^0.8.1",
        "snapdragon-node": "^2.0.1",
        "split-string": "^3.0.2",
        "to-regex": "^3.0.1"
      },
      "dependencies": {
        "extend-shallow": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
          "dev": true,
          "requires": {
            "is-extendable": "^0.1.0"
          }
        }
      }
    },
    "browser-stdout": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
      "dev": true
    },
    "browserify": {
      "version": "1.15.5",
      "resolved": "https://registry.npmjs.org/browserify/-/browserify-1.15.5.tgz",
      "integrity": "sha1-K3GUlsztmGoplAgCvzrj+bIprdQ=",
      "requires": {
        "buffer-browserify": "~0.0.1",
        "coffee-script": "1.x.x",
        "commondir": "~0.0.1",
        "crypto-browserify": "~0",
        "deputy": "~0.0.3",
        "detective": "~0.2.0",
        "http-browserify": "~0.1.1",
        "nub": "~0.0.0",
        "optimist": "~0.3.4",
        "resolve": "~0.2.0",
        "syntax-error": "~0.0.0",
        "vm-browserify": "~0.0.0"
      },
      "dependencies": {
        "coffee-script": {
          "version": "1.12.7",
          "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
          "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw=="
        },
        "optimist": {
          "version": "0.3.7",
          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
          "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
          "requires": {
            "wordwrap": "~0.0.2"
          }
        },
        "resolve": {
          "version": "0.2.8",
          "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.2.8.tgz",
          "integrity": "sha1-/bF9SrsOyvb4DWesA88pAIj2wNA="
        },
        "wordwrap": {
          "version": "0.0.3",
          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
        }
      }
    },
    "buffer-browserify": {
      "version": "0.0.5",
      "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.0.5.tgz",
      "integrity": "sha1-iqaGMciogpxqTufvmjrH8sMemD4=",
      "requires": {
        "base64-js": "0.0.2"
      }
    },
    "buffer-equal": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
      "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
      "dev": true
    },
    "buffer-from": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
      "dev": true
    },
    "cache-base": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
      "dev": true,
      "requires": {
        "collection-visit": "^1.0.0",
        "component-emitter": "^1.2.1",
        "get-value": "^2.0.6",
        "has-value": "^1.0.0",
        "isobject": "^3.0.1",
        "set-value": "^2.0.0",
        "to-object-path": "^0.3.0",
        "union-value": "^1.0.0",
        "unset-value": "^1.0.0"
      }
    },
    "camelcase": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
      "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
      "dev": true
    },
    "camelcase-keys": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
      "dev": true,
      "requires": {
        "camelcase": "^2.0.0",
        "map-obj": "^1.0.0"
      },
      "dependencies": {
        "camelcase": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
          "dev": true
        }
      }
    },
    "capture-stack-trace": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw=="
    },
    "caseless": {
      "version": "0.12.0",
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
      "dev": true
    },
    "chai": {
      "version": "1.9.2",
      "resolved": "https://registry.npmjs.org/chai/-/chai-1.9.2.tgz",
      "integrity": "sha512-olRoaitftnzWHFEAza6MXR4w+FfZrOVyV7r7U/Z8ObJefCgL8IuWkAuASJjSXrpP9wvgoL8+1dB9RbMLc2FkNg==",
      "requires": {
        "assertion-error": "1.0.0",
        "deep-eql": "0.1.3"
      },
      "dependencies": {
        "assertion-error": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz",
          "integrity": "sha512-g/gZV+G476cnmtYI+Ko9d5khxSoCSoom/EaNmmCfwpOvBXEJ18qwFrxfP1/CsIqk2no1sAKKwxndV0tP7ROOFQ=="
        },
        "deep-eql": {
          "version": "0.1.3",
          "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
          "integrity": "sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==",
          "requires": {
            "type-detect": "0.1.1"
          },
          "dependencies": {
            "type-detect": {
              "version": "0.1.1",
              "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
              "integrity": "sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA=="
            }
          }
        }
      }
    },
    "chai-as-promised": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-4.1.0.tgz",
      "integrity": "sha512-ZXqEeAUKpOZyWI4FQ7P9YcZ9KBgWpcd2oLNPG1XTGsUaZzMQjKetROC7+uK59clAFGUK8cZR+r2LtsLfp7zeQg=="
    },
    "chalk": {
      "version": "0.5.1",
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
      "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
      "dev": true,
      "requires": {
        "ansi-styles": "^1.1.0",
        "escape-string-regexp": "^1.0.0",
        "has-ansi": "^0.1.0",
        "strip-ansi": "^0.3.0",
        "supports-color": "^0.2.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "0.2.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
          "dev": true
        },
        "strip-ansi": {
          "version": "0.3.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
          "dev": true,
          "requires": {
            "ansi-regex": "^0.2.1"
          }
        }
      }
    },
    "chokidar": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz",
      "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==",
      "dev": true,
      "requires": {
        "anymatch": "^2.0.0",
        "async-each": "^1.0.1",
        "braces": "^2.3.2",
        "fsevents": "^1.2.7",
        "glob-parent": "^3.1.0",
        "inherits": "^2.0.3",
        "is-binary-path": "^1.0.0",
        "is-glob": "^4.0.0",
        "normalize-path": "^3.0.0",
        "path-is-absolute": "^1.0.0",
        "readdirp": "^2.2.1",
        "upath": "^1.1.0"
      },
      "dependencies": {
        "normalize-path": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
          "dev": true
        }
      }
    },
    "ci-info": {
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
      "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A=="
    },
    "class-utils": {
      "version": "0.3.6",
      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
      "dev": true,
      "requires": {
        "arr-union": "^3.1.0",
        "define-property": "^0.2.5",
        "isobject": "^3.0.0",
        "static-extend": "^0.1.1"
      },
      "dependencies": {
        "define-property": {
          "version": "0.2.5",
          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
          "dev": true,
          "requires": {
            "is-descriptor": "^0.1.0"
          }
        }
      }
    },
    "cli-boxes": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
      "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
    },
    "cliui": {
      "version": "3.2.0",
      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
      "dev": true,
      "requires": {
        "string-width": "^1.0.1",
        "strip-ansi": "^3.0.1",
        "wrap-ansi": "^2.0.0"
      }
    },
    "clone": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
      "dev": true
    },
    "clone-buffer": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
      "dev": true
    },
    "clone-stats": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
      "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
      "dev": true
    },
    "cloneable-readable": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
      "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
      "dev": true,
      "requires": {
        "inherits": "^2.0.1",
        "process-nextick-args": "^2.0.0",
        "readable-stream": "^2.3.5"
      },
      "dependencies": {
        "process-nextick-args": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
          "dev": true
        }
      }
    },
    "code-point-at": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
      "dev": true
    },
    "coffeescript": {
      "version": "1.12.7",
      "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz",
      "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==",
      "dev": true
    },
    "collection-map": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
      "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
      "dev": true,
      "requires": {
        "arr-map": "^2.0.2",
        "for-own": "^1.0.0",
        "make-iterator": "^1.0.0"
      }
    },
    "collection-visit": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
      "dev": true,
      "requires": {
        "map-visit": "^1.0.0",
        "object-visit": "^1.0.0"
      }
    },
    "color-convert": {
      "version": "1.9.3",
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
      "requires": {
        "color-name": "1.1.3"
      }
    },
    "color-name": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
    },
    "color-support": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
      "dev": true
    },
    "colors": {
      "version": "0.6.2",
      "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
      "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw=="
    },
    "combined-stream": {
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
      "dev": true,
      "requires": {
        "delayed-stream": "~1.0.0"
      }
    },
    "commander": {
      "version": "2.17.1",
      "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
      "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
      "dev": true,
      "optional": true
    },
    "commondir": {
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.2.tgz",
      "integrity": "sha1-xJyIgMb+loRLs1Jd0ucxQFDDie4="
    },
    "component-emitter": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
      "dev": true
    },
    "concat-map": {
      "version": "0.0.1",
      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
      "dev": true
    },
    "concat-stream": {
      "version": "1.6.2",
      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
      "dev": true,
      "requires": {
        "buffer-from": "^1.0.0",
        "inherits": "^2.0.3",
        "readable-stream": "^2.2.2",
        "typedarray": "^0.0.6"
      }
    },
    "configstore": {
      "version": "3.1.2",
      "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
      "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
      "requires": {
        "dot-prop": "^4.1.0",
        "graceful-fs": "^4.1.2",
        "make-dir": "^1.0.0",
        "unique-string": "^1.0.0",
        "write-file-atomic": "^2.0.0",
        "xdg-basedir": "^3.0.0"
      }
    },
    "convert-source-map": {
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
      "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
      "dev": true,
      "requires": {
        "safe-buffer": "~5.1.1"
      }
    },
    "copy-descriptor": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
      "dev": true
    },
    "copy-props": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
      "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
      "dev": true,
      "requires": {
        "each-props": "^1.3.0",
        "is-plain-object": "^2.0.1"
      }
    },
    "core-util-is": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
      "dev": true
    },
    "coveralls": {
      "version": "3.0.3",
      "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz",
      "integrity": "sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==",
      "dev": true,
      "requires": {
        "growl": "~> 1.10.0",
        "js-yaml": "^3.11.0",
        "lcov-parse": "^0.0.10",
        "log-driver": "^1.2.7",
        "minimist": "^1.2.0",
        "request": "^2.86.0"
      },
      "dependencies": {
        "minimist": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
          "dev": true
        }
      }
    },
    "create-error-class": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
      "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
      "requires": {
        "capture-stack-trace": "^1.0.0"
      }
    },
    "cross-spawn": {
      "version": "6.0.5",
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
      "dev": true,
      "requires": {
        "nice-try": "^1.0.4",
        "path-key": "^2.0.1",
        "semver": "^5.5.0",
        "shebang-command": "^1.2.0",
        "which": "^1.2.9"
      }
    },
    "crypto-browserify": {
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.4.0.tgz",
      "integrity": "sha1-JG9qM3uITJn/6L+whaGEruYMM/M="
    },
    "crypto-random-string": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
    },
    "cucumber": {
      "version": "github:joshtombs/cucumber-js#78f79263e5855dd189e4bbe792cc6a34d7efcd19",
      "from": "github:joshtombs/cucumber-js#0.3.3ErrorFormatting",
      "requires": {
        "browserify": "1.15.5",
        "coffee-script": "1.6.3",
        "cucumber-html": "0.2.3",
        "gherkin": "2.12.2",
        "nopt": "2.1.2",
        "pogo": "0.5.1",
        "underscore": "1.5.2",
        "walkdir": "0.0.7"
      },
      "dependencies": {
        "coffee-script": {
          "version": "1.6.3",
          "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz",
          "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4="
        },
        "nopt": {
          "version": "2.1.2",
          "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
          "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
          "requires": {
            "abbrev": "1"
          }
        }
      }
    },
    "cucumber-html": {
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/cucumber-html/-/cucumber-html-0.2.3.tgz",
      "integrity": "sha1-eyqf7SFXLF0l1L1MvHU3onKxapM="
    },
    "currently-unhandled": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
      "dev": true,
      "requires": {
        "array-find-index": "^1.0.1"
      }
    },
    "cycle": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
      "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
    },
    "d": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
      "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
      "dev": true,
      "requires": {
        "es5-ext": "^0.10.9"
      }
    },
    "dashdash": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0"
      }
    },
    "dateformat": {
      "version": "1.0.12",
      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
      "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
      "dev": true,
      "requires": {
        "get-stdin": "^4.0.1",
        "meow": "^3.3.0"
      }
    },
    "debug": {
      "version": "2.6.9",
      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
      "dev": true,
      "requires": {
        "ms": "2.0.0"
      }
    },
    "decamelize": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
      "dev": true
    },
    "decode-uri-component": {
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
      "dev": true
    },
    "deep-equal": {
      "version": "0.2.2",
      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
      "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0="
    },
    "deep-extend": {
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
    },
    "deep-is": {
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
      "dev": true
    },
    "default-compare": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
      "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
      "dev": true,
      "requires": {
        "kind-of": "^5.0.2"
      },
      "dependencies": {
        "kind-of": {
          "version": "5.1.0",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
          "dev": true
        }
      }
    },
    "default-resolution": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
      "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
      "dev": true
    },
    "define-properties": {
      "version": "1.1.3",
      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
      "dev": true,
      "requires": {
        "object-keys": "^1.0.12"
      }
    },
    "define-property": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
      "dev": true,
      "requires": {
        "is-descriptor": "^1.0.2",
        "isobject": "^3.0.1"
      },
      "dependencies": {
        "is-accessor-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-data-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-descriptor": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
          "dev": true,
          "requires": {
            "is-accessor-descriptor": "^1.0.0",
            "is-data-descriptor": "^1.0.0",
            "kind-of": "^6.0.2"
          }
        }
      }
    },
    "delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
      "dev": true
    },
    "deputy": {
      "version": "0.0.4",
      "resolved": "https://registry.npmjs.org/deputy/-/deputy-0.0.4.tgz",
      "integrity": "sha1-7cAKnvXFNSfEBTKFNMmXla2kHL8=",
      "requires": {
        "detective": "~0.2.0",
        "mkdirp": "~0.3.3"
      },
      "dependencies": {
        "mkdirp": {
          "version": "0.3.5",
          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
          "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc="
        }
      }
    },
    "detect-file": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
      "dev": true
    },
    "detective": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/detective/-/detective-0.2.1.tgz",
      "integrity": "sha1-nOkmAf0iOBDClDKtA0+MYti4ZU8=",
      "requires": {
        "esprima": "~0.9.9"
      },
      "dependencies": {
        "esprima": {
          "version": "0.9.9",
          "resolved": "https://registry.npmjs.org/esprima/-/esprima-0.9.9.tgz",
          "integrity": "sha1-G5CSXJddYy1ygpOcO7nDpCPDBJA="
        }
      }
    },
    "diff": {
      "version": "3.5.0",
      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
      "dev": true
    },
    "dot-prop": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
      "requires": {
        "is-obj": "^1.0.0"
      }
    },
    "duplexer": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
      "dev": true
    },
    "duplexer2": {
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
      "dev": true,
      "requires": {
        "readable-stream": "~1.1.9"
      },
      "dependencies": {
        "isarray": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
          "dev": true
        },
        "readable-stream": {
          "version": "1.1.14",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
          "dev": true,
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.1",
            "isarray": "0.0.1",
            "string_decoder": "~0.10.x"
          }
        },
        "string_decoder": {
          "version": "0.10.31",
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
          "dev": true
        }
      }
    },
    "duplexer3": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
    },
    "duplexify": {
      "version": "3.7.1",
      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
      "dev": true,
      "requires": {
        "end-of-stream": "^1.0.0",
        "inherits": "^2.0.1",
        "readable-stream": "^2.0.0",
        "stream-shift": "^1.0.0"
      }
    },
    "each-props": {
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
      "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
      "dev": true,
      "requires": {
        "is-plain-object": "^2.0.1",
        "object.defaults": "^1.1.0"
      }
    },
    "ecc-jsbn": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
      "dev": true,
      "requires": {
        "jsbn": "~0.1.0",
        "safer-buffer": "^2.1.0"
      }
    },
    "end-of-stream": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
      "dev": true,
      "requires": {
        "once": "^1.4.0"
      }
    },
    "error-ex": {
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
      "dev": true,
      "requires": {
        "is-arrayish": "^0.2.1"
      }
    },
    "es-abstract": {
      "version": "1.13.0",
      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
      "dev": true,
      "requires": {
        "es-to-primitive": "^1.2.0",
        "function-bind": "^1.1.1",
        "has": "^1.0.3",
        "is-callable": "^1.1.4",
        "is-regex": "^1.0.4",
        "object-keys": "^1.0.12"
      }
    },
    "es-to-primitive": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
      "dev": true,
      "requires": {
        "is-callable": "^1.1.4",
        "is-date-object": "^1.0.1",
        "is-symbol": "^1.0.2"
      }
    },
    "es5-ext": {
      "version": "0.10.48",
      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.48.tgz",
      "integrity": "sha512-CdRvPlX/24Mj5L4NVxTs4804sxiS2CjVprgCmrgoDkdmjdY4D+ySHa7K3jJf8R40dFg0tIm3z/dk326LrnuSGw==",
      "dev": true,
      "requires": {
        "es6-iterator": "~2.0.3",
        "es6-symbol": "~3.1.1",
        "next-tick": "1"
      }
    },
    "es6-iterator": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
      "dev": true,
      "requires": {
        "d": "1",
        "es5-ext": "^0.10.35",
        "es6-symbol": "^3.1.1"
      }
    },
    "es6-symbol": {
      "version": "3.1.1",
      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
      "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
      "dev": true,
      "requires": {
        "d": "1",
        "es5-ext": "~0.10.14"
      }
    },
    "es6-weak-map": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
      "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
      "dev": true,
      "requires": {
        "d": "1",
        "es5-ext": "^0.10.14",
        "es6-iterator": "^2.0.1",
        "es6-symbol": "^3.1.1"
      }
    },
    "escape-string-regexp": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
    },
    "escodegen": {
      "version": "1.8.1",
      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
      "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
      "dev": true,
      "requires": {
        "esprima": "^2.7.1",
        "estraverse": "^1.9.1",
        "esutils": "^2.0.2",
        "optionator": "^0.8.1",
        "source-map": "~0.2.0"
      },
      "dependencies": {
        "esprima": {
          "version": "2.7.3",
          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
          "dev": true
        },
        "source-map": {
          "version": "0.2.0",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
          "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
          "dev": true,
          "optional": true,
          "requires": {
            "amdefine": ">=0.0.4"
          }
        }
      }
    },
    "esprima": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
      "dev": true
    },
    "estraverse": {
      "version": "1.9.3",
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
      "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
      "dev": true
    },
    "esutils": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
      "dev": true
    },
    "event-stream": {
      "version": "3.1.7",
      "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz",
      "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=",
      "dev": true,
      "requires": {
        "duplexer": "~0.1.1",
        "from": "~0",
        "map-stream": "~0.1.0",
        "pause-stream": "0.0.11",
        "split": "0.2",
        "stream-combiner": "~0.0.4",
        "through": "~2.3.1"
      }
    },
    "exec": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/exec/-/exec-0.1.1.tgz",
      "integrity": "sha1-CUerDk+jLOAJx4bNZCoLFgxeLPQ=",
      "dev": true
    },
    "execa": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
      "dev": true,
      "requires": {
        "cross-spawn": "^6.0.0",
        "get-stream": "^4.0.0",
        "is-stream": "^1.1.0",
        "npm-run-path": "^2.0.0",
        "p-finally": "^1.0.0",
        "signal-exit": "^3.0.0",
        "strip-eof": "^1.0.0"
      }
    },
    "expand-brackets": {
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
      "dev": true,
      "requires": {
        "debug": "^2.3.3",
        "define-property": "^0.2.5",
        "extend-shallow": "^2.0.1",
        "posix-character-classes": "^0.1.0",
        "regex-not": "^1.0.0",
        "snapdragon": "^0.8.1",
        "to-regex": "^3.0.1"
      },
      "dependencies": {
        "define-property": {
          "version": "0.2.5",
          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
          "dev": true,
          "requires": {
            "is-descriptor": "^0.1.0"
          }
        },
        "extend-shallow": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
          "dev": true,
          "requires": {
            "is-extendable": "^0.1.0"
          }
        }
      }
    },
    "expand-tilde": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
      "dev": true,
      "requires": {
        "homedir-polyfill": "^1.0.1"
      }
    },
    "extend": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
      "dev": true
    },
    "extend-shallow": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
      "dev": true,
      "requires": {
        "assign-symbols": "^1.0.0",
        "is-extendable": "^1.0.1"
      },
      "dependencies": {
        "is-extendable": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
          "dev": true,
          "requires": {
            "is-plain-object": "^2.0.4"
          }
        }
      }
    },
    "extglob": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
      "dev": true,
      "requires": {
        "array-unique": "^0.3.2",
        "define-property": "^1.0.0",
        "expand-brackets": "^2.1.4",
        "extend-shallow": "^2.0.1",
        "fragment-cache": "^0.2.1",
        "regex-not": "^1.0.0",
        "snapdragon": "^0.8.1",
        "to-regex": "^3.0.1"
      },
      "dependencies": {
        "define-property": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
          "dev": true,
          "requires": {
            "is-descriptor": "^1.0.0"
          }
        },
        "extend-shallow": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
          "dev": true,
          "requires": {
            "is-extendable": "^0.1.0"
          }
        },
        "is-accessor-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-data-descriptor": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
          "dev": true,
          "requires": {
            "kind-of": "^6.0.0"
          }
        },
        "is-descriptor": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
          "dev": true,
          "requires": {
            "is-accessor-descriptor": "^1.0.0",
            "is-data-descriptor": "^1.0.0",
            "kind-of": "^6.0.2"
          }
        }
      }
    },
    "extsprintf": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
      "dev": true
    },
    "eyes": {
      "version": "0.1.8",
      "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
      "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
    },
    "fancy-log": {
      "version": "1.3.3",
      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
      "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
      "dev": true,
      "requires": {
        "ansi-gray": "^0.1.1",
        "color-support": "^1.1.3",
        "parse-node-version": "^1.0.0",
        "time-stamp": "^1.0.0"
      }
    },
    "fast-deep-equal": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
      "dev": true
    },
    "fast-json-stable-stringify": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
      "dev": true
    },
    "fast-levenshtein": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
      "dev": true
    },
    "fill-range": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
      "dev": true,
      "requires": {
        "extend-shallow": "^2.0.1",
        "is-number": "^3.0.0",
        "repeat-string": "^1.6.1",
        "to-regex-range": "^2.1.0"
      },
      "dependencies": {
        "extend-shallow": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
          "dev": true,
          "requires": {
            "is-extendable": "^0.1.0"
          }
        }
      }
    },
    "find-up": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
      "dev": true,
      "requires": {
        "path-exists": "^2.0.0",
        "pinkie-promise": "^2.0.0"
      }
    },
    "findup-sync": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
      "dev": true,
      "requires": {
        "detect-file": "^1.0.0",
        "is-glob": "^3.1.0",
        "micromatch": "^3.0.4",
        "resolve-dir": "^1.0.1"
      },
      "dependencies": {
        "is-glob": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
          "dev": true,
          "requires": {
            "is-extglob": "^2.1.0"
          }
        }
      }
    },
    "fined": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz",
      "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==",
      "dev": true,
      "requires": {
        "expand-tilde": "^2.0.2",
        "is-plain-object": "^2.0.3",
        "object.defaults": "^1.1.0",
        "object.pick": "^1.2.0",
        "parse-filepath": "^1.0.1"
      }
    },
    "flagged-respawn": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
      "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
      "dev": true
    },
    "flat": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
      "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
      "dev": true,
      "requires": {
        "is-buffer": "~2.0.3"
      },
      "dependencies": {
        "is-buffer": {
          "version": "2.0.3",
          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
          "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
          "dev": true
        }
      }
    },
    "flush-write-stream": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
      "dev": true,
      "requires": {
        "inherits": "^2.0.3",
        "readable-stream": "^2.3.6"
      }
    },
    "for-in": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
      "dev": true
    },
    "for-own": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
      "dev": true,
      "requires": {
        "for-in": "^1.0.1"
      }
    },
    "forever-agent": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
      "dev": true
    },
    "form-data": {
      "version": "2.3.3",
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
      "dev": true,
      "requires": {
        "asynckit": "^0.4.0",
        "combined-stream": "^1.0.6",
        "mime-types": "^2.1.12"
      }
    },
    "formatio": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.0.2.tgz",
      "integrity": "sha1-55kcoUT/fYz/B7uayGqbeca6R+8=",
      "dev": true,
      "requires": {
        "samsam": "~1.1"
      }
    },
    "fragment-cache": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
      "dev": true,
      "requires": {
        "map-cache": "^0.2.2"
      }
    },
    "from": {
      "version": "0.1.7",
      "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
      "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
      "dev": true
    },
    "fs-mkdirp-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
      "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
      "dev": true,
      "requires": {
        "graceful-fs": "^4.1.11",
        "through2": "^2.0.3"
      }
    },
    "fs.realpath": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
      "dev": true
    },
    "fsevents": {
      "version": "1.2.7",
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
      "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
      "dev": true,
      "optional": true,
      "requires": {
        "nan": "^2.9.2",
        "node-pre-gyp": "^0.10.0"
      },
      "dependencies": {
        "abbrev": {
          "version": "1.1.1",
          "resolved": false,
          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
          "dev": true,
          "optional": true
        },
        "ansi-regex": {
          "version": "2.1.1",
          "resolved": false,
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "dev": true,
          "optional": true
        },
        "aproba": {
          "version": "1.2.0",
          "resolved": false,
          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
          "dev": true,
          "optional": true
        },
        "are-we-there-yet": {
          "version": "1.1.5",
          "resolved": false,
          "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
          "dev": true,
          "optional": true,
          "requires": {
            "delegates": "^1.0.0",
            "readable-stream": "^2.0.6"
          }
        },
        "balanced-match": {
          "version": "1.0.0",
          "resolved": false,
          "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
          "dev": true,
          "optional": true
        },
        "brace-expansion": {
          "version": "1.1.11",
          "resolved": false,
          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
          "dev": true,
          "optional": true,
          "requires": {
            "balanced-match": "^1.0.0",
            "concat-map": "0.0.1"
          }
        },
        "chownr": {
          "version": "1.1.1",
          "resolved": false,
          "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
          "dev": true,
          "optional": true
        },
        "code-point-at": {
          "version": "1.1.0",
          "resolved": false,
          "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
          "dev": true,
          "optional": true
        },
        "concat-map": {
          "version": "0.0.1",
          "resolved": false,
          "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
          "dev": true,
          "optional": true
        },
        "console-control-strings": {
          "version": "1.1.0",
          "resolved": false,
          "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
          "dev": true,
          "optional": true
        },
        "core-util-is": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
          "dev": true,
          "optional": true
        },
        "debug": {
          "version": "2.6.9",
          "resolved": false,
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ms": "2.0.0"
          }
        },
        "deep-extend": {
          "version": "0.6.0",
          "resolved": false,
          "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
          "dev": true,
          "optional": true
        },
        "delegates": {
          "version": "1.0.0",
          "resolved": false,
          "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
          "dev": true,
          "optional": true
        },
        "detect-libc": {
          "version": "1.0.3",
          "resolved": false,
          "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
          "dev": true,
          "optional": true
        },
        "fs-minipass": {
          "version": "1.2.5",
          "resolved": false,
          "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "minipass": "^2.2.1"
          }
        },
        "fs.realpath": {
          "version": "1.0.0",
          "resolved": false,
          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
          "dev": true,
          "optional": true
        },
        "gauge": {
          "version": "2.7.4",
          "resolved": false,
          "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
          "dev": true,
          "optional": true,
          "requires": {
            "aproba": "^1.0.3",
            "console-control-strings": "^1.0.0",
            "has-unicode": "^2.0.0",
            "object-assign": "^4.1.0",
            "signal-exit": "^3.0.0",
            "string-width": "^1.0.1",
            "strip-ansi": "^3.0.1",
            "wide-align": "^1.1.0"
          }
        },
        "glob": {
          "version": "7.1.3",
          "resolved": false,
          "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "fs.realpath": "^1.0.0",
            "inflight": "^1.0.4",
            "inherits": "2",
            "minimatch": "^3.0.4",
            "once": "^1.3.0",
            "path-is-absolute": "^1.0.0"
          }
        },
        "has-unicode": {
          "version": "2.0.1",
          "resolved": false,
          "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
          "dev": true,
          "optional": true
        },
        "iconv-lite": {
          "version": "0.4.24",
          "resolved": false,
          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
          "dev": true,
          "optional": true,
          "requires": {
            "safer-buffer": ">= 2.1.2 < 3"
          }
        },
        "ignore-walk": {
          "version": "3.0.1",
          "resolved": false,
          "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "minimatch": "^3.0.4"
          }
        },
        "inflight": {
          "version": "1.0.6",
          "resolved": false,
          "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
          "dev": true,
          "optional": true,
          "requires": {
            "once": "^1.3.0",
            "wrappy": "1"
          }
        },
        "inherits": {
          "version": "2.0.3",
          "resolved": false,
          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
          "dev": true,
          "optional": true
        },
        "ini": {
          "version": "1.3.5",
          "resolved": false,
          "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
          "dev": true,
          "optional": true
        },
        "is-fullwidth-code-point": {
          "version": "1.0.0",
          "resolved": false,
          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
          "dev": true,
          "optional": true,
          "requires": {
            "number-is-nan": "^1.0.0"
          }
        },
        "isarray": {
          "version": "1.0.0",
          "resolved": false,
          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
          "dev": true,
          "optional": true
        },
        "minimatch": {
          "version": "3.0.4",
          "resolved": false,
          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
          "dev": true,
          "optional": true,
          "requires": {
            "brace-expansion": "^1.1.7"
          }
        },
        "minimist": {
          "version": "0.0.8",
          "resolved": false,
          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
          "dev": true,
          "optional": true
        },
        "minipass": {
          "version": "2.3.5",
          "resolved": false,
          "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
          "dev": true,
          "optional": true,
          "requires": {
            "safe-buffer": "^5.1.2",
            "yallist": "^3.0.0"
          }
        },
        "minizlib": {
          "version": "1.2.1",
          "resolved": false,
          "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
          "dev": true,
          "optional": true,
          "requires": {
            "minipass": "^2.2.1"
          }
        },
        "mkdirp": {
          "version": "0.5.1",
          "resolved": false,
          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
          "dev": true,
          "optional": true,
          "requires": {
            "minimist": "0.0.8"
          }
        },
        "ms": {
          "version": "2.0.0",
          "resolved": false,
          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
          "dev": true,
          "optional": true
        },
        "needle": {
          "version": "2.2.4",
          "resolved": false,
          "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
          "dev": true,
          "optional": true,
          "requires": {
            "debug": "^2.1.2",
            "iconv-lite": "^0.4.4",
            "sax": "^1.2.4"
          }
        },
        "node-pre-gyp": {
          "version": "0.10.3",
          "resolved": false,
          "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
          "dev": true,
          "optional": true,
          "requires": {
            "detect-libc": "^1.0.2",
            "mkdirp": "^0.5.1",
            "needle": "^2.2.1",
            "nopt": "^4.0.1",
            "npm-packlist": "^1.1.6",
            "npmlog": "^4.0.2",
            "rc": "^1.2.7",
            "rimraf": "^2.6.1",
            "semver": "^5.3.0",
            "tar": "^4"
          }
        },
        "nopt": {
          "version": "4.0.1",
          "resolved": false,
          "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
          "dev": true,
          "optional": true,
          "requires": {
            "abbrev": "1",
            "osenv": "^0.1.4"
          }
        },
        "npm-bundled": {
          "version": "1.0.5",
          "resolved": false,
          "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
          "dev": true,
          "optional": true
        },
        "npm-packlist": {
          "version": "1.2.0",
          "resolved": false,
          "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "ignore-walk": "^3.0.1",
            "npm-bundled": "^1.0.1"
          }
        },
        "npmlog": {
          "version": "4.1.2",
          "resolved": false,
          "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
          "dev": true,
          "optional": true,
          "requires": {
            "are-we-there-yet": "~1.1.2",
            "console-control-strings": "~1.1.0",
            "gauge": "~2.7.3",
            "set-blocking": "~2.0.0"
          }
        },
        "number-is-nan": {
          "version": "1.0.1",
          "resolved": false,
          "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
          "dev": true,
          "optional": true
        },
        "object-assign": {
          "version": "4.1.1",
          "resolved": false,
          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
          "dev": true,
          "optional": true
        },
        "once": {
          "version": "1.4.0",
          "resolved": false,
          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
          "dev": true,
          "optional": true,
          "requires": {
            "wrappy": "1"
          }
        },
        "os-homedir": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
          "dev": true,
          "optional": true
        },
        "os-tmpdir": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
          "dev": true,
          "optional": true
        },
        "osenv": {
          "version": "0.1.5",
          "resolved": false,
          "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
          "dev": true,
          "optional": true,
          "requires": {
            "os-homedir": "^1.0.0",
            "os-tmpdir": "^1.0.0"
          }
        },
        "path-is-absolute": {
          "version": "1.0.1",
          "resolved": false,
          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
          "dev": true,
          "optional": true
        },
        "process-nextick-args": {
          "version": "2.0.0",
          "resolved": false,
          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
          "dev": true,
          "optional": true
        },
        "rc": {
          "version": "1.2.8",
          "resolved": false,
          "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
          "dev": true,
          "optional": true,
          "requires": {
            "deep-extend": "^0.6.0",
            "ini": "~1.3.0",
            "minimist": "^1.2.0",
            "strip-json-comments": "~2.0.1"
          },
          "dependencies": {
            "minimist": {
              "version": "1.2.0",
              "resolved": false,
              "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
              "dev": true,
              "optional": true
            }
          }
        },
        "readable-stream": {
          "version": "2.3.6",
          "resolved": false,
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
          "dev": true,
          "optional": true,
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
            "util-deprecate": "~1.0.1"
          }
        },
        "rimraf": {
          "version": "2.6.3",
          "resolved": false,
          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
          "dev": true,
          "optional": true,
          "requires": {
            "glob": "^7.1.3"
          }
        },
        "safe-buffer": {
          "version": "5.1.2",
          "resolved": false,
          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
          "dev": true,
          "optional": true
        },
        "safer-buffer": {
          "version": "2.1.2",
          "resolved": false,
          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
          "dev": true,
          "optional": true
        },
        "sax": {
          "version": "1.2.4",
          "resolved": false,
          "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
          "dev": true,
          "optional": true
        },
        "semver": {
          "version": "5.6.0",
          "resolved": false,
          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
          "dev": true,
          "optional": true
        },
        "set-blocking": {
          "version": "2.0.0",
          "resolved": false,
          "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
          "dev": true,
          "optional": true
        },
        "signal-exit": {
          "version": "3.0.2",
          "resolved": false,
          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
          "dev": true,
          "optional": true
        },
        "string-width": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
          "dev": true,
          "optional": true,
          "requires": {
            "code-point-at": "^1.0.0",
            "is-fullwidth-code-point": "^1.0.0",
            "strip-ansi": "^3.0.0"
          }
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": false,
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "dev": true,
          "optional": true,
          "requires": {
            "safe-buffer": "~5.1.0"
          }
        },
        "strip-ansi": {
          "version": "3.0.1",
          "resolved": false,
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-regex": "^2.0.0"
          }
        },
        "strip-json-comments": {
          "version": "2.0.1",
          "resolved": false,
          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
          "dev": true,
          "optional": true
        },
        "tar": {
          "version": "4.4.8",
          "resolved": false,
          "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "chownr": "^1.1.1",
            "fs-minipass": "^1.2.5",
            "minipass": "^2.3.4",
            "minizlib": "^1.1.1",
            "mkdirp": "^0.5.0",
            "safe-buffer": "^5.1.2",
            "yallist": "^3.0.2"
          }
        },
        "util-deprecate": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
          "dev": true,
          "optional": true
        },
        "wide-align": {
          "version": "1.1.3",
          "resolved": false,
          "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
          "dev": true,
          "optional": true,
          "requires": {
            "string-width": "^1.0.2 || 2"
          }
        },
        "wrappy": {
          "version": "1.0.2",
          "resolved": false,
          "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
          "dev": true,
          "optional": true
        },
        "yallist": {
          "version": "3.0.3",
          "resolved": false,
          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
          "dev": true,
          "optional": true
        }
      }
    },
    "function-bind": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
      "dev": true
    },
    "get-caller-file": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
      "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
      "dev": true
    },
    "get-stdin": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
      "dev": true
    },
    "get-stream": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
      "dev": true,
      "requires": {
        "pump": "^3.0.0"
      },
      "dependencies": {
        "pump": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
          "dev": true,
          "requires": {
            "end-of-stream": "^1.1.0",
            "once": "^1.3.1"
          }
        }
      }
    },
    "get-value": {
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
      "dev": true
    },
    "getpass": {
      "version": "0.1.7",
      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0"
      }
    },
    "gherkin": {
      "version": "2.12.2",
      "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-2.12.2.tgz",
      "integrity": "sha1-PHRUfkZhNKDvg/YUsa38SJtw3GI="
    },
    "glob": {
      "version": "7.1.3",
      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
      "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
      "dev": true,
      "requires": {
        "fs.realpath": "^1.0.0",
        "inflight": "^1.0.4",
        "inherits": "2",
        "minimatch": "^3.0.4",
        "once": "^1.3.0",
        "path-is-absolute": "^1.0.0"
      }
    },
    "glob-parent": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
      "dev": true,
      "requires": {
        "is-glob": "^3.1.0",
        "path-dirname": "^1.0.0"
      },
      "dependencies": {
        "is-glob": {
          "version": "3.1.0",
          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
          "dev": true,
          "requires": {
            "is-extglob": "^2.1.0"
          }
        }
      }
    },
    "glob-stream": {
      "version": "6.1.0",
      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
      "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
      "dev": true,
      "requires": {
        "extend": "^3.0.0",
        "glob": "^7.1.1",
        "glob-parent": "^3.1.0",
        "is-negated-glob": "^1.0.0",
        "ordered-read-streams": "^1.0.0",
        "pumpify": "^1.3.5",
        "readable-stream": "^2.1.5",
        "remove-trailing-separator": "^1.0.1",
        "to-absolute-glob": "^2.0.0",
        "unique-stream": "^2.0.2"
      }
    },
    "glob-watcher": {
      "version": "5.0.3",
      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz",
      "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==",
      "dev": true,
      "requires": {
        "anymatch": "^2.0.0",
        "async-done": "^1.2.0",
        "chokidar": "^2.0.0",
        "is-negated-glob": "^1.0.0",
        "just-debounce": "^1.0.0",
        "object.defaults": "^1.1.0"
      }
    },
    "global-dirs": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
      "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
      "requires": {
        "ini": "^1.3.4"
      }
    },
    "global-modules": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
      "dev": true,
      "requires": {
        "global-prefix": "^1.0.1",
        "is-windows": "^1.0.1",
        "resolve-dir": "^1.0.0"
      }
    },
    "global-prefix": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
      "dev": true,
      "requires": {
        "expand-tilde": "^2.0.2",
        "homedir-polyfill": "^1.0.1",
        "ini": "^1.3.4",
        "is-windows": "^1.0.1",
        "which": "^1.2.14"
      }
    },
    "glogg": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
      "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
      "dev": true,
      "requires": {
        "sparkles": "^1.0.0"
      }
    },
    "got": {
      "version": "6.7.1",
      "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
      "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
      "requires": {
        "create-error-class": "^3.0.0",
        "duplexer3": "^0.1.4",
        "get-stream": "^3.0.0",
        "is-redirect": "^1.0.0",
        "is-retry-allowed": "^1.0.0",
        "is-stream": "^1.0.0",
        "lowercase-keys": "^1.0.0",
        "safe-buffer": "^5.0.1",
        "timed-out": "^4.0.0",
        "unzip-response": "^2.0.1",
        "url-parse-lax": "^1.0.0"
      },
      "dependencies": {
        "get-stream": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
        }
      }
    },
    "graceful-fs": {
      "version": "4.1.15",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
    },
    "growl": {
      "version": "1.10.5",
      "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
      "dev": true
    },
    "gulp": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz",
      "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=",
      "dev": true,
      "requires": {
        "glob-watcher": "^5.0.0",
        "gulp-cli": "^2.0.0",
        "undertaker": "^1.0.0",
        "vinyl-fs": "^3.0.0"
      },
      "dependencies": {
        "gulp-cli": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz",
          "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==",
          "dev": true,
          "requires": {
            "ansi-colors": "^1.0.1",
            "archy": "^1.0.0",
            "array-sort": "^1.0.0",
            "color-support": "^1.1.3",
            "concat-stream": "^1.6.0",
            "copy-props": "^2.0.1",
            "fancy-log": "^1.3.2",
            "gulplog": "^1.0.0",
            "interpret": "^1.1.0",
            "isobject": "^3.0.1",
            "liftoff": "^2.5.0",
            "matchdep": "^2.0.0",
            "mute-stdout": "^1.0.0",
            "pretty-hrtime": "^1.0.0",
            "replace-homedir": "^1.0.0",
            "semver-greatest-satisfied-range": "^1.1.0",
            "v8flags": "^3.0.1",
            "yargs": "^7.1.0"
          }
        }
      }
    },
    "gulp-coffee": {
      "version": "2.3.5",
      "resolved": "https://registry.npmjs.org/gulp-coffee/-/gulp-coffee-2.3.5.tgz",
      "integrity": "sha512-PbgPGZVyYFnBTYtfYkVN6jcK8Qsuh3BxycPzvu8y5lZroCw3/x1m25KeyEDX110KsVLDmJxoULjscR21VEN4wA==",
      "dev": true,
      "requires": {
        "coffeescript": "^1.10.0",
        "gulp-util": "^3.0.2",
        "merge": "^1.2.0",
        "through2": "^2.0.1",
        "vinyl-sourcemaps-apply": "^0.2.1"
      },
      "dependencies": {
        "ansi-styles": {
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "dev": true
        },
        "chalk": {
          "version": "1.1.3",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
          "dev": true,
          "requires": {
            "ansi-styles": "^2.2.1",
            "escape-string-regexp": "^1.0.2",
            "has-ansi": "^2.0.0",
            "strip-ansi": "^3.0.0",
            "supports-color": "^2.0.0"
          }
        },
        "clone": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
          "dev": true
        },
        "clone-stats": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
          "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
          "dev": true
        },
        "dateformat": {
          "version": "2.2.0",
          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
          "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
          "dev": true
        },
        "gulp-util": {
          "version": "3.0.8",
          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
          "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
          "dev": true,
          "requires": {
            "array-differ": "^1.0.0",
            "array-uniq": "^1.0.2",
            "beeper": "^1.0.0",
            "chalk": "^1.0.0",
            "dateformat": "^2.0.0",
            "fancy-log": "^1.1.0",
            "gulplog": "^1.0.0",
            "has-gulplog": "^0.1.0",
            "lodash._reescape": "^3.0.0",
            "lodash._reevaluate": "^3.0.0",
            "lodash._reinterpolate": "^3.0.0",
            "lodash.template": "^3.0.0",
            "minimist": "^1.1.0",
            "multipipe": "^0.1.2",
            "object-assign": "^3.0.0",
            "replace-ext": "0.0.1",
            "through2": "^2.0.0",
            "vinyl": "^0.5.0"
          }
        },
        "has-ansi": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
          "dev": true,
          "requires": {
            "ansi-regex": "^2.0.0"
          }
        },
        "lodash._reinterpolate": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
          "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
          "dev": true
        },
        "lodash.escape": {
          "version": "3.2.0",
          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
          "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
          "dev": true,
          "requires": {
            "lodash._root": "^3.0.0"
          }
        },
        "lodash.keys": {
          "version": "3.1.2",
          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
          "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
          "dev": true,
          "requires": {
            "lodash._getnative": "^3.0.0",
            "lodash.isarguments": "^3.0.0",
            "lodash.isarray": "^3.0.0"
          }
        },
        "lodash.template": {
          "version": "3.6.2",
          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
          "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
          "dev": true,
          "requires": {
            "lodash._basecopy": "^3.0.0",
            "lodash._basetostring": "^3.0.0",
            "lodash._basevalues": "^3.0.0",
            "lodash._isiterateecall": "^3.0.0",
            "lodash._reinterpolate": "^3.0.0",
            "lodash.escape": "^3.0.0",
            "lodash.keys": "^3.0.0",
            "lodash.restparam": "^3.0.0",
            "lodash.templatesettings": "^3.0.0"
          }
        },
        "lodash.templatesettings": {
          "version": "3.1.1",
          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
          "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
          "dev": true,
          "requires": {
            "lodash._reinterpolate": "^3.0.0",
            "lodash.escape": "^3.0.0"
          }
        },
        "minimist": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
          "dev": true
        },
        "object-assign": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
          "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
          "dev": true
        },
        "replace-ext": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
          "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
          "dev": true
        },
        "supports-color": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
          "dev": true
        },
        "vinyl": {
          "version": "0.5.3",
          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
          "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
          "dev": true,
          "requires": {
            "clone": "^1.0.0",
            "clone-stats": "^0.0.1",
            "replace-ext": "0.0.1"
          }
        }
      }
    },
    "gulp-include": {
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/gulp-include/-/gulp-include-2.3.1.tgz",
      "integrity": "sha1-8eDtPw/QdMNHx+WfnPA409vbPjA=",
      "dev": true,
      "requires": {
        "event-stream": "~3.1.0",
        "glob": "^5.0.12",
        "gulp-util": "~2.2.10",
        "source-map": "^0.5.1",
        "strip-bom": "^2.0.0",
        "vinyl-sourcemaps-apply": "^0.2.0"
      },
      "dependencies": {
        "glob": {
          "version": "5.0.15",
          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
          "dev": true,
          "requires": {
            "inflight": "^1.0.4",
            "inherits": "2",
            "minimatch": "2 || 3",
            "once": "^1.3.0",
            "path-is-absolute": "^1.0.0"
          }
        }
      }
    },
    "gulp-util": {
      "version": "2.2.20",
      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
      "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
      "dev": true,
      "requires": {
        "chalk": "^0.5.0",
        "dateformat": "^1.0.7-1.2.3",
        "lodash._reinterpolate": "^2.4.1",
        "lodash.template": "^2.4.1",
        "minimist": "^0.2.0",
        "multipipe": "^0.1.0",
        "through2": "^0.5.0",
        "vinyl": "^0.2.1"
      },
      "dependencies": {
        "clone-stats": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
          "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
          "dev": true
        },
        "isarray": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
          "dev": true
        },
        "readable-stream": {
          "version": "1.0.34",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
          "dev": true,
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.1",
            "isarray": "0.0.1",
            "string_decoder": "~0.10.x"
          }
        },
        "string_decoder": {
          "version": "0.10.31",
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
          "dev": true
        },
        "through2": {
          "version": "0.5.1",
          "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
          "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
          "dev": true,
          "requires": {
            "readable-stream": "~1.0.17",
            "xtend": "~3.0.0"
          }
        },
        "vinyl": {
          "version": "0.2.3",
          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
          "dev": true,
          "requires": {
            "clone-stats": "~0.0.1"
          }
        },
        "xtend": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
          "dev": true
        }
      }
    },
    "gulplog": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
      "dev": true,
      "requires": {
        "glogg": "^1.0.0"
      }
    },
    "handlebars": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
      "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==",
      "dev": true,
      "requires": {
        "async": "^2.5.0",
        "optimist": "^0.6.1",
        "source-map": "^0.6.1",
        "uglify-js": "^3.1.4"
      },
      "dependencies": {
        "async": {
          "version": "2.6.2",
          "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
          "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
          "dev": true,
          "requires": {
            "lodash": "^4.17.11"
          }
        },
        "lodash": {
          "version": "4.17.11",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
          "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
          "dev": true
        },
        "source-map": {
          "version": "0.6.1",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
          "dev": true
        }
      }
    },
    "har-schema": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
      "dev": true
    },
    "har-validator": {
      "version": "5.1.3",
      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
      "dev": true,
      "requires": {
        "ajv": "^6.5.5",
        "har-schema": "^2.0.0"
      }
    },
    "has": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
      "dev": true,
      "requires": {
        "function-bind": "^1.1.1"
      }
    },
    "has-ansi": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
      "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
      "dev": true,
      "requires": {
        "ansi-regex": "^0.2.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "0.2.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
          "dev": true
        }
      }
    },
    "has-flag": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
      "dev": true
    },
    "has-gulplog": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
      "dev": true,
      "requires": {
        "sparkles": "^1.0.0"
      }
    },
    "has-symbols": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
      "dev": true
    },
    "has-value": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
      "dev": true,
      "requires": {
        "get-value": "^2.0.6",
        "has-values": "^1.0.0",
        "isobject": "^3.0.0"
      }
    },
    "has-values": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
      "dev": true,
      "requires": {
        "is-number": "^3.0.0",
        "kind-of": "^4.0.0"
      },
      "dependencies": {
        "kind-of": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
          "dev": true,
          "requires": {
            "is-buffer": "^1.1.5"
          }
        }
      }
    },
    "he": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
      "dev": true
    },
    "homedir-polyfill": {
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
      "dev": true,
      "requires": {
        "parse-passwd": "^1.0.0"
      }
    },
    "hosted-git-info": {
      "version": "2.7.1",
      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
      "dev": true
    },
    "http-browserify": {
      "version": "0.1.14",
      "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-0.1.14.tgz",
      "integrity": "sha1-nIs/lAAiBFR8fL5Saa/i6mL3HH8=",
      "requires": {
        "Base64": "~0.1.2",
        "concat-stream": "~1.0.0"
      },
      "dependencies": {
        "concat-stream": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz",
          "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=",
          "requires": {
            "bops": "0.0.6"
          }
        }
      }
    },
    "http-signature": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0",
        "jsprim": "^1.2.2",
        "sshpk": "^1.7.0"
      }
    },
    "i": {
      "version": "0.3.6",
      "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz",
      "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0="
    },
    "import-lazy": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
      "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
    },
    "imurmurhash": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
    },
    "indent-string": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
      "dev": true,
      "requires": {
        "repeating": "^2.0.0"
      }
    },
    "indexof": {
      "version": "0.0.1",
      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
    },
    "inflight": {
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
      "dev": true,
      "requires": {
        "once": "^1.3.0",
        "wrappy": "1"
      }
    },
    "inherits": {
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
      "dev": true
    },
    "ini": {
      "version": "1.3.5",
      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
    },
    "interpret": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
      "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
      "dev": true
    },
    "invert-kv": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
      "dev": true
    },
    "is-absolute": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
      "dev": true,
      "requires": {
        "is-relative": "^1.0.0",
        "is-windows": "^1.0.1"
      }
    },
    "is-accessor-descriptor": {
      "version": "0.1.6",
      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
      "dev": true,
      "requires": {
        "kind-of": "^3.0.2"
      },
      "dependencies": {
        "kind-of": {
          "version": "3.2.2",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
          "dev": true,
          "requires": {
            "is-buffer": "^1.1.5"
          }
        }
      }
    },
    "is-arrayish": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
      "dev": true
    },
    "is-binary-path": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
      "dev": true,
      "requires": {
        "binary-extensions": "^1.0.0"
      }
    },
    "is-buffer": {
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
      "dev": true
    },
    "is-callable": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
      "dev": true
    },
    "is-ci": {
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
      "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
      "requires": {
        "ci-info": "^1.5.0"
      }
    },
    "is-data-descriptor": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
      "dev": true,
      "requires": {
        "kind-of": "^3.0.2"
      },
      "dependencies": {
        "kind-of": {
          "version": "3.2.2",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
          "dev": true,
          "requires": {
            "is-buffer": "^1.1.5"
          }
        }
      }
    },
    "is-date-object": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
      "dev": true
    },
    "is-descriptor": {
      "version": "0.1.6",
      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
      "dev": true,
      "requires": {
        "is-accessor-descriptor": "^0.1.6",
        "is-data-descriptor": "^0.1.4",
        "kind-of": "^5.0.0"
      },
      "dependencies": {
        "kind-of": {
          "version": "5.1.0",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
          "dev": true
        }
      }
    },
    "is-extendable": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
      "dev": true
    },
    "is-extglob": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
      "dev": true
    },
    "is-finite": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
      "dev": true,
      "requires": {
        "number-is-nan": "^1.0.0"
      }
    },
    "is-fullwidth-code-point": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
      "dev": true,
      "requires": {
        "number-is-nan": "^1.0.0"
      }
    },
    "is-glob": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
      "dev": true,
      "requires": {
        "is-extglob": "^2.1.1"
      }
    },
    "is-installed-globally": {
      "version": "0.1.0",
      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
      "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
      "requires": {
        "global-dirs": "^0.1.0",
        "is-path-inside": "^1.0.0"
      }
    },
    "is-negated-glob": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
      "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
      "dev": true
    },
    "is-npm": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
      "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ="
    },
    "is-number": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
      "dev": true,
      "requires": {
        "kind-of": "^3.0.2"
      },
      "dependencies": {
        "kind-of": {
          "version": "3.2.2",
          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
          "dev": true,
          "requires": {
            "is-buffer": "^1.1.5"
          }
        }
      }
    },
    "is-obj": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
    },
    "is-path-inside": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
      "requires": {
        "path-is-inside": "^1.0.1"
      }
    },
    "is-plain-object": {
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
      "dev": true,
      "requires": {
        "isobject": "^3.0.1"
      }
    },
    "is-redirect": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
      "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
    },
    "is-regex": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
      "dev": true,
      "requires": {
        "has": "^1.0.1"
      }
    },
    "is-relative": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
      "dev": true,
      "requires": {
        "is-unc-path": "^1.0.0"
      }
    },
    "is-retry-allowed": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
      "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ="
    },
    "is-stream": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
    },
    "is-symbol": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
      "dev": true,
      "requires": {
        "has-symbols": "^1.0.0"
      }
    },
    "is-typedarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
      "dev": true
    },
    "is-unc-path": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
      "dev": true,
      "requires": {
        "unc-path-regex": "^0.1.2"
      }
    },
    "is-utf8": {
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
      "dev": true
    },
    "is-valid-glob": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
      "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
      "dev": true
    },
    "is-windows": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
      "dev": true
    },
    "isarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
      "dev": true
    },
    "isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
    },
    "isobject": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
      "dev": true
    },
    "isstream": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
    },
    "istanbul": {
      "version": "0.4.5",
      "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
      "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
      "dev": true,
      "requires": {
        "abbrev": "1.0.x",
        "async": "1.x",
        "escodegen": "1.8.x",
        "esprima": "2.7.x",
        "glob": "^5.0.15",
        "handlebars": "^4.0.1",
        "js-yaml": "3.x",
        "mkdirp": "0.5.x",
        "nopt": "3.x",
        "once": "1.x",
        "resolve": "1.1.x",
        "supports-color": "^3.1.0",
        "which": "^1.1.1",
        "wordwrap": "^1.0.0"
      },
      "dependencies": {
        "esprima": {
          "version": "2.7.3",
          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
          "dev": true
        },
        "glob": {
          "version": "5.0.15",
          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
          "dev": true,
          "requires": {
            "inflight": "^1.0.4",
            "inherits": "2",
            "minimatch": "2 || 3",
            "once": "^1.3.0",
            "path-is-absolute": "^1.0.0"
          }
        },
        "resolve": {
          "version": "1.1.7",
          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
          "dev": true
        },
        "supports-color": {
          "version": "3.2.3",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
          "dev": true,
          "requires": {
            "has-flag": "^1.0.0"
          }
        }
      }
    },
    "js-yaml": {
      "version": "3.12.2",
      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
      "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
      "dev": true,
      "requires": {
        "argparse": "^1.0.7",
        "esprima": "^4.0.0"
      }
    },
    "jsbn": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
      "dev": true
    },
    "json-schema": {
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
      "dev": true
    },
    "json-schema-traverse": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
      "dev": true
    },
    "json-stable-stringify-without-jsonify": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
      "dev": true
    },
    "json-stringify-safe": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
      "dev": true
    },
    "jsprim": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
      "dev": true,
      "requires": {
        "assert-plus": "1.0.0",
        "extsprintf": "1.3.0",
        "json-schema": "0.2.3",
        "verror": "1.10.0"
      }
    },
    "just-debounce": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
      "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
      "dev": true
    },
    "kind-of": {
      "version": "6.0.2",
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
      "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
      "dev": true
    },
    "last-run": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
      "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
      "dev": true,
      "requires": {
        "default-resolution": "^2.0.0",
        "es6-weak-map": "^2.0.1"
      }
    },
    "latest-version": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
      "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
      "requires": {
        "package-json": "^4.0.0"
      }
    },
    "lazystream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
      "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
      "dev": true,
      "requires": {
        "readable-stream": "^2.0.5"
      }
    },
    "lcid": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
      "dev": true,
      "requires": {
        "invert-kv": "^1.0.0"
      }
    },
    "lcov-parse": {
      "version": "0.0.10",
      "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
      "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
      "dev": true
    },
    "lead": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
      "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
      "dev": true,
      "requires": {
        "flush-write-stream": "^1.0.2"
      }
    },
    "levn": {
      "version": "0.3.0",
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
      "dev": true,
      "requires": {
        "prelude-ls": "~1.1.2",
        "type-check": "~0.3.2"
      }
    },
    "liftoff": {
      "version": "2.5.0",
      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
      "dev": true,
      "requires": {
        "extend": "^3.0.0",
        "findup-sync": "^2.0.0",
        "fined": "^1.0.1",
        "flagged-respawn": "^1.0.0",
        "is-plain-object": "^2.0.4",
        "object.map": "^1.0.0",
        "rechoir": "^0.6.2",
        "resolve": "^1.1.7"
      }
    },
    "load-json-file": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
      "dev": true,
      "requires": {
        "graceful-fs": "^4.1.2",
        "parse-json": "^2.2.0",
        "pify": "^2.0.0",
        "pinkie-promise": "^2.0.0",
        "strip-bom": "^2.0.0"
      }
    },
    "locate-path": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
      "dev": true,
      "requires": {
        "p-locate": "^3.0.0",
        "path-exists": "^3.0.0"
      },
      "dependencies": {
        "path-exists": {
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
          "dev": true
        }
      }
    },
    "lodash": {
      "version": "4.17.11",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
      "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
    },
    "lodash._basecopy": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
      "dev": true
    },
    "lodash._basetostring": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
      "dev": true
    },
    "lodash._basevalues": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
      "dev": true
    },
    "lodash._escapehtmlchar": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
      "dev": true,
      "requires": {
        "lodash._htmlescapes": "~2.4.1"
      }
    },
    "lodash._escapestringchar": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
      "dev": true
    },
    "lodash._getnative": {
      "version": "3.9.1",
      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
      "dev": true
    },
    "lodash._htmlescapes": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
      "integrity": "sha1-MtFL8IRLbeb4tioFG09nw
Download .txt
gitextract_tafrd78b/

├── .gitignore
├── .npmignore
├── .travis.yml
├── ACKNOWLEDGEMENTS.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── bin/
│   └── pioneer
├── changelog.md
├── coverage.sh
├── docs/
│   ├── command_line.md
│   ├── config_file.md
│   ├── form.md
│   ├── getting_started.md
│   ├── globals.md
│   ├── list.md
│   ├── step_helpers.md
│   └── widget.md
├── gulpfile.js
├── mergelcov.sh
├── npm-shrinkwrap.json
├── package.json
├── pioneer.json
├── src/
│   ├── config_builder.coffee
│   ├── environment.coffee
│   ├── errorformat.coffee
│   ├── pioneer.coffee
│   ├── pioneerformat.js
│   ├── pioneersummaryformat.js
│   ├── scaffold/
│   │   ├── example.json
│   │   ├── simple.js
│   │   └── simple.txt
│   ├── scaffold_builder.coffee
│   ├── support/
│   │   └── index.coffee
│   └── widgets/
│       ├── Widget.Form.coffee
│       ├── Widget.Iframe.coffee
│       ├── Widget.List.coffee
│       ├── Widget.coffee
│       └── build/
│           └── widgets.coffee
└── test/
    ├── integration/
    │   ├── features/
    │   │   ├── findwidget.feature
    │   │   ├── form.feature
    │   │   ├── list.feature
    │   │   ├── pending.feature
    │   │   ├── readwidget.feature
    │   │   ├── shorthand.feature
    │   │   ├── simple.feature
    │   │   └── widget.feature
    │   ├── fixtures/
    │   │   ├── form.html
    │   │   ├── list.html
    │   │   ├── marionette.html
    │   │   └── sample.html
    │   ├── steps/
    │   │   ├── find_steps.coffee
    │   │   ├── form_steps.coffee
    │   │   ├── helper_steps.coffee
    │   │   ├── list_steps.coffee
    │   │   ├── read_steps.coffee
    │   │   ├── shorthand.coffee
    │   │   ├── steps.coffee
    │   │   ├── util.coffee
    │   │   └── widget_steps.coffee
    │   └── widgets/
    │       ├── div.coffee
    │       ├── form.coffee
    │       ├── list.coffee
    │       └── list_item.coffee
    ├── mocha.opts
    └── unit/
        ├── bin.coffee
        ├── config.coffee
        ├── scaffold.coffee
        └── widget.coffee
Condensed preview — 69 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (439K chars).
[
  {
    "path": ".gitignore",
    "chars": 157,
    "preview": "lib-cov\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n\npids\nlogs\nresults\n\nnpm-debug.log\nnode_modules\ncoverage\n\n.DS_Store\n\nli"
  },
  {
    "path": ".npmignore",
    "chars": 20,
    "preview": "test/\n.pioneer.json\n"
  },
  {
    "path": ".travis.yml",
    "chars": 203,
    "preview": "language: node_js\n\nbefore_script:\n  - npm run-script build\n  - sudo apt-get install -y lcov\n\nnode_js:\n  - \"10.15\"\n\nscrip"
  },
  {
    "path": "ACKNOWLEDGEMENTS.md",
    "chars": 328,
    "preview": "# Inspiration\n\n* Pioneer was originally inspired by [Dill](http://github.com/mojotech/dill), a Ruby\n  take on  the [Page"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2238,
    "preview": "Contributing\n=====\n\n* How things fit together[#thepieces]\n\n* Install [nodejs](http://nodejs.org)\n\n* Building\n  * `$ npm "
  },
  {
    "path": "LICENSE",
    "chars": 1075,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2013 MojoTech\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "README.md",
    "chars": 1375,
    "preview": "**This project is no longer actively maintained. If you'd like to help out, get in touch!**\n\n<h1 align=\"center\">Pioneer<"
  },
  {
    "path": "bin/pioneer",
    "chars": 706,
    "preview": "#!/usr/bin/env node\n\nvar path        = require('path');\nvar fs          = require('fs');\nvar minimist    = require('mini"
  },
  {
    "path": "changelog.md",
    "chars": 16818,
    "preview": "### v0.11.6 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.5...v0.11.6)\n\n* Fix release issue\n\n### "
  },
  {
    "path": "coverage.sh",
    "chars": 70,
    "preview": "#!/bin/bash\n./mergelcov.sh ./coverage | ./node_modules/.bin/coveralls\n"
  },
  {
    "path": "docs/command_line.md",
    "chars": 2975,
    "preview": "Command Line Options\n====================\n\n## Table of Contents\n* [Driver Configuration](#driver-configuration)\n* [Error"
  },
  {
    "path": "docs/config_file.md",
    "chars": 1733,
    "preview": "Configuration File\n==================\n\n## Table of Contents\n* [Default Configuration](#default-configuration)\n* [Driver "
  },
  {
    "path": "docs/form.md",
    "chars": 2868,
    "preview": "Widget.Form\n=================\n\n## Table of contents\n  * [Api](#api)\n    * [submitSelector](#submitselector)\n    * [submi"
  },
  {
    "path": "docs/getting_started.md",
    "chars": 3546,
    "preview": "# Getting Started\n\n- Require Pioneer as a dependency (and install)\n\n```bash\n$ npm install pioneer --save\n```\n\n- Setup yo"
  },
  {
    "path": "docs/globals.md",
    "chars": 1033,
    "preview": "Globals\n=======\n\n## Table of Contents\n* [ARGV](#argv)\n* [timeout](#timeout)\n* [Configuring the Driver](#driver-configura"
  },
  {
    "path": "docs/list.md",
    "chars": 6412,
    "preview": "Widget.List\n===========\n\n`Widget.List` is a utility to make operating on a collection of similar items intuitive. `Widge"
  },
  {
    "path": "docs/step_helpers.md",
    "chars": 632,
    "preview": "Step Helpers\n===========\n\n## Table of contents\n* [Freeze](#freeze)\n* [Pending](#pending)\n\n###Freeze\n\nCauses process to w"
  },
  {
    "path": "docs/widget.md",
    "chars": 17724,
    "preview": "Widget\n===========\n\n`Widget` is the base class upon which your custom widgets should extend from. The `Widget` class pro"
  },
  {
    "path": "gulpfile.js",
    "chars": 1030,
    "preview": "var gulp    = require(\"gulp\"),\n    include = require('gulp-include'),\n    coffee  = require('gulp-coffee');\n\ngulp.task(\""
  },
  {
    "path": "mergelcov.sh",
    "chars": 166,
    "preview": "#!/bin/bash\nwhile read FILENAME; do\n    LCOV_INPUT_FILES=\"$LCOV_INPUT_FILES -a \\\"$FILENAME\\\"\"\ndone < <( find $1 -name lc"
  },
  {
    "path": "npm-shrinkwrap.json",
    "chars": 243565,
    "preview": "{\n  \"name\": \"pioneer\",\n  \"version\": \"0.11.7\",\n  \"lockfileVersion\": 1,\n  \"requires\": true,\n  \"dependencies\": {\n    \"Base6"
  },
  {
    "path": "package.json",
    "chars": 1724,
    "preview": "{\n  \"name\": \"pioneer\",\n  \"description\": \"Delicious Cucumber tests\",\n  \"keywords\": [\n    \"cucumber\",\n    \"selenium-webdri"
  },
  {
    "path": "pioneer.json",
    "chars": 266,
    "preview": "{\n  \"feature\": \"test/integration/features\",\n  \"require\": [\n    \"test/integration/steps\",\n    \"test/integration/widgets\"\n"
  },
  {
    "path": "src/config_builder.coffee",
    "chars": 3112,
    "preview": "fs           = require 'fs'\npath         = require 'path'\nscaffold     = require './scaffold_builder.js'\n_            = "
  },
  {
    "path": "src/environment.coffee",
    "chars": 4587,
    "preview": "Driver = require('selenium-webdriver')\n$      = Driver.promise\nmodule.exports = ->\n\n  # ********************************"
  },
  {
    "path": "src/errorformat.coffee",
    "chars": 363,
    "preview": "color = require('colors')\nmodule.exports = (failure) ->\n  return format(failure)\n\nformat = (failure) ->\n  message = shor"
  },
  {
    "path": "src/pioneer.coffee",
    "chars": 2067,
    "preview": "moment          = require('moment')\nfs              = require('fs')\npath            = require('path')\nconfigBuilder   = "
  },
  {
    "path": "src/pioneerformat.js",
    "chars": 6546,
    "preview": "var path = require('path');\nvar moment = require('moment');\n\nmodule.exports = function(options, Cucumber) {\n  var color "
  },
  {
    "path": "src/pioneersummaryformat.js",
    "chars": 6604,
    "preview": "module.exports = function (options, Cucumber) {\n  var failedScenarioLogBuffer = \"\";\n  var undefinedStepLogBuffer  = \"\";\n"
  },
  {
    "path": "src/scaffold/example.json",
    "chars": 250,
    "preview": "{\n  \"feature\": \"tests/features\",\n  \"require\": [\n    \"tests/steps\",\n    \"tests/widgets\"\n  ],\n  \"format\": \"pioneerformat.j"
  },
  {
    "path": "src/scaffold/simple.js",
    "chars": 519,
    "preview": "module.exports = function(){\n  this.Given(/^I visit TODOMVC$/,function(){\n    this.driver.get('http://todomvc.com/exampl"
  },
  {
    "path": "src/scaffold/simple.txt",
    "chars": 162,
    "preview": "Feature: Simple Feature\n\n  Background:\n    Given I visit TODOMVC\n\n  Scenario: Entering Information\n    When I enter \"dog"
  },
  {
    "path": "src/scaffold_builder.coffee",
    "chars": 2386,
    "preview": "fs           = require 'fs'\npath         = require 'path'\nprompt       = require 'prompt'\ncolor        = require 'colors"
  },
  {
    "path": "src/support/index.coffee",
    "chars": 2806,
    "preview": "Driver          = require('selenium-webdriver')\n$               = Driver.promise\nargv            = require('minimist')(p"
  },
  {
    "path": "src/widgets/Widget.Form.coffee",
    "chars": 1200,
    "preview": "Promise = require('bluebird')\n_       = require('lodash')\n\nclass @Widget.Form extends @Widget\n  root: 'form'\n\n  submitSe"
  },
  {
    "path": "src/widgets/Widget.Iframe.coffee",
    "chars": 186,
    "preview": "class @Widget.Iframe extends @Widget\n  root: 'iframe'\n\n  focus: ->\n    @driver.switchTo().frame(@find()).then => this\n\n "
  },
  {
    "path": "src/widgets/Widget.List.coffee",
    "chars": 1592,
    "preview": "_ = require(\"lodash\")\nDriver  = require('selenium-webdriver')\n$       = Driver.promise\n\nclass @Widget.List extends @Widg"
  },
  {
    "path": "src/widgets/Widget.coffee",
    "chars": 6393,
    "preview": "_       = require('lodash')\nDriver  = require('selenium-webdriver')\n$       = Driver.promise\n\n@W = class @Widget\n  @exte"
  },
  {
    "path": "src/widgets/build/widgets.coffee",
    "chars": 152,
    "preview": "module.exports = ->\n  World    = @\n  @Widgets = {}\n\n  #= include ../Widget.coffee\n  #= include ../Widget.List.coffee\n  #"
  },
  {
    "path": "test/integration/features/findwidget.feature",
    "chars": 563,
    "preview": "Feature: Reading from the DOM\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Using the find based constructor"
  },
  {
    "path": "test/integration/features/form.feature",
    "chars": 1542,
    "preview": "Feature: Submit With\n  Background:\n    Given I view \"form.html\"\n\n  Scenario: Clicking Submit\n    Given I click submit\n  "
  },
  {
    "path": "test/integration/features/list.feature",
    "chars": 2909,
    "preview": "Feature: Manipulating Lists\n\n  Background:\n    Given I view \"list.html\"\n\n  Scenario: Getting items in a list\n    Then I "
  },
  {
    "path": "test/integration/features/pending.feature",
    "chars": 364,
    "preview": "Feature: Environment\n\nScenario: Check for pending method\n  When I execute a step\n  Then the step should have a pending m"
  },
  {
    "path": "test/integration/features/readwidget.feature",
    "chars": 866,
    "preview": "Feature: Reading Widgets\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Reading a flat element\n    When I rea"
  },
  {
    "path": "test/integration/features/shorthand.feature",
    "chars": 963,
    "preview": "Feature: Shorthand Widget Methods\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Click\n    When I shorthand c"
  },
  {
    "path": "test/integration/features/simple.feature",
    "chars": 384,
    "preview": "Feature: Reading from the DOM\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Filling an input box\n    When I "
  },
  {
    "path": "test/integration/features/widget.feature",
    "chars": 2473,
    "preview": "Feature: Manipulating Widgets\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Is Present\n    When I see if \"do"
  },
  {
    "path": "test/integration/fixtures/form.html",
    "chars": 1340,
    "preview": "<html>\n  <head></head>\n  <body>\n    <form class=\"formula_1\">\n    </form>\n    <h1> Formtastic </h1>\n    <div>\n      <form"
  },
  {
    "path": "test/integration/fixtures/list.html",
    "chars": 1205,
    "preview": "<html>\n  <head></head>\n  <body>\n    <ul>\n      <li>data</li>\n      <li>7 of nine</li>\n      <li class='clickable'>deanna"
  },
  {
    "path": "test/integration/fixtures/marionette.html",
    "chars": 873,
    "preview": "<html>\n  <head>\n    <script type=\"text/javascript\" src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"
  },
  {
    "path": "test/integration/fixtures/sample.html",
    "chars": 800,
    "preview": "<html>\n  <head></head>\n  <style>\n  h4 span {\n    display: none;\n  }\n\n  h4:hover span {\n    display: inline;\n  }\n  </styl"
  },
  {
    "path": "test/integration/steps/find_steps.coffee",
    "chars": 974,
    "preview": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I eager find the \"([^\"]*)\" ele"
  },
  {
    "path": "test/integration/steps/form_steps.coffee",
    "chars": 2970,
    "preview": "_      = require('lodash')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  world = this\n\n  @Given /^I click submi"
  },
  {
    "path": "test/integration/steps/helper_steps.coffee",
    "chars": 459,
    "preview": "Driver = require('selenium-webdriver')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  @When /^I execute a step$/"
  },
  {
    "path": "test/integration/steps/list_steps.coffee",
    "chars": 5769,
    "preview": "_      = require('lodash')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  @Given /^I should see \"([^\"]*)\" items "
  },
  {
    "path": "test/integration/steps/read_steps.coffee",
    "chars": 1713,
    "preview": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I read the \"([^\"]*)\" I should "
  },
  {
    "path": "test/integration/steps/shorthand.coffee",
    "chars": 2544,
    "preview": "_ = require('lodash')\n\nmodule.exports = ->\n\n  @When /^I shorthand double click an element$/, ->\n    @W.doubleClick({\n   "
  },
  {
    "path": "test/integration/steps/steps.coffee",
    "chars": 572,
    "preview": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I fill an input with \"([^\"]*)\""
  },
  {
    "path": "test/integration/steps/util.coffee",
    "chars": 450,
    "preview": "_             = require('lodash')\nPath          = require \"path\"\nfixturesBase  = Path.resolve(__dirname, \"../\", \"fixture"
  },
  {
    "path": "test/integration/steps/widget_steps.coffee",
    "chars": 5102,
    "preview": "_      = require('lodash')\nexpect = require(\"chai\").expect\nDriver = require('selenium-webdriver')\n\nmodule.exports = ->\n "
  },
  {
    "path": "test/integration/widgets/div.coffee",
    "chars": 183,
    "preview": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.Div = this.Widget.extend\n    root: \"#onSu"
  },
  {
    "path": "test/integration/widgets/form.coffee",
    "chars": 232,
    "preview": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.SimpleForm = this.Widget.Form.extend\n    "
  },
  {
    "path": "test/integration/widgets/list.coffee",
    "chars": 774,
    "preview": "module.exports = ->\n  @Widgets = @Widgets || {}\n\n  @Widgets.List = @Widget.List.extend\n    root: \"ul\"\n    childSelector:"
  },
  {
    "path": "test/integration/widgets/list_item.coffee",
    "chars": 203,
    "preview": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.ListItem = this.Widget.extend\n\n    getIde"
  },
  {
    "path": "test/mocha.opts",
    "chars": 48,
    "preview": "--reporter spec\n--require coffeescript/register\n"
  },
  {
    "path": "test/unit/bin.coffee",
    "chars": 2270,
    "preview": "chai            = require('chai')\nsinon           = require(\"sinon\")\nsinonChai       = require(\"sinon-chai\")\n\nchai.shoul"
  },
  {
    "path": "test/unit/config.coffee",
    "chars": 13412,
    "preview": "chai            = require('chai')\nsinon           = require(\"sinon\")\nsinonChai       = require(\"sinon-chai\")\nassert     "
  },
  {
    "path": "test/unit/scaffold.coffee",
    "chars": 3451,
    "preview": "sinon           = require(\"sinon\")\nassert          = require(\"assert\")\n_               = require('lodash')\nfs           "
  },
  {
    "path": "test/unit/widget.coffee",
    "chars": 1594,
    "preview": "promise = require(\"bluebird\")\nsinon   = require(\"sinon\")\nassert  = require(\"assert\")\n\nROOT    =\n  driver:\n    wait: -> p"
  }
]

About this extraction

This page contains the full source code of the mojotech/pioneer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 69 files (393.2 KB), approximately 136.3k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!