From 2d364eef9746d681b90b3cda342a9af1b47cc514 Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 5 Mar 2018 12:06:27 -0800 Subject: [PATCH] fix(docs): Added jsdoc generated docs (#41) * chore(docs): Update readme code snippet * chore(docs): Update errors jsdocs * chore(docs): Added exports jsdoc to AuthClient and Vehicle * chore(docs): Update jsdocs from index.js and the package.json scripts * chore(docs): Remove doc directory from gitignore * fix(docs): Added autogenerated docs as markdown * chore(pacakge): Update package-lock.json --- .docs.js | 11 + .gitignore | 1 - .jsdocrc => .jsdoc.json | 0 README.md | 90 ++- doc/index.md | 1193 +++++++++++++++++++++++++++++++++ index.js | 4 + lib/auth-client.js | 2 + lib/errors.js | 68 ++ lib/vehicle.js | 2 + package-lock.json | 1378 +++++++++++++++++++++++++-------------- package.json | 6 +- readme.hbs | 14 + 12 files changed, 2216 insertions(+), 553 deletions(-) create mode 100644 .docs.js rename .jsdocrc => .jsdoc.json (100%) create mode 100644 doc/index.md create mode 100644 readme.hbs diff --git a/.docs.js b/.docs.js new file mode 100644 index 00000000..a0afb558 --- /dev/null +++ b/.docs.js @@ -0,0 +1,11 @@ +'use strict'; + +/** + * Meta file for bootstrapping jsdoc + */ + +/** + * @global + * @class Promise + * @see http://bluebirdjs.com/docs/api-reference.html + */ diff --git a/.gitignore b/.gitignore index 3fa76337..cd25b7ff 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ bower_components # Testing/Coverage/Lint out -doc dist coverage .dockerignore diff --git a/.jsdocrc b/.jsdoc.json similarity index 100% rename from .jsdocrc rename to .jsdoc.json diff --git a/README.md b/README.md index 4ae57e6e..aa9d771e 100644 --- a/README.md +++ b/README.md @@ -38,75 +38,65 @@ const express = require('express'); const app = express(); +const port = 4000; + const client = new smartcar.AuthClient({ - clientId: '...', - clientSecret: '...', - redirectUri: '...', + clientId: 'SMARTCAR_CLIENT_ID', + clientSecret: 'SMARTCAR_SECRET', + redirectUri: 'YOUR_CALLBACK_URI', scope: ['read_vehicle_info'], }); // Redirect to OEM login page -app.get('/oemlogin', function(req, res, next){ +app.get('/mock/login', function(req, res) { // get a link to the 'MOCK' oem login page - const link = client.getAuthUrl('mock', {state: 'TODO define better'}) + const link = client.getAuthUrl('mock', {state: 'MY_STATE_PARAM'}); // redirect to the link - res.redirect(auth); -}); - -// Handle the redirectUri -app.get('/home', handleAuthCode, function(req, res, next) { - res.redirect('/data'); + res.redirect(link); }); -const handleAuthCode = function(req, res, next) { +// Handle Smartcar callback with auth code +app.get('/callback', function(req, res, next) { + let access; if (req.query.error) { // the user denied your requested permissions return next(new Error(req.query.error)); } - client.exchangeCode(req.query.code) - .then(/* save tokens to database */) - .then(next); -} - -// Main app endpoint -app.get('/data', function(req, res, next){ - - let access ; - - // load a fresh access - getAccess() - .then(function(_access){ - access = _access; - // get the user's vehicles - return smartcar.getVehicles(access.access_token); - }) - .then(function(res){ - // get the first vehicle - const vehicle = new smartcar.Vehicle(res.vehicles[0], access.access_token); - return vehicle.info(); - }) - .then(function(data){ - // do something with the data! - }); + // exchange auth code for access token + return client.exchangeCode(req.query.code) + .then(function(_access) { + // in a production app you'll want to store this in some kind of persistent storage + access = _access; + // get the user's vehicles + return smartcar.getVehicles(access.access_token); + }) + .then(function(res) { + // instantiate frist vehicle in vehicle list + const vehicle = new smartcar.Vehicle(res.vehicles[0], access.access_token); + // get identifying information about a vehicle + return vehicle.info(); + }) + .then(function(data) { + /* Example: + * { + * "id": "36ab27d0-fd9d-4455-823a-ce30af709ffc", + * "make": "TESLA", + * "model": "Model S", + * "year": 2014 + * } + */ + console.log(data); + + // json response will be sent to the user + res.json(data); + }); }); -const getAccess = function() { - return loadAccessFromSafePlace().then(function(access){ - - if (smartcar.expired(access)) { - return client.exchangeToken(access.refresh_token).tap(saveAccess); - } else { - return access; - } - - }); -} - -app.listen(4000); +app.listen(port, () => console.log(`Listening on port ${port}`)); ``` [ci-url]: https://travis-ci.com/smartcar/node-sdk diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 00000000..dc269337 --- /dev/null +++ b/doc/index.md @@ -0,0 +1,1193 @@ +# Smartcar Node SDK + +Smartcar Node SDK documentation. + + +## Modules + +
+
smartcar
+
+
errors
+
+
+ +## Classes + +
+
Promise
+
+
AuthClient
+
+
Vehicle
+
+
+ +## Typedefs + +
+
Access : Object
+
+
+ + + +## smartcar + +* [smartcar](#module_smartcar) + * [.errors](#module_smartcar.errors) + * [.Vehicle](#module_smartcar.Vehicle) + * [.AuthClient](#module_smartcar.AuthClient) + * [.getVehicles](#module_smartcar.getVehicles) ⇒ [Promise](#Promise) + * [.expired(access)](#module_smartcar.expired) ⇒ Boolean + + + +### smartcar.errors +**Kind**: static property of [smartcar](#module_smartcar) +**See**: modules + + +### smartcar.Vehicle +**Kind**: static property of [smartcar](#module_smartcar) +**See**: Vehicle + + +### smartcar.AuthClient +**Kind**: static property of [smartcar](#module_smartcar) +**See**: AuthClient + + +### smartcar.getVehicles ⇒ [Promise](#Promise) +Return list of the user's vehicles. + +**Kind**: static property of [smartcar](#module_smartcar) + +| Param | Type | Description | +| --- | --- | --- | +| token | String | access token | +| [paging] | Object | | +| [paging.limit] | Number | number of vehicles to return | +| [paging.offset] | Number | index to start vehicle list | + + + +### smartcar.expired(access) ⇒ Boolean +Check if an access object's access token is expired. + +**Kind**: static method of [smartcar](#module_smartcar) +**Returns**: Boolean - true if expired, false if not expired + +| Param | Type | Description | +| --- | --- | --- | +| access | [Access](#Access) \| String | access object or expiration to be checked | + + + +## errors + +* [errors](#module_errors) + * [.SmartcarError(message)](#module_errors.SmartcarError) ⇐ Error + * [.ValidationError(message)](#module_errors.ValidationError) ⇐ SmartcarError + * [.AuthenticationError(message)](#module_errors.AuthenticationError) ⇐ SmartcarError + * [.PermissionError(message)](#module_errors.PermissionError) ⇐ SmartcarError + * [.ResourceNotFoundError(message)](#module_errors.ResourceNotFoundError) ⇐ SmartcarError + * [.VehicleStateError(message)](#module_errors.VehicleStateError) ⇐ SmartcarError + * [.RateLimitingError(message)](#module_errors.RateLimitingError) ⇐ SmartcarError + * [.MonthlyLimitExceeded(message)](#module_errors.MonthlyLimitExceeded) ⇐ SmartcarError + * [.ServerError(message)](#module_errors.ServerError) ⇐ SmartcarError + * [.NotCapableError(message)](#module_errors.NotCapableError) ⇐ SmartcarError + * [.GatewayTimeoutError(message)](#module_errors.GatewayTimeoutError) + + + +### errors.SmartcarError(message) ⇐ Error +Superclass for all sdk errors. + +**Kind**: static method of [errors](#module_errors) +**Extends**: Error + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.ValidationError(message) ⇐ SmartcarError +Error thrown by request validation. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.AuthenticationError(message) ⇐ SmartcarError +Error thrown by an invalid or expired token. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.PermissionError(message) ⇐ SmartcarError +Error thrown due to insufficient permissions. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.ResourceNotFoundError(message) ⇐ SmartcarError +Error thrown when the requested resource is not found. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.VehicleStateError(message) ⇐ SmartcarError +Error thrown when the vehicle is not capable of performing the request in +the current vehicle state. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.RateLimitingError(message) ⇐ SmartcarError +Error thrown when an application makes too many requests and is throttled. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.MonthlyLimitExceeded(message) ⇐ SmartcarError +Error thrown when an application requests more resources than it's allowed +limit, e.g., gone over their allotted monthly request limit. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.ServerError(message) ⇐ SmartcarError +Error thrown when the server throws an unexpected error. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.NotCapableError(message) ⇐ SmartcarError +Error thrown when vehicle is not capable of performing the method. + +**Kind**: static method of [errors](#module_errors) +**Extends**: SmartcarError + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +### errors.GatewayTimeoutError(message) +**Kind**: static method of [errors](#module_errors) + +| Param | Description | +| --- | --- | +| message | an error description to set | + + + +## Promise +**Kind**: global class +**See**: http://bluebirdjs.com/docs/api-reference.html + + +## AuthClient +**Kind**: global class + +* [AuthClient](#AuthClient) + * [new AuthClient(options)](#new_AuthClient_new) + * [.getAuthUrl(make, [options])](#AuthClient+getAuthUrl) ⇒ String + * [.exchangeCode(code)](#AuthClient+exchangeCode) ⇒ [Promise.<Access>](#Access) + * [.exchangeToken(token)](#AuthClient+exchangeToken) ⇒ [Promise.<Access>](#Access) + + + +### new AuthClient(options) +Create a Smartcar OAuth client for your application. + + +| Param | Type | Description | +| --- | --- | --- | +| options | Object | | +| options.clientId | String | The application's client id | +| options.clientSecret | String | The application's client secret | +| options.redirectUri | String | one of the application's preregistered redirect URIs | +| [options.scope] | Array.<String> | list of permissions to request from user | + + + +### authClient.getAuthUrl(make, [options]) ⇒ String +Generate the OAuth authorization URL for a given vehicle make. + +By default users are not shown the permission dialog if they have already +approved the set of scopes for this application. The application can elect +to always display the permissions dialog to the user by setting +approval_prompt to `force`. + +**Kind**: instance method of [AuthClient](#AuthClient) +**Returns**: String - OAuth authorization URL to redirect user to + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| make | String | | the vehicle make to generate the URL for | +| [options] | Object | | | +| [options.state] | String | | extra application state to pass along | +| [options.approvalPrompt] | Boolean | auto | see 2nd paragraph above | + + + +### authClient.exchangeCode(code) ⇒ [Promise.<Access>](#Access) +Exchange an authorization code for an access object. + +**Kind**: instance method of [AuthClient](#AuthClient) + +| Param | Type | Description | +| --- | --- | --- | +| code | String | authorization code to exchange | + + + +### authClient.exchangeToken(token) ⇒ [Promise.<Access>](#Access) +Exchange a refresh token for a new access object. + +**Kind**: instance method of [AuthClient](#AuthClient) + +| Param | Type | Description | +| --- | --- | --- | +| token | String | refresh token to exchange | + + + +## Vehicle +**Kind**: global class + +* [Vehicle](#Vehicle) + * [new Vehicle(id, token, [unitSystem])](#new_Vehicle_new) + * [.setUnitSystem(unitSystem)](#Vehicle+setUnitSystem) + * [.disconnect()](#Vehicle+disconnect) ⇒ [Promise](#Promise) + * [.permissions()](#Vehicle+permissions) ⇒ [Promise](#Promise) + * [.info()](#Vehicle+info) ⇒ [Promise](#Promise) + * [.accelerometer()](#Vehicle+accelerometer) ⇒ [Promise](#Promise) + * [.airbags()](#Vehicle+airbags) ⇒ [Promise](#Promise) + * [.barometer()](#Vehicle+barometer) ⇒ [Promise](#Promise) + * [.battery()](#Vehicle+battery) ⇒ [Promise](#Promise) + * [.charge()](#Vehicle+charge) ⇒ [Promise](#Promise) + * [.chargeAmmeter()](#Vehicle+chargeAmmeter) ⇒ [Promise](#Promise) + * [.chargeLimit()](#Vehicle+chargeLimit) ⇒ [Promise](#Promise) + * [.chargeSchedule()](#Vehicle+chargeSchedule) ⇒ [Promise](#Promise) + * [.chargeVoltmeter()](#Vehicle+chargeVoltmeter) ⇒ [Promise](#Promise) + * [.climate()](#Vehicle+climate) ⇒ [Promise](#Promise) + * [.collisionSensor()](#Vehicle+collisionSensor) ⇒ [Promise](#Promise) + * [.compass()](#Vehicle+compass) ⇒ [Promise](#Promise) + * [.cruiseControl()](#Vehicle+cruiseControl) ⇒ [Promise](#Promise) + * [.dimensions()](#Vehicle+dimensions) ⇒ [Promise](#Promise) + * [.doors()](#Vehicle+doors) ⇒ [Promise](#Promise) + * [.childSafetyLocks()](#Vehicle+childSafetyLocks) ⇒ [Promise](#Promise) + * [.driveMode()](#Vehicle+driveMode) ⇒ [Promise](#Promise) + * [.engine()](#Vehicle+engine) ⇒ [Promise](#Promise) + * [.engineCoolant()](#Vehicle+engineCoolant) ⇒ [Promise](#Promise) + * [.engineHood()](#Vehicle+engineHood) ⇒ [Promise](#Promise) + * [.engineOil()](#Vehicle+engineOil) ⇒ [Promise](#Promise) + * [.engineThrottle()](#Vehicle+engineThrottle) ⇒ [Promise](#Promise) + * [.fuel()](#Vehicle+fuel) ⇒ [Promise](#Promise) + * [.gyroscope()](#Vehicle+gyroscope) ⇒ [Promise](#Promise) + * [.ignition()](#Vehicle+ignition) ⇒ [Promise](#Promise) + * [.hazardLight()](#Vehicle+hazardLight) ⇒ [Promise](#Promise) + * [.headlights()](#Vehicle+headlights) ⇒ [Promise](#Promise) + * [.interiorLights()](#Vehicle+interiorLights) ⇒ [Promise](#Promise) + * [.turnIndicator()](#Vehicle+turnIndicator) ⇒ [Promise](#Promise) + * [.location()](#Vehicle+location) ⇒ [Promise](#Promise) + * [.sideviewMirrors()](#Vehicle+sideviewMirrors) ⇒ [Promise](#Promise) + * [.odometer()](#Vehicle+odometer) ⇒ [Promise](#Promise) + * [.tripOdometers()](#Vehicle+tripOdometers) ⇒ [Promise](#Promise) + * [.acceleratorPedal()](#Vehicle+acceleratorPedal) ⇒ [Promise](#Promise) + * [.brakePedal()](#Vehicle+brakePedal) ⇒ [Promise](#Promise) + * [.rainSensor()](#Vehicle+rainSensor) ⇒ [Promise](#Promise) + * [.seats()](#Vehicle+seats) ⇒ [Promise](#Promise) + * [.security()](#Vehicle+security) ⇒ [Promise](#Promise) + * [.sliBattery()](#Vehicle+sliBattery) ⇒ [Promise](#Promise) + * [.speedometer()](#Vehicle+speedometer) ⇒ [Promise](#Promise) + * [.steeringWheel()](#Vehicle+steeringWheel) ⇒ [Promise](#Promise) + * [.sunroof()](#Vehicle+sunroof) ⇒ [Promise](#Promise) + * [.tachometer()](#Vehicle+tachometer) ⇒ [Promise](#Promise) + * [.interiorThermistor()](#Vehicle+interiorThermistor) ⇒ [Promise](#Promise) + * [.exteriorThermistor()](#Vehicle+exteriorThermistor) ⇒ [Promise](#Promise) + * [.tires()](#Vehicle+tires) ⇒ [Promise](#Promise) + * [.transmission()](#Vehicle+transmission) ⇒ [Promise](#Promise) + * [.transmissionFluid()](#Vehicle+transmissionFluid) ⇒ [Promise](#Promise) + * [.frontTrunk()](#Vehicle+frontTrunk) ⇒ [Promise](#Promise) + * [.rearTrunk()](#Vehicle+rearTrunk) ⇒ [Promise](#Promise) + * [.vin()](#Vehicle+vin) ⇒ [Promise](#Promise) + * [.washerFluid()](#Vehicle+washerFluid) ⇒ [Promise](#Promise) + * [.wheels()](#Vehicle+wheels) ⇒ [Promise](#Promise) + * [.wheelSpeeds()](#Vehicle+wheelSpeeds) ⇒ [Promise](#Promise) + * [.windows()](#Vehicle+windows) ⇒ [Promise](#Promise) + * [.startCharging()](#Vehicle+startCharging) ⇒ [Promise](#Promise) + * [.stopCharging()](#Vehicle+stopCharging) ⇒ [Promise](#Promise) + * [.enableChargeLimit([limit])](#Vehicle+enableChargeLimit) ⇒ [Promise](#Promise) + * [.disableChargeLimit()](#Vehicle+disableChargeLimit) ⇒ [Promise](#Promise) + * [.enableChargeSchedule(startTime)](#Vehicle+enableChargeSchedule) ⇒ [Promise](#Promise) + * [.disableChargeSchedule()](#Vehicle+disableChargeSchedule) ⇒ [Promise](#Promise) + * [.activateChildSafetyLocks(childSafetyLocksArr)](#Vehicle+activateChildSafetyLocks) ⇒ [Promise](#Promise) + * [.disableChildSafetyLocks(childSafetyLocksArr)](#Vehicle+disableChildSafetyLocks) ⇒ [Promise](#Promise) + * [.startClimate(temperature)](#Vehicle+startClimate) ⇒ [Promise](#Promise) + * [.stopClimate()](#Vehicle+stopClimate) ⇒ [Promise](#Promise) + * [.openEngineHood()](#Vehicle+openEngineHood) ⇒ [Promise](#Promise) + * [.closeEngineHood()](#Vehicle+closeEngineHood) ⇒ [Promise](#Promise) + * [.honkHorn()](#Vehicle+honkHorn) ⇒ [Promise](#Promise) + * [.startIgnition()](#Vehicle+startIgnition) ⇒ [Promise](#Promise) + * [.setIgnitionOn()](#Vehicle+setIgnitionOn) ⇒ [Promise](#Promise) + * [.setIgnitionAccessory()](#Vehicle+setIgnitionAccessory) ⇒ [Promise](#Promise) + * [.setIgnitionOff()](#Vehicle+setIgnitionOff) ⇒ [Promise](#Promise) + * [.flashHeadlights(type)](#Vehicle+flashHeadlights) ⇒ [Promise](#Promise) + * [.tiltSideviewMirrors(mirrorsArr)](#Vehicle+tiltSideviewMirrors) ⇒ [Promise](#Promise) + * [.startPanic()](#Vehicle+startPanic) ⇒ [Promise](#Promise) + * [.stopPanic()](#Vehicle+stopPanic) ⇒ [Promise](#Promise) + * [.openChargePort()](#Vehicle+openChargePort) ⇒ [Promise](#Promise) + * [.closeChargePort()](#Vehicle+closeChargePort) ⇒ [Promise](#Promise) + * [.openFuelPort()](#Vehicle+openFuelPort) ⇒ [Promise](#Promise) + * [.closeFuelPort()](#Vehicle+closeFuelPort) ⇒ [Promise](#Promise) + * [.lock()](#Vehicle+lock) ⇒ [Promise](#Promise) + * [.unlock()](#Vehicle+unlock) ⇒ [Promise](#Promise) + * [.openSunroof(percentOpen)](#Vehicle+openSunroof) ⇒ [Promise](#Promise) + * [.ventSunroof()](#Vehicle+ventSunroof) ⇒ [Promise](#Promise) + * [.closeSunroof()](#Vehicle+closeSunroof) ⇒ [Promise](#Promise) + * [.openFrontTrunk()](#Vehicle+openFrontTrunk) ⇒ [Promise](#Promise) + * [.closeFrontTrunk()](#Vehicle+closeFrontTrunk) ⇒ [Promise](#Promise) + * [.openRearTrunk()](#Vehicle+openRearTrunk) ⇒ [Promise](#Promise) + * [.closeRearTrunk()](#Vehicle+closeRearTrunk) ⇒ [Promise](#Promise) + * [.openWindows(windowsArr)](#Vehicle+openWindows) ⇒ [Promise](#Promise) + * [.closeWindows(windowsArr)](#Vehicle+closeWindows) ⇒ [Promise](#Promise) + * [.lockWindows(windowsArr)](#Vehicle+lockWindows) ⇒ [Promise](#Promise) + * [.unlockWindows(windowsArr)](#Vehicle+unlockWindows) ⇒ [Promise](#Promise) + + + +### new Vehicle(id, token, [unitSystem]) +Initializes a new Vehicle to use for making requests to the Smartcar API. + + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| id | String | | the vehicle's unique identifier | +| token | String | | a valid access token | +| [unitSystem] | String | metric | the unit system to use for vehicle data (metric/imperial) | + + + +### vehicle.setUnitSystem(unitSystem) +Update the unit system to use in requests to the Smartcar API. + +**Kind**: instance method of [Vehicle](#Vehicle) + +| Param | Type | Description | +| --- | --- | --- | +| unitSystem | String | the unit system to use (metric/imperial) | + + + +### vehicle.disconnect() ⇒ [Promise](#Promise) +Disconnect this vehicle from the connected application. + +Note: Calling this method will invalidate your access token and you will +have to have the user reauthorize the vehicle to your application if +you wish to make requests to it + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - // TODO document return type more throughly + + +### vehicle.permissions() ⇒ [Promise](#Promise) +Fetch the list of permissions that this application has been granted for +this vehicle. + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - // TODO document return type more throughly + + +### vehicle.info() ⇒ [Promise](#Promise) +GET Vehicle.info + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's info + + +### vehicle.accelerometer() ⇒ [Promise](#Promise) +GET Vehicle.accelerometer + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's accelerometer + + +### vehicle.airbags() ⇒ [Promise](#Promise) +GET Vehicle.airbags + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's airbags + + +### vehicle.barometer() ⇒ [Promise](#Promise) +GET Vehicle.barometer + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's barometer + + +### vehicle.battery() ⇒ [Promise](#Promise) +GET Vehicle.battery + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's battery + + +### vehicle.charge() ⇒ [Promise](#Promise) +GET Vehicle.charge + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's charge + + +### vehicle.chargeAmmeter() ⇒ [Promise](#Promise) +GET Vehicle.chargeAmmeter + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's charge ammeter + + +### vehicle.chargeLimit() ⇒ [Promise](#Promise) +GET Vehicle.chargeLimit + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's chargeLimit + + +### vehicle.chargeSchedule() ⇒ [Promise](#Promise) +GET Vehicle.chargeSchedule + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's chargeSchedule + + +### vehicle.chargeVoltmeter() ⇒ [Promise](#Promise) +GET Vehicle.chargeVoltmeter + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's charge voltmeter + + +### vehicle.climate() ⇒ [Promise](#Promise) +GET Vehicle.climate + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's climate + + +### vehicle.collisionSensor() ⇒ [Promise](#Promise) +GET Vehicle.collisionSensor + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's collisionSensor + + +### vehicle.compass() ⇒ [Promise](#Promise) +GET Vehicle.compass + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's compass + + +### vehicle.cruiseControl() ⇒ [Promise](#Promise) +GET Vehicle.cruiseControl + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's cruiseControl + + +### vehicle.dimensions() ⇒ [Promise](#Promise) +GET Vehicle.dimensions + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's dimensions + + +### vehicle.doors() ⇒ [Promise](#Promise) +GET Vehicle.doors + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's doors + + +### vehicle.childSafetyLocks() ⇒ [Promise](#Promise) +GET Vehicle.childSafetyLocks + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's childSafetyLocks + + +### vehicle.driveMode() ⇒ [Promise](#Promise) +GET Vehicle.driveMode + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's driveMode + + +### vehicle.engine() ⇒ [Promise](#Promise) +GET Vehicle.engine + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's engine + + +### vehicle.engineCoolant() ⇒ [Promise](#Promise) +GET Vehicle.engineCoolant + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's engineCoolant + + +### vehicle.engineHood() ⇒ [Promise](#Promise) +GET Vehicle.engineHood + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's engineHood + + +### vehicle.engineOil() ⇒ [Promise](#Promise) +GET Vehicle.engineOil + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's engineOil + + +### vehicle.engineThrottle() ⇒ [Promise](#Promise) +GET Vehicle.engineThrottle + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's engineThrottle + + +### vehicle.fuel() ⇒ [Promise](#Promise) +GET Vehicle.fuel + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's fuel + + +### vehicle.gyroscope() ⇒ [Promise](#Promise) +GET Vehicle.gyroscope + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's gyroscope + + +### vehicle.ignition() ⇒ [Promise](#Promise) +GET Vehicle.ignition + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's ignition + + +### vehicle.hazardLight() ⇒ [Promise](#Promise) +GET Vehicle.hazardLight + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's hazardLight + + +### vehicle.headlights() ⇒ [Promise](#Promise) +GET Vehicle.headlights + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's headlights + + +### vehicle.interiorLights() ⇒ [Promise](#Promise) +GET Vehicle.interiorLights + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's interiorLights + + +### vehicle.turnIndicator() ⇒ [Promise](#Promise) +GET Vehicle.turnIndicator + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's turnIndicator + + +### vehicle.location() ⇒ [Promise](#Promise) +GET Vehicle.location + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's location + + +### vehicle.sideviewMirrors() ⇒ [Promise](#Promise) +GET Vehicle.sideviewMirrors + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's sideviewMirrors + + +### vehicle.odometer() ⇒ [Promise](#Promise) +GET Vehicle.odometer + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's odometer + + +### vehicle.tripOdometers() ⇒ [Promise](#Promise) +GET Vehicle.tripOdometers + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's tripOdometers + + +### vehicle.acceleratorPedal() ⇒ [Promise](#Promise) +GET Vehicle.acceleratorPedal + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's acceleratorPedal + + +### vehicle.brakePedal() ⇒ [Promise](#Promise) +GET Vehicle.brakePedal + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's brakePedal + + +### vehicle.rainSensor() ⇒ [Promise](#Promise) +GET Vehicle.rainSensor + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's rainSensor + + +### vehicle.seats() ⇒ [Promise](#Promise) +GET Vehicle.seats + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's seats + + +### vehicle.security() ⇒ [Promise](#Promise) +GET Vehicle.security + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's security + + +### vehicle.sliBattery() ⇒ [Promise](#Promise) +GET Vehicle.sliBattery + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's sliBattery + + +### vehicle.speedometer() ⇒ [Promise](#Promise) +GET Vehicle.speedometer + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's speedometer + + +### vehicle.steeringWheel() ⇒ [Promise](#Promise) +GET Vehicle.steeringWheel + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's steeringWheel + + +### vehicle.sunroof() ⇒ [Promise](#Promise) +GET Vehicle.sunroof + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's sunroof + + +### vehicle.tachometer() ⇒ [Promise](#Promise) +GET Vehicle.tachometer + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's tachometer + + +### vehicle.interiorThermistor() ⇒ [Promise](#Promise) +GET Vehicle.interiorThermistor + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's interiorThermistor + + +### vehicle.exteriorThermistor() ⇒ [Promise](#Promise) +GET Vehicle.exteriorThermistor + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's exteriorThermistor + + +### vehicle.tires() ⇒ [Promise](#Promise) +GET Vehicle.tires + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's tires + + +### vehicle.transmission() ⇒ [Promise](#Promise) +GET Vehicle.transmission + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's transmission + + +### vehicle.transmissionFluid() ⇒ [Promise](#Promise) +GET Vehicle.transmissionFluid + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's transmissionFluid + + +### vehicle.frontTrunk() ⇒ [Promise](#Promise) +GET Vehicle.frontTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's frontTrunk + + +### vehicle.rearTrunk() ⇒ [Promise](#Promise) +GET Vehicle.rearTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's rearTrunk + + +### vehicle.vin() ⇒ [Promise](#Promise) +GET Vehicle.vin + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's vin + + +### vehicle.washerFluid() ⇒ [Promise](#Promise) +GET Vehicle.washerFluid + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's washerFluid + + +### vehicle.wheels() ⇒ [Promise](#Promise) +GET Vehicle.wheels + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's wheels + + +### vehicle.wheelSpeeds() ⇒ [Promise](#Promise) +GET Vehicle.wheelSpeeds + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's wheelSpeeds + + +### vehicle.windows() ⇒ [Promise](#Promise) +GET Vehicle.windows + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A promise for info on the vehicle's windows + + +### vehicle.startCharging() ⇒ [Promise](#Promise) +POST Vehicle.startCharging + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.stopCharging() ⇒ [Promise](#Promise) +POST Vehicle.stopCharging + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.enableChargeLimit([limit]) ⇒ [Promise](#Promise) +POST Vehicle.enableChargeLimit + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| [limit] | Float | override the previously set limit, must be between 0 - 1 | + + + +### vehicle.disableChargeLimit() ⇒ [Promise](#Promise) +POST Vehicle.disableChargeLimit + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.enableChargeSchedule(startTime) ⇒ [Promise](#Promise) +POST Vehicle.enableChargeSchedule + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| startTime | String | the datetime string representing when to start charging, i.e, '11:11' | + + + +### vehicle.disableChargeSchedule() ⇒ [Promise](#Promise) +POST Vehicle.disableChargeSchedule + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.activateChildSafetyLocks(childSafetyLocksArr) ⇒ [Promise](#Promise) +POST Vehicle.activateChildSafetyLocks + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| childSafetyLocksArr | Array | array of child safety lock objects, i.e, [{location: 'BACK_LEFT'}] | + + + +### vehicle.disableChildSafetyLocks(childSafetyLocksArr) ⇒ [Promise](#Promise) +POST Vehicle.disableChildSafetyLocks + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| childSafetyLocksArr | Array | array of child safety lock objects, i.e, [{location: 'BACK_LEFT'}] | + + + +### vehicle.startClimate(temperature) ⇒ [Promise](#Promise) +POST Vehicle.startClimate + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| temperature | Number | the temperature to set the car to | + + + +### vehicle.stopClimate() ⇒ [Promise](#Promise) +POST Vehicle.stopClimate + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openEngineHood() ⇒ [Promise](#Promise) +POST Vehicle.openEngineHood + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeEngineHood() ⇒ [Promise](#Promise) +POST Vehicle.closeEngineHood + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.honkHorn() ⇒ [Promise](#Promise) +POST Vehicle.honkHorn + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.startIgnition() ⇒ [Promise](#Promise) +POST Vehicle.startIgnition + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.setIgnitionOn() ⇒ [Promise](#Promise) +POST Vehicle.setIgnitionOn + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.setIgnitionAccessory() ⇒ [Promise](#Promise) +POST Vehicle.setIgnitionAccessory + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.setIgnitionOff() ⇒ [Promise](#Promise) +POST Vehicle.setIgnitionOff + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.flashHeadlights(type) ⇒ [Promise](#Promise) +POST Vehicle.flashHeadlights + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| type | String | the type of headlight to perform the action on, i.e 'HIGH_BEAM' | + + + +### vehicle.tiltSideviewMirrors(mirrorsArr) ⇒ [Promise](#Promise) +POST Vehicle.tiltSideviewMirrors + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| mirrorsArr | Array | array of mirror objects to perform action on, i.e [{location: 'LEFT'}] | + + + +### vehicle.startPanic() ⇒ [Promise](#Promise) +POST Vehicle.startPanic + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.stopPanic() ⇒ [Promise](#Promise) +POST Vehicle.stopPanic + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openChargePort() ⇒ [Promise](#Promise) +POST Vehicle.openChargePort + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeChargePort() ⇒ [Promise](#Promise) +POST Vehicle.closeChargePort + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openFuelPort() ⇒ [Promise](#Promise) +POST Vehicle.openFuelPort + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeFuelPort() ⇒ [Promise](#Promise) +POST Vehicle.closeFuelPort + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.lock() ⇒ [Promise](#Promise) +POST Vehicle.lock + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.unlock() ⇒ [Promise](#Promise) +POST Vehicle.unlock + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openSunroof(percentOpen) ⇒ [Promise](#Promise) +POST Vehicle.openSunroof + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| percentOpen | Number | max: 1, min: 0 | + + + +### vehicle.ventSunroof() ⇒ [Promise](#Promise) +POST Vehicle.ventSunroof + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeSunroof() ⇒ [Promise](#Promise) +POST Vehicle.closeSunroof + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openFrontTrunk() ⇒ [Promise](#Promise) +POST Vehicle.openFrontTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeFrontTrunk() ⇒ [Promise](#Promise) +POST Vehicle.closeFrontTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openRearTrunk() ⇒ [Promise](#Promise) +POST Vehicle.openRearTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.closeRearTrunk() ⇒ [Promise](#Promise) +POST Vehicle.closeRearTrunk + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + + +### vehicle.openWindows(windowsArr) ⇒ [Promise](#Promise) +POST Vehicle.openWindows + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| windowsArr | Array | array of window objects to perform action upon, i.e [{location: 'BACK_LEFT'}, {location: 'FRONT_RIGHT'}] | + + + +### vehicle.closeWindows(windowsArr) ⇒ [Promise](#Promise) +POST Vehicle.closeWindows + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| windowsArr | Array | array of window objects to perform action upon, i.e [{location: 'BACK_LEFT'}, {location: 'FRONT_RIGHT'}] | + + + +### vehicle.lockWindows(windowsArr) ⇒ [Promise](#Promise) +POST Vehicle.lockWindows + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| windowsArr | Array | array of window objects to perform action upon, i.e [{location: 'BACK_LEFT'}, {location: 'FRONT_RIGHT'}] | + + + +### vehicle.unlockWindows(windowsArr) ⇒ [Promise](#Promise) +POST Vehicle.unlockWindows + +**Kind**: instance method of [Vehicle](#Vehicle) +**Returns**: [Promise](#Promise) - A success or failure response + +| Param | Type | Description | +| --- | --- | --- | +| windowsArr | Array | array of window objects to perform action upon, i.e [{location: 'BACK_LEFT'}, {location: 'FRONT_RIGHT'}] | + + + +## Access : Object +**Kind**: global typedef +**Properties** + +| Name | Type | Description | +| --- | --- | --- | +| tokenType | String | Always set to `Bearer` | +| expiresIn | Number | Number of seconds the access token is valid | +| expiration | String | ISO 8601 Datetime string which represents when the token expires | +| accessToken | String | A token to be used for requests to the Smartcar API | +| refreshToken | String | A token which is used to renew access when the current access token expires, expires in 60 days | + +**Example** +```js +{ + "tokenType": "Bearer", + "expiresIn": 3600, + "expiration": "2017-05-26T01:21:27.070Z", + "accessToken": "88704225-9f6c-4919-93e7-e0cec71317ce", + "refreshToken": "60a9e801-6d26-4d88-926e-5c7f9fc13486", +} +``` diff --git a/index.js b/index.js index 9752d8f9..0f1d5051 100644 --- a/index.js +++ b/index.js @@ -6,9 +6,13 @@ const _ = require('lodash'); const util = require('./lib/util'); /* eslint-disable global-require */ +/** @exports smartcar */ const smartcar = { + /** @see modules */ errors: require('./lib/errors'), + /** @see Vehicle */ Vehicle: require('./lib/vehicle'), + /** @see AuthClient*/ AuthClient: require('./lib/auth-client'), }; /* eslint-enable global-require */ diff --git a/lib/auth-client.js b/lib/auth-client.js index 129665e9..ddd20123 100644 --- a/lib/auth-client.js +++ b/lib/auth-client.js @@ -5,6 +5,8 @@ const qs = require('querystring'); const util = require('./util'); const config = require('./config'); +/** @exports AuthClient*/ + /** * @type {Object} * @typedef Access diff --git a/lib/errors.js b/lib/errors.js index c70c3785..c78a0bd4 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -6,8 +6,15 @@ const append = function(message) { return message ? `: ${message}` : ''; }; +/** @exports errors */ const errors = {}; +/** + * Superclass for all sdk errors. + * + * @extends Error + * @param message - an error description to set + */ errors.SmartcarError = function(message) { this.name = 'smartcar_error'; this.message = message ? String(message) : 'Unexpected server error'; @@ -15,6 +22,12 @@ errors.SmartcarError = function(message) { }; util.inherits(errors.SmartcarError, Error); +/** + * Error thrown by request validation. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.ValidationError = function(message) { this.name = 'validation_error'; this.statusCode = 400; @@ -23,6 +36,12 @@ errors.ValidationError = function(message) { }; util.inherits(errors.ValidationError, errors.SmartcarError); +/** + * Error thrown by an invalid or expired token. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.AuthenticationError = function(message) { this.name = 'authentication_error'; this.statusCode = 401; @@ -32,6 +51,12 @@ errors.AuthenticationError = function(message) { }; util.inherits(errors.AuthenticationError, errors.SmartcarError); +/** + * Error thrown due to insufficient permissions. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.PermissionError = function(message) { this.name = 'permission_error'; this.statusCode = 403; @@ -41,6 +66,12 @@ errors.PermissionError = function(message) { }; util.inherits(errors.PermissionError, errors.SmartcarError); +/** + * Error thrown when the requested resource is not found. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.ResourceNotFoundError = function(message) { this.name = 'resource_not_found_error'; this.statusCode = 404; @@ -50,6 +81,13 @@ errors.ResourceNotFoundError = function(message) { }; util.inherits(errors.ResourceNotFoundError, errors.SmartcarError); +/** + * Error thrown when the vehicle is not capable of performing the request in + * the current vehicle state. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.VehicleStateError = function(message) { this.name = 'vehicle_state_error'; this.statusCode = 409; @@ -59,6 +97,12 @@ errors.VehicleStateError = function(message) { }; util.inherits(errors.VehicleStateError, errors.SmartcarError); +/** + * Error thrown when an application makes too many requests and is throttled. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.RateLimitingError = function(message) { this.name = 'rate_limiting_error'; this.statusCode = 429; @@ -69,6 +113,13 @@ errors.RateLimitingError = function(message) { }; util.inherits(errors.RateLimitingError, errors.SmartcarError); +/** + * Error thrown when an application requests more resources than its allowed + * limit, e.g., gone over their allotted monthly request limit. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.MonthlyLimitExceeded = function(message) { this.name = 'monthly_limit_exceeded'; this.statusCode = 430; @@ -79,6 +130,12 @@ errors.MonthlyLimitExceeded = function(message) { }; util.inherits(errors.MonthlyLimitExceeded, errors.SmartcarError); +/** + * Error thrown when the server throws an unexpected error. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.ServerError = function(message) { this.name = 'server_error'; this.statusCode = 500; @@ -87,6 +144,12 @@ errors.ServerError = function(message) { }; util.inherits(errors.ServerError, errors.SmartcarError); +/** + * Error thrown when vehicle is not capable of performing the method. + * + * @extends SmartcarError + * @param message - an error description to set + */ errors.NotCapableError = function(message) { this.name = 'not_capable_error'; this.statusCode = 501; @@ -96,6 +159,11 @@ errors.NotCapableError = function(message) { }; util.inherits(errors.NotCapableError, errors.SmartcarError); +/** + * Error thrown when gateway to Smartcar times out + * + * @param message - an error description to set + */ errors.GatewayTimeoutError = function(message) { this.name = 'smartcar_gateway_timeout_error'; this.message = message || 'ELB threw a 504.'; diff --git a/lib/vehicle.js b/lib/vehicle.js index 314e9089..24fe68a7 100644 --- a/lib/vehicle.js +++ b/lib/vehicle.js @@ -4,6 +4,8 @@ const _ = require('lodash'); const util = require('./util'); +/** @exports Vehicle */ + /** * Initializes a new Vehicle to use for making requests to the Smartcar API. * diff --git a/package-lock.json b/package-lock.json index 09e08031..5b812624 100644 --- a/package-lock.json +++ b/package-lock.json @@ -386,6 +386,26 @@ "string-width": "2.1.1" } }, + "ansi-escape-sequences": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz", + "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=", + "dev": true, + "requires": { + "array-back": "1.0.4" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, "ansi-escapes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", @@ -477,6 +497,15 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", @@ -1260,6 +1289,17 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, + "cache-point": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz", + "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "fs-then-native": "2.0.0", + "mkdirp2": "1.0.3" + } + }, "caching-transform": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", @@ -1363,6 +1403,15 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -1548,6 +1597,16 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collect-all": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz", + "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==", + "dev": true, + "requires": { + "stream-connect": "1.0.2", + "stream-via": "1.0.4" + } + }, "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", @@ -1577,6 +1636,64 @@ "delayed-stream": "1.0.0" } }, + "command-line-args": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "find-replace": "1.0.3", + "typical": "2.6.1" + } + }, + "command-line-tool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.7.0.tgz", + "integrity": "sha1-yoB5KuIGnPfKpWLAy8LNEYERIqA=", + "dev": true, + "requires": { + "ansi-escape-sequences": "3.0.0", + "array-back": "1.0.4", + "command-line-args": "4.0.7", + "command-line-usage": "4.1.0", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "command-line-usage": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", + "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", + "dev": true, + "requires": { + "ansi-escape-sequences": "4.0.0", + "array-back": "2.0.0", + "table-layout": "0.4.2", + "typical": "2.6.1" + }, + "dependencies": { + "ansi-escape-sequences": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz", + "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==", + "dev": true, + "requires": { + "array-back": "2.0.0" + } + } + } + }, "commander": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", @@ -1589,6 +1706,12 @@ "integrity": "sha1-zVL28HEuC6q5fW+XModPIvR3UsA=", "dev": true }, + "common-sequence": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", + "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1673,6 +1796,23 @@ "proto-list": "1.2.4" } }, + "config-master": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", + "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", + "dev": true, + "requires": { + "walk-back": "2.0.1" + }, + "dependencies": { + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } + } + }, "configstore": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", @@ -2302,6 +2442,38 @@ } } }, + "dmd": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.11.tgz", + "integrity": "sha512-Naq/y7ME1dG8e4u0IJ2jA/G2gtbm4ZQzAG0LldwE1BCUrVWzR9VY5ayvXYSd+p9fdh5ojxayABbelDRM32xIhg==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "cache-point": "0.4.1", + "common-sequence": "1.0.2", + "file-set": "2.0.0", + "handlebars": "4.0.11", + "marked": "0.3.17", + "object-get": "2.1.0", + "reduce-flatten": "1.0.1", + "reduce-unique": "1.0.0", + "reduce-without": "1.0.1", + "test-value": "3.0.0", + "walk-back": "3.0.0" + }, + "dependencies": { + "test-value": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", + "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "typical": "2.6.1" + } + } + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2654,6 +2826,16 @@ "object-assign": "4.1.1" } }, + "file-set": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.0.tgz", + "integrity": "sha512-cCWXfw+nrYoIoUVmEF7Xsw91lGWuObtSnTEZ7AmdvZou1A/6Xx237HfxdQyC/ayKRvQSMbNOBwg62OjN5JxbXw==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "glob": "7.1.2" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -2684,6 +2866,27 @@ "pkg-dir": "2.0.0" } }, + "find-replace": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "test-value": "2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -2762,6 +2965,12 @@ "universalify": "0.1.1" } }, + "fs-then-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", + "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4505,12 +4714,147 @@ "esprima": "4.0.0" } }, + "js2xmlparser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz", + "integrity": "sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA=", + "dev": true + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, + "jsdoc-75lb": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jsdoc-75lb/-/jsdoc-75lb-3.6.0.tgz", + "integrity": "sha1-qAcRlSi0AJzLyrSbdSL2P+xs0L0=", + "dev": true, + "requires": { + "bluebird": "3.4.7", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "espree": "3.1.7", + "js2xmlparser": "1.0.0", + "klaw": "1.3.1", + "marked": "0.3.17", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "espree": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz", + "integrity": "sha1-/V3ux2qXpRIKnNOnyxF3oJI7EdI=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" + } + } + } + }, + "jsdoc-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-3.0.0.tgz", + "integrity": "sha1-DVJwAjX4Zb1Ki61evB77Vi/IrSo=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "cache-point": "0.4.1", + "collect-all": "1.0.3", + "file-set": "1.1.1", + "fs-then-native": "2.0.0", + "jsdoc-75lb": "3.6.0", + "object-to-spawn-args": "1.1.1", + "temp-path": "1.0.0", + "walk-back": "2.0.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "file-set": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-1.1.1.tgz", + "integrity": "sha1-0+xwwIDsjxjyBLod4QZ4DJBWkms=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "glob": "7.1.2" + } + }, + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } + } + }, + "jsdoc-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz", + "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "lodash.omit": "4.5.0", + "lodash.pick": "4.4.0", + "reduce-extract": "1.0.0", + "sort-array": "2.0.0", + "test-value": "3.0.0" + }, + "dependencies": { + "test-value": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", + "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "typical": "2.6.1" + } + } + } + }, + "jsdoc-to-markdown": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-3.0.4.tgz", + "integrity": "sha512-NDD+dpLiF9SYJXFcYPutKi/K8pRtIHHmVyQJzUArYQCoVhNISKeIVK5Pe78mi7K5s16/Nk7EviN2xxlJJ+S5Bw==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "command-line-tool": "0.7.0", + "config-master": "3.1.0", + "dmd": "3.0.11", + "jsdoc-api": "3.0.0", + "jsdoc-parse": "3.0.1", + "walk-back": "3.0.0" + } + }, "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", @@ -4585,6 +4929,15 @@ "is-buffer": "1.1.6" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, "last-line-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/last-line-stream/-/last-line-stream-1.0.0.tgz", @@ -4701,6 +5054,24 @@ "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", "dev": true }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, "lodash.toarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", @@ -5044,6 +5415,12 @@ "minimist": "0.0.8" } }, + "mkdirp2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp2/-/mkdirp2-1.0.3.tgz", + "integrity": "sha1-zI3YJl8fBuLY9bELblL04FC+0hs=", + "dev": true + }, "modify-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", @@ -5237,9 +5614,9 @@ "dev": true }, "nyc": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.5.0.tgz", - "integrity": "sha512-xIYK189By0YiM5/T4TviHu3J7bV7lCj5WYJfyZK3z03QgAaQ60WcLaJuXf0zhKoI6PBnUR92ZpSwBICCrgSBGg==", + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz", + "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==", "dev": true, "requires": { "archy": "1.0.0", @@ -5252,29 +5629,28 @@ "find-up": "2.1.0", "foreground-child": "1.5.6", "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.1.1", "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.2", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.1.4", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", "md5-hex": "1.3.0", - "merge-source-map": "1.1.0", + "merge-source-map": "1.0.4", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", "rimraf": "2.6.2", "signal-exit": "3.0.2", "spawn-wrap": "1.4.2", - "test-exclude": "4.2.0", - "yargs": "10.1.2", - "yargs-parser": "8.1.0" + "test-exclude": "4.1.1", + "yargs": "10.0.3", + "yargs-parser": "8.0.0" }, "dependencies": { "align-text": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2", @@ -5284,26 +5660,22 @@ }, "amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "bundled": true, "dev": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "bundled": true, "dev": true }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "bundled": true, "dev": true }, "append-transform": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "bundled": true, "dev": true, "requires": { "default-require-extensions": "1.0.0" @@ -5311,14 +5683,12 @@ }, "archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "bundled": true, "dev": true }, "arr-diff": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "bundled": true, "dev": true, "requires": { "arr-flatten": "1.1.0" @@ -5326,32 +5696,27 @@ }, "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==", + "bundled": true, "dev": true }, "array-unique": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "bundled": true, "dev": true }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "bundled": true, "dev": true }, "babel-code-frame": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "bundled": true, "dev": true, "requires": { "chalk": "1.1.3", @@ -5360,9 +5725,8 @@ } }, "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "version": "6.26.0", + "bundled": true, "dev": true, "requires": { "babel-messages": "6.23.0", @@ -5370,15 +5734,14 @@ "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.5", + "lodash": "4.17.4", "source-map": "0.5.7", "trim-right": "1.0.1" } }, "babel-messages": { "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0" @@ -5386,8 +5749,7 @@ }, "babel-runtime": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "bundled": true, "dev": true, "requires": { "core-js": "2.5.3", @@ -5396,21 +5758,19 @@ }, "babel-template": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "lodash": "4.17.5" + "lodash": "4.17.4" } }, "babel-traverse": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "bundled": true, "dev": true, "requires": { "babel-code-frame": "6.26.0", @@ -5421,37 +5781,33 @@ "debug": "2.6.9", "globals": "9.18.0", "invariant": "2.2.2", - "lodash": "4.17.5" + "lodash": "4.17.4" } }, "babel-types": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.5", + "lodash": "4.17.4", "to-fast-properties": "1.0.3" } }, "babylon": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bundled": true, "dev": true }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "bundled": true, "dev": true }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.8", + "bundled": true, "dev": true, "requires": { "balanced-match": "1.0.0", @@ -5460,8 +5816,7 @@ }, "braces": { "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "bundled": true, "dev": true, "requires": { "expand-range": "1.8.2", @@ -5471,14 +5826,12 @@ }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "bundled": true, "dev": true }, "caching-transform": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", - "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", + "bundled": true, "dev": true, "requires": { "md5-hex": "1.3.0", @@ -5488,15 +5841,13 @@ }, "camelcase": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "bundled": true, "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -5506,8 +5857,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "bundled": true, "dev": true, "requires": { "ansi-styles": "2.2.1", @@ -5519,8 +5869,7 @@ }, "cliui": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -5531,8 +5880,7 @@ "dependencies": { "wordwrap": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "bundled": true, "dev": true, "optional": true } @@ -5540,38 +5888,32 @@ }, "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=", + "bundled": true, "dev": true }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "bundled": true, "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=", + "bundled": true, "dev": true }, "convert-source-map": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "bundled": true, "dev": true }, "core-js": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "bundled": true, "dev": true }, "cross-spawn": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "bundled": true, "dev": true, "requires": { "lru-cache": "4.1.1", @@ -5580,8 +5922,7 @@ }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "bundled": true, "dev": true, "requires": { "ms": "2.0.0" @@ -5589,20 +5930,17 @@ }, "debug-log": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "bundled": true, "dev": true }, "decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "bundled": true, "dev": true }, "default-require-extensions": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "bundled": true, "dev": true, "requires": { "strip-bom": "2.0.0" @@ -5610,8 +5948,7 @@ }, "detect-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "bundled": true, "dev": true, "requires": { "repeating": "2.0.1" @@ -5619,8 +5956,7 @@ }, "error-ex": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "bundled": true, "dev": true, "requires": { "is-arrayish": "0.2.1" @@ -5628,20 +5964,17 @@ }, "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=", + "bundled": true, "dev": true }, "esutils": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "bundled": true, "dev": true }, "execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "bundled": true, "dev": true, "requires": { "cross-spawn": "5.1.0", @@ -5655,8 +5988,7 @@ "dependencies": { "cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "bundled": true, "dev": true, "requires": { "lru-cache": "4.1.1", @@ -5668,8 +6000,7 @@ }, "expand-brackets": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "bundled": true, "dev": true, "requires": { "is-posix-bracket": "0.1.1" @@ -5677,8 +6008,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "bundled": true, "dev": true, "requires": { "fill-range": "2.2.3" @@ -5686,8 +6016,7 @@ }, "extglob": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -5695,14 +6024,12 @@ }, "filename-regex": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "bundled": true, "dev": true }, "fill-range": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "bundled": true, "dev": true, "requires": { "is-number": "2.1.0", @@ -5714,8 +6041,7 @@ }, "find-cache-dir": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "bundled": true, "dev": true, "requires": { "commondir": "1.0.1", @@ -5725,8 +6051,7 @@ }, "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "bundled": true, "dev": true, "requires": { "locate-path": "2.0.0" @@ -5734,14 +6059,12 @@ }, "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "bundled": true, "dev": true }, "for-own": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "bundled": true, "dev": true, "requires": { "for-in": "1.0.2" @@ -5749,8 +6072,7 @@ }, "foreground-child": { "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "bundled": true, "dev": true, "requires": { "cross-spawn": "4.0.2", @@ -5759,26 +6081,22 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "bundled": true, "dev": true }, "get-caller-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "bundled": true, "dev": true }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "bundled": true, "dev": true }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "bundled": true, "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -5791,8 +6109,7 @@ }, "glob-base": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "bundled": true, "dev": true, "requires": { "glob-parent": "2.0.0", @@ -5801,8 +6118,7 @@ }, "glob-parent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "bundled": true, "dev": true, "requires": { "is-glob": "2.0.1" @@ -5810,20 +6126,17 @@ }, "globals": { "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "bundled": true, "dev": true }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "bundled": true, "dev": true }, "handlebars": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "bundled": true, "dev": true, "requires": { "async": "1.5.2", @@ -5834,8 +6147,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "bundled": true, "dev": true, "requires": { "amdefine": "1.0.1" @@ -5845,8 +6157,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -5854,26 +6165,22 @@ }, "has-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "bundled": true, "dev": true }, "hosted-git-info": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "bundled": true, "dev": true }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "bundled": true, "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "dev": true, "requires": { "once": "1.4.0", @@ -5882,14 +6189,12 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "bundled": true, "dev": true }, "invariant": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "bundled": true, "dev": true, "requires": { "loose-envify": "1.3.1" @@ -5897,26 +6202,22 @@ }, "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=", + "bundled": true, "dev": true }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "bundled": true, "dev": true }, "is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "bundled": true, "dev": true }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "bundled": true, "dev": true, "requires": { "builtin-modules": "1.1.1" @@ -5924,14 +6225,12 @@ }, "is-dotfile": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "bundled": true, "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "bundled": true, "dev": true, "requires": { "is-primitive": "2.0.0" @@ -5939,35 +6238,33 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "bundled": true, "dev": true }, "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "bundled": true, "dev": true }, "is-finite": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "bundled": true, "dev": true, "requires": { "number-is-nan": "1.0.1" } }, "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=", - "dev": true + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -5975,8 +6272,7 @@ }, "is-number": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2" @@ -5984,86 +6280,75 @@ }, "is-posix-bracket": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "bundled": true, "dev": true }, "is-primitive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "bundled": true, "dev": true }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "bundled": true, "dev": true }, "is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "bundled": true, "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "bundled": true, "dev": true }, "isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "bundled": true, "dev": true, "requires": { "isarray": "1.0.0" } }, "istanbul-lib-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", - "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", + "version": "1.1.1", + "bundled": true, "dev": true }, "istanbul-lib-hook": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "bundled": true, "dev": true, "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz", - "integrity": "sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA==", + "version": "1.9.1", + "bundled": true, "dev": true, "requires": { - "babel-generator": "6.26.1", + "babel-generator": "6.26.0", "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", - "semver": "5.5.0" + "istanbul-lib-coverage": "1.1.1", + "semver": "5.4.1" } }, "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "version": "1.1.2", + "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -6071,8 +6356,7 @@ "dependencies": { "supports-color": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "bundled": true, "dev": true, "requires": { "has-flag": "1.0.0" @@ -6081,13 +6365,12 @@ } }, "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "version": "1.2.2", + "bundled": true, "dev": true, "requires": { "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" @@ -6095,8 +6378,7 @@ "dependencies": { "debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "bundled": true, "dev": true, "requires": { "ms": "2.0.0" @@ -6105,9 +6387,8 @@ } }, "istanbul-reports": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.4.tgz", - "integrity": "sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg==", + "version": "1.1.3", + "bundled": true, "dev": true, "requires": { "handlebars": "4.0.11" @@ -6115,20 +6396,17 @@ }, "js-tokens": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "bundled": true, "dev": true }, "jsesc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "bundled": true, "dev": true }, "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -6136,15 +6414,13 @@ }, "lazy-cache": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "bundled": true, "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "bundled": true, "dev": true, "requires": { "invert-kv": "1.0.0" @@ -6152,8 +6428,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=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6165,8 +6440,7 @@ }, "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "bundled": true, "dev": true, "requires": { "p-locate": "2.0.0", @@ -6175,28 +6449,24 @@ "dependencies": { "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "bundled": true, "dev": true } } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "version": "4.17.4", + "bundled": true, "dev": true }, "longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "bundled": true, "dev": true }, "loose-envify": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "bundled": true, "dev": true, "requires": { "js-tokens": "3.0.2" @@ -6204,8 +6474,7 @@ }, "lru-cache": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "bundled": true, "dev": true, "requires": { "pseudomap": "1.0.2", @@ -6214,8 +6483,7 @@ }, "md5-hex": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", - "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "bundled": true, "dev": true, "requires": { "md5-o-matic": "0.1.1" @@ -6223,40 +6491,28 @@ }, "md5-o-matic": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "bundled": true, "dev": true }, "mem": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "bundled": true, "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "1.1.0" } }, "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "version": "1.0.4", + "bundled": true, "dev": true, "requires": { - "source-map": "0.6.1" - }, - "dependencies": { - "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 - } + "source-map": "0.5.7" } }, "micromatch": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "bundled": true, "dev": true, "requires": { "arr-diff": "2.0.0", @@ -6275,30 +6531,26 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "1.1.0", + "bundled": true, "dev": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "1.1.8" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "bundled": true, "dev": true }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8" @@ -6306,26 +6558,23 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "bundled": true, "dev": true }, "normalize-package-data": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "bundled": true, "dev": true, "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.5.0", + "semver": "5.4.1", "validate-npm-package-license": "3.0.1" } }, "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "bundled": true, "dev": true, "requires": { "remove-trailing-separator": "1.1.0" @@ -6333,8 +6582,7 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "bundled": true, "dev": true, "requires": { "path-key": "2.0.1" @@ -6342,20 +6590,17 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "bundled": true, "dev": true }, "object.omit": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "bundled": true, "dev": true, "requires": { "for-own": "0.1.5", @@ -6364,8 +6609,7 @@ }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "dev": true, "requires": { "wrappy": "1.0.2" @@ -6373,8 +6617,7 @@ }, "optimist": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8", @@ -6383,14 +6626,12 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "bundled": true, "dev": true }, "os-locale": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "bundled": true, "dev": true, "requires": { "execa": "0.7.0", @@ -6400,38 +6641,25 @@ }, "p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "bundled": true, "dev": true }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } + "version": "1.1.0", + "bundled": true, + "dev": true }, "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "bundled": true, "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "parse-glob": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "bundled": true, "dev": true, "requires": { "glob-base": "0.3.0", @@ -6442,8 +6670,7 @@ }, "parse-json": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "bundled": true, "dev": true, "requires": { "error-ex": "1.3.1" @@ -6451,8 +6678,7 @@ }, "path-exists": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "bundled": true, "dev": true, "requires": { "pinkie-promise": "2.0.1" @@ -6460,26 +6686,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "bundled": true, "dev": true }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "bundled": true, "dev": true }, "path-parse": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "bundled": true, "dev": true }, "path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6489,20 +6711,17 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "bundled": true, "dev": true }, "pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "bundled": true, "dev": true }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "bundled": true, "dev": true, "requires": { "pinkie": "2.0.4" @@ -6510,8 +6729,7 @@ }, "pkg-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2" @@ -6519,8 +6737,7 @@ "dependencies": { "find-up": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "bundled": true, "dev": true, "requires": { "path-exists": "2.1.0", @@ -6531,20 +6748,17 @@ }, "preserve": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "bundled": true, "dev": true }, "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "bundled": true, "dev": true }, "randomatic": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "bundled": true, "dev": true, "requires": { "is-number": "3.0.0", @@ -6553,8 +6767,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2" @@ -6562,8 +6775,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -6573,8 +6785,7 @@ }, "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -6584,8 +6795,7 @@ }, "read-pkg": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "bundled": true, "dev": true, "requires": { "load-json-file": "1.1.0", @@ -6595,8 +6805,7 @@ }, "read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2", @@ -6605,8 +6814,7 @@ "dependencies": { "find-up": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "bundled": true, "dev": true, "requires": { "path-exists": "2.1.0", @@ -6617,14 +6825,12 @@ }, "regenerator-runtime": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "bundled": true, "dev": true }, "regex-cache": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "bundled": true, "dev": true, "requires": { "is-equal-shallow": "0.1.3" @@ -6632,26 +6838,22 @@ }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "bundled": true, "dev": true }, "repeat-element": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "bundled": true, "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "bundled": true, "dev": true }, "repeating": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "bundled": true, "dev": true, "requires": { "is-finite": "1.0.2" @@ -6659,26 +6861,22 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "bundled": true, "dev": true }, "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "bundled": true, "dev": true }, "resolve-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "bundled": true, "dev": true }, "right-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -6687,29 +6885,25 @@ }, "rimraf": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "bundled": true, "dev": true, "requires": { "glob": "7.1.2" } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.4.1", + "bundled": true, "dev": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "bundled": true, "dev": true }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "bundled": true, "dev": true, "requires": { "shebang-regex": "1.0.0" @@ -6717,32 +6911,27 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "bundled": true, "dev": true }, "slide": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "bundled": true, "dev": true }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "bundled": true, "dev": true }, "spawn-wrap": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "bundled": true, "dev": true, "requires": { "foreground-child": "1.5.6", @@ -6755,8 +6944,7 @@ }, "spdx-correct": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "bundled": true, "dev": true, "requires": { "spdx-license-ids": "1.2.2" @@ -6764,20 +6952,17 @@ }, "spdx-expression-parse": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "bundled": true, "dev": true }, "spdx-license-ids": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "bundled": true, "dev": true }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -6786,14 +6971,17 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "3.0.0" @@ -6803,8 +6991,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -6812,8 +6999,7 @@ }, "strip-bom": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "bundled": true, "dev": true, "requires": { "is-utf8": "0.2.1" @@ -6821,20 +7007,17 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "bundled": true, "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=", + "bundled": true, "dev": true }, "test-exclude": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.0.tgz", - "integrity": "sha512-8hMFzjxbPv6xSlwGhXSvOMJ/vTy3bkng+2pxmf6E1z6VF7I9nIyNfvHtaw+NBPgvz647gADBbMSbwLfZYppT/w==", + "version": "4.1.1", + "bundled": true, "dev": true, "requires": { "arrify": "1.0.1", @@ -6846,20 +7029,17 @@ }, "to-fast-properties": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "bundled": true, "dev": true }, "trim-right": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "bundled": true, "dev": true }, "uglify-js": { "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -6870,8 +7050,7 @@ "dependencies": { "yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -6885,15 +7064,13 @@ }, "uglify-to-browserify": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "bundled": true, "dev": true, "optional": true }, "validate-npm-package-license": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "bundled": true, "dev": true, "requires": { "spdx-correct": "1.0.2", @@ -6902,8 +7079,7 @@ }, "which": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "bundled": true, "dev": true, "requires": { "isexe": "2.0.0" @@ -6911,46 +7087,32 @@ }, "which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "bundled": true, "dev": true }, "window-size": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "bundled": true, "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "bundled": true, "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "bundled": true, "dev": true, "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" }, "dependencies": { - "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.1" - } - }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bundled": true, "dev": true, "requires": { "code-point-at": "1.1.0", @@ -6962,14 +7124,12 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "bundled": true, "dev": true }, "write-file-atomic": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -6979,23 +7139,20 @@ }, "y18n": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "bundled": true, "dev": true }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "bundled": true, "dev": true }, "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "version": "10.0.3", + "bundled": true, "dev": true, "requires": { - "cliui": "4.0.0", + "cliui": "3.2.0", "decamelize": "1.2.0", "find-up": "2.1.0", "get-caller-file": "1.0.2", @@ -7006,41 +7163,36 @@ "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "yargs-parser": "8.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=", - "dev": true - }, "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "version": "3.2.0", + "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } } } }, "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "version": "8.0.0", + "bundled": true, "dev": true, "requires": { "camelcase": "4.1.0" @@ -7048,8 +7200,7 @@ "dependencies": { "camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "bundled": true, "dev": true } } @@ -7067,6 +7218,18 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-get": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz", + "integrity": "sha1-ciu9tgA576R8rTxtws5RqFwCxa4=", + "dev": true + }, + "object-to-spawn-args": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-to-spawn-args/-/object-to-spawn-args-1.1.1.tgz", + "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=", + "dev": true + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -7686,6 +7849,57 @@ } } }, + "reduce-extract": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-extract/-/reduce-extract-1.0.0.tgz", + "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=", + "dev": true, + "requires": { + "test-value": "1.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + }, + "test-value": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz", + "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + } + } + } + }, + "reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", + "dev": true + }, + "reduce-unique": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reduce-unique/-/reduce-unique-1.0.0.tgz", + "integrity": "sha1-flhrz4ek4ytter2Cd/rWzeyfSAM=", + "dev": true + }, + "reduce-without": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz", + "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=", + "dev": true, + "requires": { + "test-value": "2.1.0" + } + }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", @@ -7866,6 +8080,23 @@ } } }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", @@ -8141,6 +8372,28 @@ "hoek": "4.2.1" } }, + "sort-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-array/-/sort-array-2.0.0.tgz", + "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "object-get": "2.1.0", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -8280,6 +8533,32 @@ "readable-stream": "2.3.4" } }, + "stream-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", + "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=", + "dev": true, + "requires": { + "array-back": "1.0.4" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, + "stream-via": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", + "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==", + "dev": true + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -8426,6 +8705,39 @@ } } }, + "table-layout": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz", + "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==", + "dev": true, + "requires": { + "array-back": "2.0.0", + "deep-extend": "0.5.0", + "lodash.padend": "4.6.1", + "typical": "2.6.1", + "wordwrapjs": "3.0.0" + }, + "dependencies": { + "deep-extend": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz", + "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=", + "dev": true + } + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "temp-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", + "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=", + "dev": true + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -8435,6 +8747,27 @@ "execa": "0.7.0" } }, + "test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", + "dev": true, + "requires": { + "array-back": "1.0.4", + "typical": "2.6.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "requires": { + "typical": "2.6.1" + } + } + } + }, "text-extensions": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", @@ -8557,6 +8890,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", + "dev": true + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -8582,6 +8921,29 @@ "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=", "dev": true }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", @@ -8692,6 +9054,12 @@ "extsprintf": "1.3.0" } }, + "walk-back": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz", + "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=", + "dev": true + }, "well-known-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-1.0.0.tgz", @@ -8773,6 +9141,16 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "dev": true, + "requires": { + "reduce-flatten": "1.0.1", + "typical": "2.6.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 6b9fc8be..ec7ec9bf 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,9 @@ "lint": "eslint . --cache", "cover": "nyc npm test -s", "cover:integration": "nyc npm test:integration -s", - "jsdoc": "jsdoc -c .jsdocrc .", - "release": "semantic-release" + "release": "semantic-release", + "jsdoc": "jsdoc -c .jsdoc.json .", + "docs": "mkdir -p doc && jsdoc2md --example-lang js --template readme.hbs --files .docs.js index.js lib/* | sed 's/[ \t]*$//' > doc/index.md" }, "dependencies": { "bluebird": "^3.5.1", @@ -44,6 +45,7 @@ "cross-env": "^5.1.3", "eslint": "^4.18.1", "eslint-config-smartcar": "^2.0.0", + "jsdoc-to-markdown": "^3.0.0", "nock": "^9.1.9", "nyc": "^11.4.1", "semantic-release": "^12.4.1" diff --git a/readme.hbs b/readme.hbs new file mode 100644 index 00000000..2899beff --- /dev/null +++ b/readme.hbs @@ -0,0 +1,14 @@ +# Smartcar Node SDK + +Smartcar Node SDK documentation. + +{{#indexChildren ~}} + * [{{{name}}}] + {{~#if (regexp-test see ":") ~}} + (#module_{{{name}}}) + {{else ~}} + (#{{{name}}}) + {{/if}} +{{/indexChildren}} + +{{>main}}