diff --git a/.babelrc b/.babelrc index 04af60f9a1..4c8702e887 100644 --- a/.babelrc +++ b/.babelrc @@ -1,10 +1,6 @@ { - "presets": ["es2015"], "plugins": [ - "transform-object-rest-spread", - ["transform-async-to-module-method", { - "module": "bluebird", - "method": "coroutine" - }] + "transform-es2015-modules-commonjs", + "syntax-object-rest-spread", ] } diff --git a/.nodemonignore b/.nodemonignore index efb42543ee..7bde46b5e4 100644 --- a/.nodemonignore +++ b/.nodemonignore @@ -4,6 +4,7 @@ node_modules/** .bower-registry/** website/client-old/** website/client/** +website/client/store/** website/views/** website/build/** dist/** diff --git a/.nvmrc b/.nvmrc index 62f9457511..301160a930 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6 \ No newline at end of file +8 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 537e118839..c150993057 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - '6' + - '8' services: - mongodb cache: @@ -8,8 +8,6 @@ cache: - 'node_modules' addons: chrome: stable -before_install: - - npm install -g npm@5 before_script: - npm run test:build - cp config.json.example config.json diff --git a/Dockerfile b/Dockerfile index befa3bdb55..168de8b0b9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:boron +FROM node:8 # Upgrade NPM to v5 (Yarn is needed because of this bug https://github.com/npm/npm/issues/16807) # The used solution is suggested here https://github.com/npm/npm/issues/16807#issuecomment-313591975 diff --git a/Dockerfile-Production b/Dockerfile-Production index e05f469fa0..a65c000ba2 100644 --- a/Dockerfile-Production +++ b/Dockerfile-Production @@ -1,4 +1,4 @@ -FROM node:boron +FROM node:8 ENV ADMIN_EMAIL admin@habitica.com ENV AMAZON_PAYMENTS_CLIENT_ID amzn1.application-oa2-client.68ed9e6904ef438fbc1bf86bf494056e diff --git a/gulp/taskHelper.js b/gulp/taskHelper.js index 83560d3f46..270573ba70 100644 --- a/gulp/taskHelper.js +++ b/gulp/taskHelper.js @@ -2,7 +2,6 @@ import { exec } from 'child_process'; import psTree from 'ps-tree'; import nconf from 'nconf'; import net from 'net'; -import Bluebird from 'bluebird'; import { post } from 'superagent'; import { sync as glob } from 'glob'; import Mocha from 'mocha'; @@ -45,7 +44,7 @@ export function kill (proc) { * before failing. */ export function awaitPort (port, max = 60) { - return new Bluebird((rej, res) => { + return new Promise((rej, res) => { let socket; let timeout; let interval; diff --git a/migrations/archive/2016/20160529_fix_challenges.js b/migrations/archive/2016/20160529_fix_challenges.js index 035a5c30ed..714b716a3f 100644 --- a/migrations/archive/2016/20160529_fix_challenges.js +++ b/migrations/archive/2016/20160529_fix_challenges.js @@ -16,7 +16,6 @@ const authorName = 'Blade'; const authorUuid = '75f270e8-c5db-4722-a5e6-a83f1b23f76b'; -global.Promise = require('bluebird'); const MongoClient = require('mongodb').MongoClient; const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); diff --git a/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js b/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js index e010e34b35..fbb3d1bcfb 100644 --- a/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js +++ b/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js @@ -11,7 +11,6 @@ * pm'ed each user asking if they would like their tasks reset to the previous day ***************************************/ -global.Promise = require('bluebird'); const MongoClient = require('mongodb').MongoClient; const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); diff --git a/migrations/archive/2016/20160602_convert_quest_collection.js b/migrations/archive/2016/20160602_convert_quest_collection.js index 04db90f1c2..b70c85659e 100644 --- a/migrations/archive/2016/20160602_convert_quest_collection.js +++ b/migrations/archive/2016/20160602_convert_quest_collection.js @@ -12,7 +12,6 @@ * from an object to a number, hence this migration. ***************************************/ -global.Promise = require('bluebird'); const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); const Timer = require('./utils/timer'); diff --git a/migrations/archive/2016/20160605_convert_quest_collection_again.js b/migrations/archive/2016/20160605_convert_quest_collection_again.js index 5b9cc1e95c..7c0af7be3f 100644 --- a/migrations/archive/2016/20160605_convert_quest_collection_again.js +++ b/migrations/archive/2016/20160605_convert_quest_collection_again.js @@ -9,7 +9,6 @@ * and transfers a group's progress to it ***************************************/ -global.Promise = require('bluebird'); const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); const Timer = require('./utils/timer'); diff --git a/migrations/archive/2016/20160615_fix_bad_emails.js b/migrations/archive/2016/20160615_fix_bad_emails.js index 97f29cefcf..4fa7802526 100644 --- a/migrations/archive/2016/20160615_fix_bad_emails.js +++ b/migrations/archive/2016/20160615_fix_bad_emails.js @@ -12,7 +12,6 @@ * @example.com ***************************************/ -global.Promise = require('bluebird'); const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); const Timer = require('./utils/timer'); diff --git a/migrations/archive/2016/20161002_add_missing_webhook_type.js b/migrations/archive/2016/20161002_add_missing_webhook_type.js index 8a0dd5ecbe..94e87a1d5b 100644 --- a/migrations/archive/2016/20161002_add_missing_webhook_type.js +++ b/migrations/archive/2016/20161002_add_missing_webhook_type.js @@ -9,7 +9,6 @@ * they support a type and options and label * ***************************************/ -global.Promise = require('bluebird'); const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); const Timer = require('./utils/timer'); diff --git a/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js b/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js index 35361d4094..19bda0bd77 100644 --- a/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js +++ b/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js @@ -12,7 +12,6 @@ * message into the chat for affected parties. ***************************************/ -global.Promise = require('bluebird'); const uuid = require('uuid'); const TaskQueue = require('cwait').TaskQueue; const logger = require('./utils/logger'); diff --git a/migrations/archive/2017/20171211_sanitize_emails.js b/migrations/archive/2017/20171211_sanitize_emails.js new file mode 100644 index 0000000000..cd6bcab960 --- /dev/null +++ b/migrations/archive/2017/20171211_sanitize_emails.js @@ -0,0 +1,88 @@ +var migrationName = '20171211_sanitize_emails.js'; +var authorName = 'Julius'; // in case script author needs to know when their ... +var authorUuid = 'dd16c270-1d6d-44bd-b4f9-737342e79be6'; //... own data is done + +/* + User creation saves email as lowercase, but updating an email did not. + Run this script to ensure all lowercased emails in db AFTER fix for updating emails is implemented. + This will fix inconsistent querying for an email when attempting to password reset. +*/ + +var monk = require('monk'); +var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE +var dbUsers = monk(connectionString).get('users', { castIds: false }); + +function processUsers(lastId) { + var query = { + 'auth.local.email': /[A-Z]/ + }; + + if (lastId) { + query._id = { + $gt: lastId + } + } + + dbUsers.find(query, { + sort: {_id: 1}, + limit: 250, + fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data) + 'auth.local.email' + ], + }) + .then(updateUsers) + .catch(function (err) { + console.log(err); + return exiting(1, 'ERROR! ' + err); + }); +} + +var progressCount = 1000; +var count = 0; + +function updateUsers (users) { + if (!users || users.length === 0) { + console.warn('All appropriate users found and modified.'); + displayData(); + return; + } + + var userPromises = users.map(updateUser); + var lastUser = users[users.length - 1]; + + return Promise.all(userPromises) + .then(function () { + processUsers(lastUser._id); + }); +} + +function updateUser (user) { + count++; + + var push; + var set = { + 'auth.local.email': user.auth.local.email.toLowerCase() + }; + + dbUsers.update({_id: user._id}, {$set: set}); + + if (count % progressCount == 0) console.warn(count + ' ' + user._id); + if (user._id == authorUuid) console.warn(authorName + ' processed'); +} + +function displayData() { + console.warn('\n' + count + ' users processed\n'); + return exiting(0); +} + +function exiting(code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { msg = 'ERROR!'; } + if (msg) { + if (code) { console.error(msg); } + else { console.log( msg); } + } + process.exit(code); +} + +module.exports = processUsers; diff --git a/migrations/archive/README.md b/migrations/archive/README.md index 9330a6dbf8..c1d79a81da 100644 --- a/migrations/archive/README.md +++ b/migrations/archive/README.md @@ -1,4 +1,6 @@ If you need to use a migration from this folder, move it to /migrations. Note that /migrations files (excluding /archive) are linted, so to pass test you'll have to make sure -that the file is written correctly. \ No newline at end of file +that the file is written correctly. + +They might also be using some old deps that we don't use anymore like Bluebird, mongoskin, ... \ No newline at end of file diff --git a/migrations/challenges/sync-all-challenges.js b/migrations/challenges/sync-all-challenges.js index 3be7a74bb0..7998aecdd1 100644 --- a/migrations/challenges/sync-all-challenges.js +++ b/migrations/challenges/sync-all-challenges.js @@ -1,5 +1,3 @@ -import Bluebird from 'Bluebird'; - import { model as Challenges } from '../../website/server/models/challenge'; import { model as User } from '../../website/server/models/user'; @@ -17,10 +15,10 @@ async function syncChallengeToMembers (challenges) { promises.push(user.save()); }); - return Bluebird.all(promises); + return Promise.all(promises); }); - return await Bluebird.all(challengSyncPromises); + return await Promise.all(challengSyncPromises); } async function syncChallenges (lastChallengeDate) { diff --git a/migrations/groups/create-group.js b/migrations/groups/create-group.js index d1cedcc4fc..b1d266890f 100644 --- a/migrations/groups/create-group.js +++ b/migrations/groups/create-group.js @@ -1,5 +1,3 @@ -import Bluebird from 'bluebird'; - import { model as Group } from '../../website/server/models/group'; import { model as User } from '../../website/server/models/user'; @@ -16,7 +14,7 @@ async function createGroup (name, privacy, type, leaderId) { group.leader = user._id; user.guilds.push(group._id); - return Bluebird.all([group.save(), user.save()]); + return Promise.all([group.save(), user.save()]); } module.exports = async function groupCreator () { diff --git a/migrations/groups/habitrpg-jackalopes.js b/migrations/groups/habitrpg-jackalopes.js index 50c6da4673..a33ae3a2f3 100644 --- a/migrations/groups/habitrpg-jackalopes.js +++ b/migrations/groups/habitrpg-jackalopes.js @@ -3,7 +3,6 @@ /* * This migration will find users with unlimited subscriptions who are also eligible for Jackalope mounts, and award them */ -import Bluebird from 'bluebird'; import { model as Group } from '../../website/server/models/group'; import { model as User } from '../../website/server/models/user'; @@ -38,7 +37,7 @@ async function handOutJackalopes () { cursor.on('close', async () => { console.log('done'); - return await Bluebird.all(promises); + return await Promise.all(promises); }); } diff --git a/migrations/groups/update-groups-with-group-plans.js b/migrations/groups/update-groups-with-group-plans.js index 921c9bbb99..d544f389ab 100644 --- a/migrations/groups/update-groups-with-group-plans.js +++ b/migrations/groups/update-groups-with-group-plans.js @@ -9,8 +9,6 @@ let authorUuid = ''; // ... own data is done * subscription to all members */ -import Bluebird from 'bluebird'; - import { model as Group } from '../../website/server/models/group'; import * as payments from '../../website/server/libs/payments'; @@ -28,7 +26,7 @@ async function updateGroupsWithGroupPlans () { }); cursor.on('close', async () => { - return await Bluebird.all(promises); + return await Promise.all(promises); }); } diff --git a/migrations/migration-runner.js b/migrations/migration-runner.js index 59a2a32a27..1d3e651d77 100644 --- a/migrations/migration-runner.js +++ b/migrations/migration-runner.js @@ -1,14 +1,14 @@ require('babel-register'); -require('babel-polyfill'); // This file must use ES5, everything required can be in ES6 function setUpServer () { const nconf = require('nconf'); // eslint-disable-line global-require, no-unused-vars const mongoose = require('mongoose'); // eslint-disable-line global-require, no-unused-vars - const Bluebird = require('bluebird'); // eslint-disable-line global-require, no-unused-vars const setupNconf = require('../website/server/libs/setupNconf'); // eslint-disable-line global-require + setupNconf(); + // We require src/server and npt src/index because // 1. nconf is already setup // 2. we don't need clustering diff --git a/migrations/s3-upload.js b/migrations/s3-upload.js index 7538e83f6d..4a2d2efcd2 100644 --- a/migrations/s3-upload.js +++ b/migrations/s3-upload.js @@ -1,4 +1,3 @@ -let Bluebird = require('bluebird'); let request = require('superagent'); let last = require('lodash/last'); let AWS = require('aws-sdk'); @@ -74,7 +73,7 @@ function uploadToS3 (start, end, filesUrls) { }); console.log(promises.length); - return Bluebird.all(promises) + return Promise.all(promises) .then(() => { currentIndex += 50; uploadToS3(currentIndex, currentIndex + 50, filesUrls); diff --git a/package-lock.json b/package-lock.json index c47e336be6..9ce2e75e67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,19 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz", - "integrity": "sha512-eVXQSbu/RimU6OKcK2/gDJVTFcxXJI4sHbIqw2mhwMZeQ2as/8AhS9DGkEDoHMBBNJZ5B0US63lF56x+KDcxiA==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.41.tgz", + "integrity": "sha512-omQT0n9EW38xfMCY7cCW/PAT55igUX9c9cMq6QN4EjxCcelcrocwMJ6H4JP4BGrQ+OHdJAQPM9/Eaa2Yce4Aug==", "requires": { - "@babel/highlight": "7.0.0-beta.40" + "@babel/highlight": "7.0.0-beta.41" } }, "@babel/generator": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.40.tgz", - "integrity": "sha512-c91BQcXyTq/5aFV4afgOionxZS1dxWt8OghEx5Q52SKssdGRFSiMKnk9tGkev1pYULPJBqjSDZU2Pcuc58ffZw==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.41.tgz", + "integrity": "sha512-j1hBM7K53RqAwPzPkS3GK9ggxJUBaUHevkpnt9iKBPHVlTrO3owMMlT8wH/GmOjr0HyBGFlL8cSlygx8RLdD7A==", "requires": { - "@babel/types": "7.0.0-beta.40", + "@babel/types": "7.0.0-beta.41", "jsesc": "2.5.1", "lodash": "4.17.5", "source-map": "0.5.7", @@ -37,27 +37,35 @@ } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz", - "integrity": "sha512-cK9BVLtOfisSISTTHXKGvBc2OBh65tjEk4PgXhsSnnH0i8RP2v+5RCxoSlh2y/i+l2fxQqKqv++Qo5RMiwmRCA==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.41.tgz", + "integrity": "sha512-oN/ljgS1InIpOp2bDkj8X5gIoiWnYBdhaAb2y/nPSMX4t0C6nIdbd0qYhG8uAKFm6mQBmm1cvNxPzcSB3F19aQ==", "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.40", - "@babel/template": "7.0.0-beta.40", - "@babel/types": "7.0.0-beta.40" + "@babel/helper-get-function-arity": "7.0.0-beta.41", + "@babel/template": "7.0.0-beta.41", + "@babel/types": "7.0.0-beta.41" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz", - "integrity": "sha512-MwquaPznI4cUoZEgHC/XGkddOXtqKqD4DvZDOyJK2LR9Qi6TbMbAhc6IaFoRX7CRTFCmtGeu8gdXW2dBotBBTA==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.41.tgz", + "integrity": "sha512-B4Vwv02jCSjCws0jmBwR+c5y3MXs5dDyjEVZ8wlIeOaMvwXNxVrBGl+OaLuuPlxVNDrESNvpGFXxh+rlqf+w5Q==", "requires": { - "@babel/types": "7.0.0-beta.40" + "@babel/types": "7.0.0-beta.41" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.41.tgz", + "integrity": "sha512-eAyEJr4u3FWR5r0+gJWgE2Npu4d7BCXnXP+zw89n02x2DyewW0IHrED2HVlbhBAMWVt083VyGKjoVUMyH945wg==", + "requires": { + "@babel/types": "7.0.0-beta.41" } }, "@babel/highlight": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.40.tgz", - "integrity": "sha512-mOhhTrzieV6VO7odgzFGFapiwRK0ei8RZRhfzHhb6cpX3QM8XXuCLXWjN8qBB7JReDdUR80V3LFfFrGUYevhNg==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.41.tgz", + "integrity": "sha512-5RURdqgHmXdg775Dr6GIFaVatHaPtaVgMF29jvWgkm8LP/B3MjZR/TOhkpbIBChqFzTn7uQKiBR3002pGjKY7Q==", "requires": { "chalk": "2.3.2", "esutils": "2.0.2", @@ -65,43 +73,44 @@ } }, "@babel/template": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.40.tgz", - "integrity": "sha512-RlQiVB7eL7fxsKN6JvnCCwEwEL28CBYalXSgWWULuFlEHjtMoXBqQanSie3bNyhrANJx67sb+Sd/vuGivoMwLQ==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.41.tgz", + "integrity": "sha512-EiFgrLPJQ64+Im0+fg9fHcos0eooRG/iuTM6vlF4X9b+j/9Z/VCZejbvgqLYtuseT67GKQHEeEoXM07HK6in2Q==", "requires": { - "@babel/code-frame": "7.0.0-beta.40", - "@babel/types": "7.0.0-beta.40", - "babylon": "7.0.0-beta.40", + "@babel/code-frame": "7.0.0-beta.41", + "@babel/types": "7.0.0-beta.41", + "babylon": "7.0.0-beta.41", "lodash": "4.17.5" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz", - "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==" + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.41.tgz", + "integrity": "sha512-AfQfqR9hbNSpY/9yyGaUAiT1tmyHzaJbHJpqkfn8DGAUkPTG5VwPoulajQu3FUQXTr8NGm4MFaupVzmWkvln4Q==" } } }, "@babel/traverse": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.40.tgz", - "integrity": "sha512-h96SQorjvdSuxQ6hHFIuAa3oxnad1TA5bU1Zz88+XqzwmM5QM0/k2D+heXGGy/76gT5ajl7xYLKGiPA/KTyVhQ==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.41.tgz", + "integrity": "sha512-EkWyDxYvaGaFjV+7xsGBeTsryqj5+oMo6noN/fhT5j5C4bpPuNwWnl47Ivvg10bk6v1NpfCoI6NHOWj3x+v9Ag==", "requires": { - "@babel/code-frame": "7.0.0-beta.40", - "@babel/generator": "7.0.0-beta.40", - "@babel/helper-function-name": "7.0.0-beta.40", - "@babel/types": "7.0.0-beta.40", - "babylon": "7.0.0-beta.40", + "@babel/code-frame": "7.0.0-beta.41", + "@babel/generator": "7.0.0-beta.41", + "@babel/helper-function-name": "7.0.0-beta.41", + "@babel/helper-split-export-declaration": "7.0.0-beta.41", + "@babel/types": "7.0.0-beta.41", + "babylon": "7.0.0-beta.41", "debug": "3.1.0", "globals": "11.3.0", - "invariant": "2.2.3", + "invariant": "2.2.4", "lodash": "4.17.5" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz", - "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==" + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.41.tgz", + "integrity": "sha512-AfQfqR9hbNSpY/9yyGaUAiT1tmyHzaJbHJpqkfn8DGAUkPTG5VwPoulajQu3FUQXTr8NGm4MFaupVzmWkvln4Q==" }, "debug": { "version": "3.1.0", @@ -119,9 +128,9 @@ } }, "@babel/types": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.40.tgz", - "integrity": "sha512-uXCGCzTgMZxcSUzutCPtZmXbVC+cvENgS2e0tRuhn+Y1hZnMb8IHP0Trq7Q2MB/eFmG5pKrAeTIUfQIe5kA4Tg==", + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.41.tgz", + "integrity": "sha512-q+Jf57E089a98CjAN5x0C5PAn7fqhVrEHTVAeVWHviyauASWgqff3F+t8migYEagnn5PcJ9lmtr5Mgmi3sV8PA==", "requires": { "esutils": "2.0.2", "lodash": "4.17.5", @@ -142,7 +151,7 @@ }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { @@ -181,6 +190,15 @@ "@types/babel-types": "7.0.1" } }, + "@vue/test-utils": { + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.12.tgz", + "integrity": "sha512-457S/w+VuHnh4jw03ingrVAx8jMbxRz+jGGjoTeEFPZzv20GDzPUauQQqDy71EYw6BiNscC0RGOaLvAcS6BZ9Q==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, "JSONStream": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", @@ -206,9 +224,9 @@ } }, "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==" + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -263,7 +281,7 @@ "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "xtend": "4.0.1" } }, @@ -295,7 +313,7 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -335,7 +353,7 @@ "resolved": "https://registry.npmjs.org/amazon-payments/-/amazon-payments-0.2.6.tgz", "integrity": "sha1-4e34TDjOJXzApFwnPaByaHVhs20=", "requires": { - "request": "2.83.0", + "request": "2.85.0", "xml2js": "0.4.4" }, "dependencies": { @@ -422,7 +440,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "qs": { @@ -431,9 +449,9 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", @@ -454,7 +472,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -642,7 +660,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.8", + "micromatch": "3.1.9", "normalize-path": "2.1.1" } }, @@ -757,7 +775,7 @@ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { "delegates": "1.0.0", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "argparse": { @@ -965,9 +983,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.1.tgz", - "integrity": "sha512-BAlXqqeEhVEajhgz7rgerupI8sb695KpCaJ/w4Sb9s2LoUci8sSMhXw93Jp8MsOufWGJOY/P2jpUEVw4RlSzNw==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true }, "astw": { @@ -1050,18 +1068,13 @@ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" }, - "attempt-x": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz", - "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA==" - }, "autoprefixer": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.1.0.tgz", "integrity": "sha512-b6mjq6VZ0guW6evRkKXL5sSSvIXICAE9dyWReZ3l/riidU7bVaJMe5cQ512SmaLA4Pvgnhi5MFsMs/Mvyh9//Q==", "requires": { "browserslist": "3.1.2", - "caniuse-lite": "1.0.30000814", + "caniuse-lite": "1.0.30000815", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "6.0.19", @@ -1069,9 +1082,9 @@ } }, "aws-sdk": { - "version": "2.209.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.209.0.tgz", - "integrity": "sha1-z+bKI3NvZlkystFMyOTknX6dIMw=", + "version": "2.211.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.211.0.tgz", + "integrity": "sha1-kCt1Jedv+fpyzQOLc7ikfIxnGmI=", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -1199,18 +1212,18 @@ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz", "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==", "requires": { - "@babel/code-frame": "7.0.0-beta.40", - "@babel/traverse": "7.0.0-beta.40", - "@babel/types": "7.0.0-beta.40", - "babylon": "7.0.0-beta.40", + "@babel/code-frame": "7.0.0-beta.41", + "@babel/traverse": "7.0.0-beta.41", + "@babel/types": "7.0.0-beta.41", + "babylon": "7.0.0-beta.41", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz", - "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==" + "version": "7.0.0-beta.41", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.41.tgz", + "integrity": "sha512-AfQfqR9hbNSpY/9yyGaUAiT1tmyHzaJbHJpqkfn8DGAUkPTG5VwPoulajQu3FUQXTr8NGm4MFaupVzmWkvln4Q==" } } }, @@ -1307,18 +1320,6 @@ "lodash": "4.17.5" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", @@ -1377,35 +1378,6 @@ "find-up": "2.1.0", "istanbul-lib-instrument": "1.10.1", "test-exclude": "4.2.1" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", - "dev": true, - "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.0", - "semver": "5.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } } }, "babel-plugin-syntax-async-functions": { @@ -1423,17 +1395,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" }, - "babel-plugin-transform-async-to-module-method": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-module-method/-/babel-plugin-transform-async-to-module-method-6.24.1.tgz", - "integrity": "sha1-kQmgiYd5S0EcshOFDOk17C8CnNs=", - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", @@ -1767,7 +1728,7 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.3", + "invariant": "2.2.4", "lodash": "4.17.5" } }, @@ -1854,7 +1815,7 @@ "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-0.1.3.tgz", "integrity": "sha1-drA3C3ebuBbRL9QXZKa4Vz61/sM=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "base64id": { @@ -2037,7 +1998,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "blob": { @@ -2188,10 +2149,10 @@ "isobject": "3.0.1", "kind-of": "6.0.2", "repeat-element": "1.1.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", "split-string": "3.1.0", - "to-regex": "3.0.1" + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2228,7 +2189,7 @@ "defined": "1.0.0", "safe-buffer": "5.1.1", "through2": "2.0.3", - "umd": "3.0.1" + "umd": "3.0.3" } }, "browser-resolve": { @@ -2280,7 +2241,7 @@ "htmlescape": "1.1.1", "https-browserify": "1.0.0", "inherits": "2.0.3", - "insert-module-globals": "7.0.1", + "insert-module-globals": "7.0.2", "labeled-stream-splicer": "2.0.0", "module-deps": "4.1.1", "os-browserify": "0.3.0", @@ -2290,12 +2251,12 @@ "punycode": "1.4.1", "querystring-es3": "0.2.1", "read-only-stream": "2.0.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "resolve": "1.5.0", "shasum": "1.0.2", "shell-quote": "1.6.1", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "subarg": "1.0.0", "syntax-error": "1.4.0", @@ -2461,21 +2422,14 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.1.2.tgz", "integrity": "sha512-iO5MiK7MZXejqfnCK8onktxxb+mcW+KMiL/5gGF/UCWvVgPzbgbkA5cyYfqj/IIHHo7X1z0znrSHPw9AIfpvrw==", "requires": { - "caniuse-lite": "1.0.30000814", + "caniuse-lite": "1.0.30000815", "electron-to-chromium": "1.3.37" - }, - "dependencies": { - "electron-to-chromium": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz", - "integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=" - } } }, "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" }, "buffer": { "version": "4.9.1", @@ -2498,13 +2452,10 @@ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" }, "buffer-from": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", - "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", - "optional": true, - "requires": { - "is-array-buffer-x": "1.7.0" - } + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", + "optional": true }, "buffer-more-ints": { "version": "0.0.2", @@ -2524,7 +2475,7 @@ "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", "requires": { "file-type": "3.9.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "uuid": "2.0.3", "vinyl": "1.2.0" }, @@ -2667,11 +2618,6 @@ } } }, - "cached-constructors-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz", - "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A==" - }, "cached-path-relative": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", @@ -2735,7 +2681,7 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000810", + "caniuse-db": "1.0.30000815", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -2745,21 +2691,21 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.34" + "caniuse-db": "1.0.30000815", + "electron-to-chromium": "1.3.37" } } } }, "caniuse-db": { - "version": "1.0.30000810", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000810.tgz", - "integrity": "sha1-vSWDDEHvq2Qzmi44H0lnc0PIRQk=" + "version": "1.0.30000815", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000815.tgz", + "integrity": "sha1-DiGPoTPQ0HHIhqoEG0NSWMx0aJE=" }, "caniuse-lite": { - "version": "1.0.30000814", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000814.tgz", - "integrity": "sha512-Kt4dBhVlnTZ+jj+C8Bd4WT6RT4EJoX5/tlktHQfpqIMgLVrG1KBQlLf010ipMvuNrpQiAJ2A54e6MMbA0BaKxg==" + "version": "1.0.30000815", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz", + "integrity": "sha512-PGSOPK6gFe5fWd+eD0u2bG0aOsN1qC4B1E66tl3jOsIoKkTIcBYAc2+O6AeNzKW8RsFykWgnhkTlfOyuTzgI9A==" }, "capture-stack-trace": { "version": "1.0.0", @@ -2801,13 +2747,6 @@ "requires": { "align-text": "0.1.4", "lazy-cache": "1.0.4" - }, - "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - } } }, "chai": { @@ -3053,7 +2992,7 @@ "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", "readdirp": "2.1.0", - "upath": "1.0.2" + "upath": "1.0.4" } }, "chromedriver": { @@ -3163,7 +3102,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "qs": { @@ -3197,7 +3136,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -3332,9 +3271,9 @@ } }, "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "requires": { "source-map": "0.5.7" }, @@ -3414,20 +3353,13 @@ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" }, "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "requires": { "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - } + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.5" } }, "co": { @@ -3574,15 +3506,21 @@ } }, "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", + "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -3610,7 +3548,7 @@ }, "compression": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "requires": { "accepts": "1.3.5", @@ -3628,12 +3566,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "typedarray": "0.0.6" } }, @@ -3660,6 +3598,29 @@ "finalhandler": "1.1.0", "parseurl": "1.3.2", "utils-merge": "1.0.1" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } } }, "connect-history-api-fallback": { @@ -3854,7 +3815,7 @@ "lcov-parse": "0.0.10", "log-driver": "1.2.7", "minimist": "1.2.0", - "request": "2.83.0" + "request": "2.85.0" }, "dependencies": { "assert-plus": { @@ -3951,7 +3912,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "minimist": { @@ -3967,9 +3928,9 @@ "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { "aws-sign2": "0.7.0", @@ -3991,7 +3952,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -4071,7 +4032,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -4136,9 +4097,9 @@ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" }, "css-loader": { - "version": "0.28.10", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz", - "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "requires": { "babel-code-frame": "6.26.0", "css-selector-tokenizer": "0.7.0", @@ -4320,7 +4281,7 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000810", + "caniuse-db": "1.0.30000815", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -4332,8 +4293,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.34" + "caniuse-db": "1.0.30000815", + "electron-to-chromium": "1.3.37" } }, "chalk": { @@ -4477,7 +4438,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.39" + "es5-ext": "0.10.40" } }, "dashdash": { @@ -4545,7 +4506,7 @@ "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", "requires": { "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", + "concat-stream": "1.6.1", "decompress-tar": "3.1.0", "decompress-tarbz2": "3.1.0", "decompress-targz": "3.1.0", @@ -4713,7 +4674,7 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "requires": { "is-stream": "1.1.0", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "replace-ext": { @@ -4749,7 +4710,7 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "requires": { - "duplexify": "3.5.3", + "duplexify": "3.5.4", "glob-stream": "5.3.5", "graceful-fs": "4.1.11", "gulp-sourcemaps": "1.6.0", @@ -4759,7 +4720,7 @@ "merge-stream": "1.0.1", "mkdirp": "0.5.1", "object-assign": "4.1.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "strip-bom": "2.0.0", "strip-bom-stream": "1.0.0", "through2": "2.0.3", @@ -5108,7 +5069,7 @@ "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", "dev": true, "requires": { - "ast-types": "0.11.1", + "ast-types": "0.11.3", "escodegen": "1.3.3", "esprima": "3.1.3" }, @@ -5199,7 +5160,7 @@ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "defined": "1.0.0" } }, @@ -5334,7 +5295,7 @@ "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", "requires": { "caw": "1.2.0", - "concat-stream": "1.6.0", + "concat-stream": "1.6.1", "each-async": "1.1.1", "filenamify": "1.2.1", "got": "5.7.1", @@ -5343,7 +5304,7 @@ "is-url": "1.2.2", "object-assign": "4.1.1", "read-all-stream": "3.1.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "stream-combiner2": "1.1.1", "vinyl": "1.2.0", "vinyl-fs": "2.4.4", @@ -5467,7 +5428,7 @@ "parse-json": "2.2.0", "pinkie-promise": "2.0.1", "read-all-stream": "3.1.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "timed-out": "3.1.3", "unzip-response": "1.0.2", "url-parse-lax": "1.0.0" @@ -5530,7 +5491,7 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "requires": { "is-stream": "1.1.0", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "replace-ext": { @@ -5579,7 +5540,7 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "requires": { - "duplexify": "3.5.3", + "duplexify": "3.5.4", "glob-stream": "5.3.5", "graceful-fs": "4.1.11", "gulp-sourcemaps": "1.6.0", @@ -5589,7 +5550,7 @@ "merge-stream": "1.0.1", "mkdirp": "0.5.1", "object-assign": "4.1.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "strip-bom": "2.0.0", "strip-bom-stream": "1.0.0", "through2": "2.0.3", @@ -5610,7 +5571,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "duplexer3": { @@ -5619,13 +5580,13 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "duplexify": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", - "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "requires": { "end-of-stream": "1.4.1", "inherits": "2.0.3", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "stream-shift": "1.0.0" } }, @@ -5640,7 +5601,7 @@ "dependencies": { "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" } } @@ -5746,9 +5707,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz", - "integrity": "sha1-2TSY9AORuwwWpgPYJBuZUUBBV+0=" + "version": "1.3.37", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz", + "integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=" }, "elliptic": { "version": "6.4.0", @@ -5834,9 +5795,9 @@ } }, "engine.io-client": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.5.tgz", - "integrity": "sha512-Rv9vgb83zrNVhRircUXHi4mtbJhgy2oWtJOCZEbCLFs2HiDSWmh/aOEj8TwoKsn8zXGqTuQuPSoU4v3E10bR6A==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", "dev": true, "requires": { "component-emitter": "1.2.1", @@ -5954,9 +5915,9 @@ } }, "es5-ext": { - "version": "0.10.39", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", - "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", + "version": "0.10.40", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.40.tgz", + "integrity": "sha512-S9Fh3oya5OOvYSNGvPZJ+vyrs6VYpe1IXPowVe3N1OhaiwVaGlwfn3Zf5P5klYcWOA0toIwYQW8XEv/QqhdHvQ==", "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" @@ -5968,7 +5929,7 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.40", "es6-symbol": "3.1.1" } }, @@ -5978,7 +5939,7 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.40", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -5986,10 +5947,9 @@ } }, "es6-promise": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", - "dev": true + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" }, "es6-promisify": { "version": "5.0.0", @@ -5998,14 +5958,6 @@ "dev": true, "requires": { "es6-promise": "4.2.4" - }, - "dependencies": { - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - } } }, "es6-set": { @@ -6014,7 +5966,7 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.40", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -6026,7 +5978,7 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39" + "es5-ext": "0.10.40" } }, "es6-weak-map": { @@ -6035,7 +5987,7 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.40", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -6094,20 +6046,20 @@ "requires": { "es6-map": "0.1.5", "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, "eslint": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz", - "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.0.tgz", + "integrity": "sha512-r83L5CuqaocDvfwdojbz68b6tCUk8KJkqfppO+gmSAQqYCzTr0bCSMu6A6yFCLKG65j5eKcKUw4Cw4Yl4gfWkg==", "dev": true, "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", "chalk": "2.3.2", - "concat-stream": "1.6.0", + "concat-stream": "1.6.1", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", @@ -6135,6 +6087,7 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.0.1", "require-uncached": "1.0.3", "semver": "5.5.0", "strip-ansi": "4.0.0", @@ -6155,7 +6108,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -6259,15 +6212,15 @@ } }, "eslint-loader": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", - "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.0.0.tgz", + "integrity": "sha512-VxxGDI4bXzLk0+/jMt/0EkGMRKS9ox6Czx+yapMb9WJmcS/ZHhlhqcVUNgUjFBNp02j/2pZLdGOrG7EXyjoz/g==", "dev": true, "requires": { "loader-fs-cache": "1.0.1", "loader-utils": "1.1.0", "object-assign": "4.1.1", - "object-hash": "1.2.0", + "object-hash": "1.3.0", "rimraf": "2.6.2" } }, @@ -6300,7 +6253,7 @@ "domutils": "1.5.1", "entities": "1.1.1", "inherits": "2.0.3", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } } } @@ -6329,7 +6282,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -6346,14 +6299,6 @@ "requires": { "acorn": "5.5.3", "acorn-jsx": "3.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } } }, "esprima": { @@ -6371,12 +6316,11 @@ } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -6400,12 +6344,12 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { "d": "1.0.0", - "es5-ext": "0.10.39" + "es5-ext": "0.10.40" } }, "event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "requires": { "duplexer": "0.1.1", @@ -6484,7 +6428,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -6566,8 +6510,8 @@ "extend-shallow": "2.0.1", "posix-character-classes": "0.1.1", "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -6736,20 +6680,6 @@ "vary": "1.1.2" }, "dependencies": { - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - } - }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", @@ -6824,8 +6754,8 @@ "extend-shallow": "2.0.1", "fragment-cache": "0.2.1", "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -6878,6 +6808,16 @@ "yauzl": "2.4.1" }, "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, "mkdirp": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", @@ -6911,7 +6851,7 @@ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz", "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=", "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "foreach": "2.0.5", "isarray": "0.0.1", "object-keys": "1.0.11" @@ -6935,9 +6875,9 @@ } }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -6995,7 +6935,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -7094,26 +7034,17 @@ } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } } }, "find-cache-dir": { @@ -7158,7 +7089,7 @@ "requires": { "detect-file": "1.0.0", "is-glob": "3.1.0", - "micromatch": "3.1.8", + "micromatch": "3.1.9", "resolve-dir": "1.0.1" }, "dependencies": { @@ -7254,7 +7185,7 @@ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "follow-redirects": { @@ -7318,9 +7249,9 @@ } }, "formidable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", - "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.0.tgz", + "integrity": "sha512-hr9aT30rAi7kf8Q2aaTpSP7xGMhlJ+MdrUDVZs3rxbD3L/K46A86s2VY7qC2D2kGYGBtiT/3j6wTx1eeUq5xAQ==" }, "forwarded": { "version": "0.1.2", @@ -7351,7 +7282,7 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "fs-access": { @@ -7390,7 +7321,7 @@ "graceful-fs": "4.1.11", "iferr": "0.1.5", "imurmurhash": "0.1.4", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "fs.realpath": { @@ -8439,7 +8370,7 @@ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", "requires": { - "rc": "1.2.5" + "rc": "1.2.6" } }, "get-res": { @@ -8472,7 +8403,7 @@ "extend": "3.0.1", "file-uri-to-path": "1.0.0", "ftp": "0.3.10", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" }, "dependencies": { "data-uri-to-buffer": { @@ -8620,7 +8551,7 @@ "is-negated-glob": "1.0.0", "ordered-read-streams": "1.0.1", "pumpify": "1.4.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "remove-trailing-separator": "1.1.0", "to-absolute-glob": "2.0.2", "unique-stream": "2.2.1" @@ -8817,7 +8748,7 @@ "archy": "1.0.0", "array-sort": "1.0.0", "color-support": "1.1.3", - "concat-stream": "1.6.0", + "concat-stream": "1.6.1", "copy-props": "2.0.1", "fancy-log": "1.3.2", "gulplog": "1.0.0", @@ -8829,7 +8760,7 @@ "pretty-hrtime": "1.0.3", "replace-homedir": "1.0.0", "semver-greatest-satisfied-range": "1.1.0", - "v8flags": "3.0.1", + "v8flags": "3.0.2", "yargs": "7.1.0" } } @@ -8861,7 +8792,7 @@ "archive-type": "3.2.0", "decompress": "3.0.0", "gulp-util": "3.0.8", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "gulp-imagemin": { @@ -8936,7 +8867,7 @@ "colors": "1.0.3", "event-stream": "3.3.4", "gulp": "3.9.1", - "nodemon": "1.15.1" + "nodemon": "1.17.2" }, "dependencies": { "chalk": { @@ -9348,7 +9279,7 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "requires": { "chalk": "1.1.3", - "commander": "2.14.1", + "commander": "2.15.0", "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" }, @@ -9424,21 +9355,10 @@ "sparkles": "1.0.0" } }, - "has-own-property-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", - "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", - "optional": true, - "requires": { - "cached-constructors-x": "1.0.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { "version": "1.0.0", @@ -9450,7 +9370,7 @@ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { - "has-symbol-support-x": "1.4.1" + "has-symbol-support-x": "1.4.2" } }, "has-unicode": { @@ -9583,9 +9503,9 @@ } }, "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==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" }, "html-comment-regex": { "version": "1.1.1", @@ -9599,42 +9519,43 @@ "dev": true }, "html-minifier": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.9.tgz", - "integrity": "sha512-EZqO91XJwkj8BeLx9C12sKB/AHoTANaZax39vEOP9f/X/9jgJ3r1O2+neabuHqpz5kJO71TapP9JrtCY39su1A==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.11.tgz", + "integrity": "sha512-kIi9C090qWW5cGxEf+EwNUczduyVR6krk29WB3zDSWBQN6xuh/1jCXgmY4SvqzaJMOZFCnf8wcNzA8iPsfLiUQ==", "requires": { "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.14.1", + "clean-css": "4.1.11", + "commander": "2.15.0", "he": "1.1.1", "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.3.12" + "uglify-js": "3.3.15" }, "dependencies": { "uglify-js": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.12.tgz", - "integrity": "sha512-4jxrTXlV0HaXTsNILfXW0eey7Qo8qHYM6ih5ZNh45erDWU2GHmKDmekwBTskDb12h+kdd2DBvdzqVb47YzNmTA==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.15.tgz", + "integrity": "sha512-bqtBCAINYXX/OkdnqMGpbXr+OPWc00hsozRpk+dAtfnbdk2jjKiLmyOkQ7zamg648lVMnzATL8JrSN6LmaVpYA==", "requires": { - "commander": "2.14.1", + "commander": "2.15.0", "source-map": "0.6.1" } } } }, "html-webpack-plugin": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.0.6.tgz", + "integrity": "sha1-01sEUqrhKaip8/rEShaaYl2M8/o=", "requires": { - "bluebird": "3.5.1", - "html-minifier": "3.5.9", + "html-minifier": "3.5.11", "loader-utils": "0.2.17", "lodash": "4.17.5", "pretty-error": "2.1.1", - "toposort": "1.0.6" + "tapable": "1.0.0", + "toposort": "1.0.6", + "util.promisify": "1.0.0" }, "dependencies": { "loader-utils": { @@ -9647,6 +9568,11 @@ "json5": "0.5.1", "object-assign": "4.1.1" } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==" } } }, @@ -9743,125 +9669,15 @@ } }, "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { "http-proxy": "1.16.2", - "is-glob": "3.1.0", + "is-glob": "4.0.0", "lodash": "4.17.5", - "micromatch": "2.3.11" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - } + "micromatch": "3.1.9" } }, "http-signature": { @@ -9871,7 +9687,7 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "httpntlm": { @@ -10025,7 +9841,7 @@ "integrity": "sha512-xwjBZQKpbkklHtJYnCOwRJjTRJA/nR0hQzKMh+CUZRvm/L0QwKKPJQ9tkPWQHrg+cydPu2i1vLgHuy2E0hKEkg==", "optional": true, "requires": { - "buffer-from": "0.1.1", + "buffer-from": "0.1.2", "is-svg": "2.1.0", "svgo": "1.0.5" } @@ -10133,7 +9949,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "qs": { @@ -10165,7 +9981,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -10211,12 +10027,6 @@ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, - "infinity-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz", - "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ==", - "optional": true - }, "inflection": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", @@ -10324,9 +10134,9 @@ } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz", + "integrity": "sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw==", "dev": true, "requires": { "JSONStream": "1.3.2", @@ -10428,9 +10238,9 @@ "integrity": "sha1-LtyjftaoqSi5amXa/ySMhDK6cbU=" }, "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { "loose-envify": "1.3.1" } @@ -10489,19 +10299,6 @@ "kind-of": "6.0.2" } }, - "is-array-buffer-x": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", - "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", - "optional": true, - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-object-like-x": "1.7.0", - "object-get-own-property-descriptor-x": "3.2.0", - "to-string-tag-x": "1.4.2" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -10605,14 +10402,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "is-falsey-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz", - "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==", - "requires": { - "to-boolean-x": "1.0.1" - } - }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", @@ -10621,16 +10410,6 @@ "number-is-nan": "1.0.1" } }, - "is-finite-x": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz", - "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==", - "optional": true, - "requires": { - "infinity-x": "1.0.0", - "is-nan-x": "1.0.1" - } - }, "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", @@ -10639,21 +10418,6 @@ "number-is-nan": "1.0.1" } }, - "is-function-x": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", - "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", - "requires": { - "attempt-x": "1.1.1", - "has-to-string-tag-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-primitive": "2.0.0", - "normalize-space-x": "3.0.0", - "replace-comments-x": "2.0.0", - "to-boolean-x": "1.0.1", - "to-string-tag-x": "1.4.2" - } - }, "is-gif": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", @@ -10673,19 +10437,6 @@ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=" }, - "is-index-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", - "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", - "optional": true, - "requires": { - "math-clamp-x": "1.2.0", - "max-safe-integer": "1.0.1", - "to-integer-x": "3.0.0", - "to-number-x": "2.0.0", - "to-string-symbols-supported-x": "1.0.0" - } - }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", @@ -10718,11 +10469,6 @@ "xtend": "4.0.1" } }, - "is-nan-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz", - "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw==" - }, "is-natural-number": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", @@ -10733,15 +10479,6 @@ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" }, - "is-nil-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz", - "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -10775,24 +10512,6 @@ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" }, - "is-object-like-x": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.7.0.tgz", - "integrity": "sha512-B8Bi1F34O1LxZltWAS+V4SHcOphLD1WHRqe800h2bOfQUBE9azkkKlOQUh8OJviT5/f1ZX43k4yi8DW7OOKPxg==", - "optional": true, - "requires": { - "is-function-x": "3.3.0", - "is-primitive": "3.0.0" - }, - "dependencies": { - "is-primitive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.0.tgz", - "integrity": "sha512-Qch+MMfMdu7DMY6XElM7LUJKPmkbXdTqNhqyehVflzis2a8Zd9V6U8qZybb32uUSmlO/dNmg3fsA5t0Q9TC0mA==", - "optional": true - } - } - }, "is-odd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", @@ -10905,12 +10624,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "optional": true - }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", @@ -11001,7 +10714,7 @@ "requires": { "abbrev": "1.0.9", "async": "1.5.2", - "istanbul-api": "1.2.2", + "istanbul-api": "1.3.1", "js-yaml": "3.7.0", "mkdirp": "0.5.1", "nopt": "3.0.6", @@ -11033,19 +10746,20 @@ } }, "istanbul-api": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.2.tgz", - "integrity": "sha512-kH5YRdqdbs5hiH4/Rr1Q0cSAGgjh3jTtg8vu9NLebBAoK3adVO4jk81J+TYOkTr2+Q4NLeb1ACvmEt65iG/Vbw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", "dev": true, "requires": { "async": "2.6.0", + "compare-versions": "3.1.0", "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.2", - "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-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", "js-yaml": "3.7.0", "mkdirp": "0.5.1", "once": "1.4.0" @@ -11063,24 +10777,24 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", "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.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { "babel-generator": "6.26.1", @@ -11088,7 +10802,7 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "semver": "5.5.0" }, "dependencies": { @@ -11101,12 +10815,12 @@ } }, "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.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -11130,13 +10844,13 @@ } }, "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.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", "dev": true, "requires": { "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" @@ -11160,9 +10874,9 @@ } }, "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.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { "handlebars": "4.0.11" @@ -11377,7 +11091,7 @@ "body-parser": "1.18.2", "browserify": "14.5.0", "chokidar": "1.7.0", - "colors": "1.1.2", + "colors": "1.2.1", "combine-lists": "1.0.1", "connect": "3.6.6", "core-js": "2.5.3", @@ -11457,9 +11171,9 @@ } }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", "dev": true }, "expand-brackets": { @@ -11630,6 +11344,12 @@ } } }, + "sinon-chai": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", + "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", + "dev": true + }, "type-detect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", @@ -11868,13 +11588,13 @@ "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", "dev": true, "requires": { - "colors": "1.1.2" + "colors": "1.2.1" }, "dependencies": { "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", "dev": true } } @@ -12013,12 +11733,9 @@ } }, "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "requires": { - "set-getter": "0.1.0" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, "lazy-req": { "version": "1.1.0", @@ -12031,7 +11748,7 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "lcid": { @@ -12235,7 +11952,7 @@ "dev": true, "requires": { "is-stream": "1.1.0", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "replace-ext": { @@ -12265,7 +11982,7 @@ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "dev": true, "requires": { - "duplexify": "3.5.3", + "duplexify": "3.5.4", "glob-stream": "5.3.5", "graceful-fs": "4.1.11", "gulp-sourcemaps": "1.6.0", @@ -12275,7 +11992,7 @@ "merge-stream": "1.0.1", "mkdirp": "0.5.1", "object-assign": "4.1.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "strip-bom": "2.0.0", "strip-bom-stream": "1.0.0", "through2": "2.0.3", @@ -12640,11 +12357,6 @@ } } }, - "lodash.endswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", - "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk=" - }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", @@ -12673,26 +12385,11 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "lodash.isnull": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", - "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" - }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", @@ -12735,11 +12432,6 @@ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=" }, - "lodash.startswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=" - }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -13017,7 +12709,7 @@ "oauth-sign": "0.8.2", "qs": "6.2.3", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3" } }, @@ -13087,9 +12779,9 @@ } }, "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==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -13247,41 +12939,16 @@ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", "requires": { "findup-sync": "2.0.0", - "micromatch": "3.1.8", + "micromatch": "3.1.9", "resolve": "1.5.0", "stack-trace": "0.0.10" } }, - "math-clamp-x": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", - "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", - "optional": true, - "requires": { - "to-number-x": "2.0.0" - } - }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" }, - "math-sign-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", - "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", - "optional": true, - "requires": { - "is-nan-x": "1.0.1", - "to-number-x": "2.0.0" - } - }, - "max-safe-integer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz", - "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA=", - "optional": true - }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -13331,7 +12998,7 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { "errno": "0.1.7", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "memwatch-next": { @@ -13377,7 +13044,7 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "method-override": { @@ -13397,9 +13064,9 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.8.tgz", - "integrity": "sha512-/XeuOQqYg+B5kwjDWekXseSwGS7CzE0w9Gjo4Cjkf/uFitNh47NrZHAY2vp/oS2YQVfebPIdbEIvgdy+kIcAog==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", @@ -13412,8 +13079,8 @@ "nanomatch": "1.2.9", "object.pick": "1.3.0", "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "miller-rabin": { @@ -13693,7 +13360,7 @@ "duplexer2": "0.1.4", "inherits": "2.0.3", "parents": "1.0.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "resolve": "1.5.0", "stream-combiner2": "1.1.1", "subarg": "1.0.0", @@ -13756,16 +13423,99 @@ } }, "mongodb": { - "version": "2.2.34", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz", - "integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=", - "dev": true, + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", + "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.18", - "readable-stream": "2.2.7" + "mongodb-core": "3.0.4" + } + }, + "mongodb-core": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", + "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", + "requires": { + "bson": "1.0.6", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.10.tgz", + "integrity": "sha512-vBfFP6hOHBdsWogc84cLofclWVAiu0+q0/oLxL/y61RUpW4K3BIGH2QhI+7lPBrGpGS1Yk/KfnumndWQI7wZiA==", + "requires": { + "async": "2.1.4", + "bson": "1.0.6", + "kareem": "2.0.5", + "lodash.get": "4.4.2", + "mongodb": "3.0.4", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.3.0", + "mquery": "3.0.0", + "ms": "2.0.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" }, "dependencies": { + "async": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.5" + } + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "monk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.5.tgz", + "integrity": "sha512-NEygZ2fhRkPE9zxyOT/GhEYKIGClMCQ+StsTruZSlAWf1aRsgvdu8suVvOj3KWfdiOtsIMs9gg8eyyVHPNWRwg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "mongodb": "2.2.35", + "monk-middleware-cast-ids": "0.2.1", + "monk-middleware-fields": "0.2.0", + "monk-middleware-handle-callback": "0.2.2", + "monk-middleware-options": "0.2.1", + "monk-middleware-query": "0.2.0", + "monk-middleware-wait-for-connection": "0.2.0", + "object-assign": "4.1.1" + }, + "dependencies": { + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", + "dev": true + }, + "mongodb": { + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.35.tgz", + "integrity": "sha512-3HGLucDg/8EeYMin3k+nFWChTA85hcYDCw1lPsWR6yV9A6RgKb24BkLiZ9ySZR+S0nfBjWoIUS7cyV6ceGx5Gg==", + "dev": true, + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.19", + "readable-stream": "2.2.7" + } + }, + "mongodb-core": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.19.tgz", + "integrity": "sha512-Jt4AtWUkpuW03kRdYGxga4O65O1UHlFfvvInslEfLlGi+zDMxbBe3J2NVmN9qPJ957Mn6Iz0UpMtV80cmxCVxw==", + "dev": true, + "requires": { + "bson": "1.0.6", + "require_optional": "1.0.1" + } + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -13789,83 +13539,6 @@ } } }, - "mongodb-core": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz", - "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=", - "dev": true, - "requires": { - "bson": "1.0.4", - "require_optional": "1.0.1" - } - }, - "mongoose": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.10.tgz", - "integrity": "sha512-vBfFP6hOHBdsWogc84cLofclWVAiu0+q0/oLxL/y61RUpW4K3BIGH2QhI+7lPBrGpGS1Yk/KfnumndWQI7wZiA==", - "requires": { - "async": "2.1.4", - "bson": "1.0.4", - "kareem": "2.0.5", - "lodash.get": "4.4.2", - "mongodb": "3.0.4", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.3.0", - "mquery": "3.0.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "async": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", - "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", - "requires": { - "lodash": "4.17.5" - } - }, - "mongodb": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", - "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", - "requires": { - "mongodb-core": "3.0.4" - } - }, - "mongodb-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", - "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", - "requires": { - "bson": "1.0.4", - "require_optional": "1.0.1" - } - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "monk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.5.tgz", - "integrity": "sha512-NEygZ2fhRkPE9zxyOT/GhEYKIGClMCQ+StsTruZSlAWf1aRsgvdu8suVvOj3KWfdiOtsIMs9gg8eyyVHPNWRwg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "mongodb": "2.2.34", - "monk-middleware-cast-ids": "0.2.1", - "monk-middleware-fields": "0.2.0", - "monk-middleware-handle-callback": "0.2.2", - "monk-middleware-options": "0.2.1", - "monk-middleware-query": "0.2.0", - "monk-middleware-wait-for-connection": "0.2.0", - "object-assign": "4.1.1" - } - }, "monk-middleware-cast-ids": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/monk-middleware-cast-ids/-/monk-middleware-cast-ids-0.2.1.tgz", @@ -14016,11 +13689,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" }, - "nan-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz", - "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg==" - }, "nanomatch": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", @@ -14036,8 +13704,8 @@ "kind-of": "6.0.2", "object.pick": "1.3.0", "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "native-promise-only": { @@ -14194,9 +13862,9 @@ } }, "nise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.0.tgz", - "integrity": "sha512-U+Krdzhsw4losPP/Rij5UGTLQgS9gaWmXdRIbZQIQWVsUGDBo+N0m9mrY9CCEnmwssgswwydxLJUZtFfouC0gA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.1.tgz", + "integrity": "sha512-kIH3X5YCj1vvj/32zDa9KNgzvfZd51ItGbiaCbtYhpnsCedLo0tIkb9zl169a41ATzF4z7kwMLz35XXDypma3g==", "dev": true, "requires": { "@sinonjs/formatio": "2.0.0", @@ -14341,7 +14009,7 @@ "qs": "6.4.0", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -14410,9 +14078,9 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "timers-browserify": "2.0.6", "tty-browserify": "0.0.0", @@ -14440,9 +14108,9 @@ } }, "node-loggly-bulk": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-2.2.1.tgz", - "integrity": "sha512-7kd74XsTz+sEwnGCAAAQW57zHKzM0N9LWJctv9aMyC5Sw8lTBTlNyCoBhG7dgaJdTu9+bnHQu8p1trlh9O+Kog==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-2.2.2.tgz", + "integrity": "sha512-1mjTyyiNID8WXpN1afvsuK4Qp7JX/JsKdnO5xMJpRfEo8ePleCBvWVyaDpJgWuypxZ4BGHcH2MKMe4TClbb5dA==", "requires": { "json-stringify-safe": "5.0.1", "moment": "2.21.0", @@ -14457,8 +14125,8 @@ "mkdirp": "0.5.1", "nopt": "4.0.1", "npmlog": "4.1.2", - "rc": "1.2.5", - "request": "2.83.0", + "rc": "1.2.6", + "request": "2.85.0", "rimraf": "2.6.2", "semver": "5.5.0", "tar": "2.2.1", @@ -14548,7 +14216,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "qs": { @@ -14557,9 +14225,9 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", @@ -14580,7 +14248,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -14609,9 +14277,9 @@ } }, "node-rdkafka": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-rdkafka/-/node-rdkafka-2.3.0.tgz", - "integrity": "sha1-Qvlwmc6Z1/so2y4QUaiyuFlHkRA=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/node-rdkafka/-/node-rdkafka-2.3.1.tgz", + "integrity": "sha1-HBC4XJlyQ9UKFLCcA+6PI3DfjVY=", "optional": true, "requires": { "bindings": "1.3.0", @@ -14661,7 +14329,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "which": "1.3.0" } }, @@ -14710,7 +14378,7 @@ "oauth-sign": "0.8.2", "qs": "6.3.2", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3", "uuid": "3.2.1" } @@ -14784,9 +14452,9 @@ "dev": true }, "nodemon": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.15.1.tgz", - "integrity": "sha512-zWNke/X74j3ljDRCXnhURTLJaCxew31ax4azoPQyRYAoUBqNIlZGaNpMcyi/A/ylkGKWFiUzf7HHFyA/cveTcQ==", + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.17.2.tgz", + "integrity": "sha512-v1fVfgaZanBHP/ZOc9V72uKKIF4dcRfZV7GISNVi/w/g5pwB7nIvOK+RGULjrzhs97cwUX41cM4+dlw+bg2igw==", "requires": { "chokidar": "2.0.2", "debug": "3.1.0", @@ -14794,6 +14462,7 @@ "minimatch": "3.0.4", "pstree.remy": "1.1.0", "semver": "5.5.0", + "supports-color": "5.3.0", "touch": "3.1.0", "undefsafe": "2.0.2", "update-notifier": "2.3.0" @@ -14811,6 +14480,14 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "requires": { + "has-flag": "3.0.0" + } } } }, @@ -14859,10 +14536,10 @@ "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==", "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", "semver": "5.0.3", - "validate-npm-package-license": "3.0.1" + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -14878,16 +14555,6 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, - "normalize-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", - "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "trim-x": "3.0.0", - "white-space-x": "3.0.0" - } - }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", @@ -15037,28 +14704,10 @@ } } }, - "object-get-own-property-descriptor-x": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", - "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", - "optional": true, - "requires": { - "attempt-x": "1.1.1", - "has-own-property-x": "3.2.0", - "has-symbol-support-x": "1.4.1", - "is-falsey-x": "1.0.1", - "is-index-x": "1.1.0", - "is-primitive": "2.0.0", - "is-string": "1.0.4", - "property-is-enumerable-x": "1.1.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, "object-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", - "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", "dev": true }, "object-inspect": { @@ -15370,7 +15019,7 @@ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "os-browserify": { @@ -15670,7 +15319,7 @@ "resolved": "https://registry.npmjs.org/parse-cookie-phantomjs/-/parse-cookie-phantomjs-1.2.0.tgz", "integrity": "sha1-YNS782NpHYDLK3LE+vfUDekOS9c=", "requires": { - "tough-cookie": "2.3.3" + "tough-cookie": "2.3.4" } }, "parse-data-uri": { @@ -15717,17 +15366,6 @@ } } }, - "parse-int-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", - "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "to-string-x": "1.4.2", - "trim-left-x": "3.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -15979,7 +15617,7 @@ "hasha": "2.2.0", "kew": "0.7.0", "progress": "1.1.8", - "request": "2.83.0", + "request": "2.85.0", "request-progress": "2.0.1", "which": "1.3.0" }, @@ -16025,11 +15663,6 @@ } } }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" - }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", @@ -16082,7 +15715,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "jsonfile": { @@ -16099,9 +15732,9 @@ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", @@ -16122,7 +15755,7 @@ "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -16157,7 +15790,7 @@ }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "resolved": "http://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "2.0.4" @@ -16289,13 +15922,13 @@ "requires": { "chalk": "2.3.2", "source-map": "0.6.1", - "supports-color": "5.2.0" + "supports-color": "5.3.0" }, "dependencies": { "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "requires": { "has-flag": "3.0.0" } @@ -17022,8 +16655,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000810", - "electron-to-chromium": "1.3.34" + "caniuse-db": "1.0.30000815", + "electron-to-chromium": "1.3.37" } }, "chalk": { @@ -18000,16 +17633,6 @@ "asap": "2.0.6" } }, - "property-is-enumerable-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", - "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", - "optional": true, - "requires": { - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" - } - }, "protocolify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/protocolify/-/protocolify-2.0.0.tgz", @@ -18251,7 +17874,7 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", "requires": { - "duplexify": "3.5.3", + "duplexify": "3.5.4", "inherits": "2.0.3", "pump": "2.0.1" } @@ -18262,9 +17885,9 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "puppeteer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.1.1.tgz", - "integrity": "sha1-rb8l5J9e8DRDwQq44JqVTKDHv+4=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.2.0.tgz", + "integrity": "sha512-4sY/6mB7+kNPGAzPGKq65tH0VG3ohUEkXHuOReB9K/tw3m1TqifYmxnMR/uDeci/UPwyk5K1gWYh8rw0U0Zscw==", "dev": true, "requires": { "debug": "2.6.9", @@ -18431,7 +18054,7 @@ "oauth-sign": "0.8.2", "qs": "6.2.3", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3" } }, @@ -18590,9 +18213,9 @@ } }, "rc": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", - "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "requires": { "deep-extend": "0.4.2", "ini": "1.3.5", @@ -18613,7 +18236,7 @@ "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "requires": { "pinkie-promise": "2.0.1", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "read-cache": { @@ -18637,7 +18260,7 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "read-pkg": { @@ -18679,9 +18302,9 @@ } }, "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -18699,7 +18322,7 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "set-immediate-shim": "1.0.1" } }, @@ -18728,14 +18351,14 @@ "optional": true, "requires": { "double-ended-queue": "2.1.0-0", - "redis-commands": "1.3.1", + "redis-commands": "1.3.5", "redis-parser": "2.6.0" } }, "redis-commands": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz", - "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", "dev": true, "optional": true }, @@ -18820,6 +18443,12 @@ "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, + "regexpp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.0.1.tgz", + "integrity": "sha512-8Ph721maXiOYSLtaDGKVmDn5wdsNaF6Px85qFNeMPQq0r8K5Y10tgP6YuR65Ws35n4DvzFcCxEnRNBIXQunzLw==", + "dev": true + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -18835,7 +18464,7 @@ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "requires": { - "rc": "1.2.5", + "rc": "1.2.6", "safe-buffer": "5.1.1" } }, @@ -18844,7 +18473,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "requires": { - "rc": "1.2.5" + "rc": "1.2.6" } }, "regjsgen": { @@ -18944,15 +18573,6 @@ "is-finite": "1.0.2" } }, - "replace-comments-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", - "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", - "requires": { - "require-coercible-to-string-x": "1.0.0", - "to-string-x": "1.4.2" - } - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -18991,7 +18611,7 @@ "oauth-sign": "0.8.2", "qs": "6.3.2", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3" }, "dependencies": { @@ -19029,15 +18649,6 @@ "integrity": "sha1-7W2Lm9Y4wTMosV3YOL1mYRHdeBw=", "dev": true }, - "require-coercible-to-string-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz", - "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==", - "requires": { - "require-object-coercible-x": "1.4.1", - "to-string-x": "1.4.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -19053,14 +18664,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "require-object-coercible-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz", - "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==", - "requires": { - "is-nil-x": "1.4.1" - } - }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -19429,14 +19032,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "requires": { - "to-object-path": "0.3.0" - } - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -19576,16 +19171,16 @@ "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4=" }, "sinon": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.4.5.tgz", - "integrity": "sha512-vsg06IyB4gM5ry1qq13cQQk2U5ZqbL40ygDRNklYx2kokZktakyfinPDJP00WY0WjizRg2p0yhKLuTsCRpwCUA==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.4.6.tgz", + "integrity": "sha512-bzQag30yErCC4lJPv+C2HcmD1+3ula4JQNePZldKcagi0Exq6XDfcC2yqXVfEwtfTIq1rYGujrUIZbwHPpKjog==", "dev": true, "requires": { "@sinonjs/formatio": "2.0.0", "diff": "3.2.0", "lodash.get": "4.4.2", "lolex": "2.3.2", - "nise": "1.3.0", + "nise": "1.3.1", "supports-color": "5.3.0", "type-detect": "4.0.8" }, @@ -19608,9 +19203,9 @@ } }, "sinon-chai": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", - "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.0.0.tgz", + "integrity": "sha512-+cqeKiuMZjZs800fRf4kjJR/Pp4p7bYY3ciZHClFNS8tSzJoAcWni/ZUZD8TrfZ+oFRyLiKWX3fTClDATGy5vQ==", "dev": true }, "sinon-stub-promise": { @@ -19673,9 +19268,9 @@ } }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { "base": "0.11.2", "debug": "2.6.9", @@ -19684,7 +19279,7 @@ "map-cache": "0.2.2", "source-map": "0.5.7", "source-map-resolve": "0.5.1", - "use": "2.0.2" + "use": "3.1.0" }, "dependencies": { "define-property": { @@ -19817,7 +19412,7 @@ "engine.io": "3.1.5", "socket.io-adapter": "1.1.1", "socket.io-client": "2.0.4", - "socket.io-parser": "3.1.2" + "socket.io-parser": "3.1.3" } }, "socket.io-adapter": { @@ -19837,28 +19432,37 @@ "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "2.6.9", - "engine.io-client": "3.1.5", + "engine.io-client": "3.1.6", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.1.2", + "socket.io-parser": "3.1.3", "to-array": "0.1.4" } }, "socket.io-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", - "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "2.6.9", + "debug": "3.1.0", "has-binary2": "1.0.2", "isarray": "2.0.1" }, "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -19957,22 +19561,32 @@ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=" }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, "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=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } }, "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=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" }, "split": { "version": "0.3.3", @@ -20088,9 +19702,9 @@ } }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -20237,7 +19851,7 @@ "resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz", "integrity": "sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=", "requires": { - "concat-stream": "1.6.0", + "concat-stream": "1.6.1", "duplexer2": "0.0.2", "escodegen": "1.3.3", "falafel": "2.1.0", @@ -20326,7 +19940,7 @@ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "requires": { - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "stream-browserify": { @@ -20335,7 +19949,7 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "stream-combiner": { @@ -20352,7 +19966,7 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "requires": { "duplexer2": "0.1.4", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "stream-consume": { @@ -20366,13 +19980,13 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } @@ -20389,7 +20003,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "streamroller": { @@ -20401,7 +20015,7 @@ "date-format": "1.2.0", "debug": "3.1.0", "mkdirp": "0.5.1", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" }, "dependencies": { "debug": { @@ -20611,11 +20225,11 @@ "debug": "3.1.0", "extend": "3.0.1", "form-data": "2.3.2", - "formidable": "1.1.1", + "formidable": "1.2.0", "methods": "1.1.2", "mime": "1.6.0", "qs": "6.5.1", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" }, "dependencies": { "debug": { @@ -20862,7 +20476,7 @@ "fstream": "1.0.11", "fstream-ignore": "1.0.5", "once": "1.4.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "rimraf": "2.6.2", "tar": "2.2.1", "uid-number": "0.0.6" @@ -20875,7 +20489,7 @@ "requires": { "bl": "1.2.1", "end-of-stream": "1.4.1", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "xtend": "4.0.1" } }, @@ -20910,7 +20524,7 @@ "dev": true, "requires": { "arrify": "1.0.1", - "micromatch": "3.1.8", + "micromatch": "3.1.9", "object-assign": "4.1.1", "read-pkg-up": "1.0.1", "require-main-filename": "1.0.1" @@ -20943,7 +20557,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "xtend": "4.0.1" } }, @@ -21031,40 +20645,11 @@ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, - "to-boolean-x": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz", - "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ==" - }, "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=" }, - "to-integer-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", - "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", - "optional": true, - "requires": { - "is-finite-x": "3.0.2", - "is-nan-x": "1.0.1", - "math-sign-x": "3.0.0", - "to-number-x": "2.0.0" - } - }, - "to-number-x": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", - "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "nan-x": "1.0.0", - "parse-int-x": "2.0.0", - "to-primitive-x": "1.1.0", - "trim-x": "3.0.0" - } - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -21083,117 +20668,15 @@ } } }, - "to-object-x": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", - "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-object-coercible-x": "1.4.1" - } - }, - "to-primitive-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", - "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", - "requires": { - "has-symbol-support-x": "1.4.1", - "is-date-object": "1.0.1", - "is-function-x": "3.3.0", - "is-nil-x": "1.4.1", - "is-primitive": "2.0.0", - "is-symbol": "1.0.1", - "require-object-coercible-x": "1.4.1", - "validate.io-undefined": "1.0.3" - } - }, - "to-property-key-x": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", - "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", - "requires": { - "has-symbol-support-x": "1.4.1", - "to-primitive-x": "1.1.0", - "to-string-x": "1.4.2" - } - }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -21205,34 +20688,6 @@ "repeat-string": "1.6.1" } }, - "to-string-symbols-supported-x": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz", - "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==", - "optional": true, - "requires": { - "cached-constructors-x": "1.0.0", - "has-symbol-support-x": "1.4.1", - "is-symbol": "1.0.1" - } - }, - "to-string-tag-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz", - "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==", - "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" - } - }, - "to-string-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz", - "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==", - "requires": { - "is-symbol": "1.0.1" - } - }, "to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", @@ -21270,23 +20725,13 @@ } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" } }, - "trim-left-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", - "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -21305,25 +20750,6 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, - "trim-right-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", - "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", - "requires": { - "cached-constructors-x": "1.0.0", - "require-coercible-to-string-x": "1.0.0", - "white-space-x": "3.0.0" - } - }, - "trim-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", - "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", - "requires": { - "trim-left-x": "3.0.0", - "trim-right-x": "3.0.0" - } - }, "true-case-path": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", @@ -21496,9 +20922,9 @@ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unc-path-regex": { @@ -21687,15 +21113,9 @@ "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" }, "upath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.2.tgz", - "integrity": "sha512-fCmij7T5LnwUme3dbnVSejvOHHlARjB3ikJFwgZfz386pHmf/gueuTLRFU94FZEaeCLlbQrweiUU700gG41tUw==", - "requires": { - "lodash.endswith": "4.2.1", - "lodash.isfunction": "3.0.9", - "lodash.isstring": "4.0.1", - "lodash.startswith": "4.2.1" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==" }, "update-notifier": { "version": "2.3.0", @@ -21745,13 +21165,39 @@ "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" }, "url-loader": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", - "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz", + "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", "requires": { "loader-utils": "1.1.0", - "mime": "1.6.0", - "schema-utils": "0.3.0" + "mime": "2.2.0", + "schema-utils": "0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "mime": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==" + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "requires": { + "ajv": "6.3.0", + "ajv-keywords": "3.1.0" + } + } } }, "url-parse-lax": { @@ -21807,74 +21253,11 @@ } }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "kind-of": "6.0.2" } }, "user-home": { @@ -21887,7 +21270,7 @@ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "tmp": "0.0.33" } }, @@ -21943,9 +21326,9 @@ "optional": true }, "v8flags": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz", + "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==", "requires": { "homedir-polyfill": "1.0.1" } @@ -21956,19 +21339,14 @@ "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" }, "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=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, - "validate.io-undefined": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz", - "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q=" - }, "validator": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", @@ -22019,7 +21397,7 @@ "clone": "2.1.1", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", + "cloneable-readable": "1.1.2", "remove-trailing-separator": "1.1.0", "replace-ext": "1.0.0" }, @@ -22037,7 +21415,7 @@ "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", "requires": { "object-assign": "4.1.1", - "readable-stream": "2.3.4" + "readable-stream": "2.3.5" } }, "vinyl-buffer": { @@ -22095,7 +21473,7 @@ "lead": "1.0.0", "object.assign": "4.1.0", "pumpify": "1.4.0", - "readable-stream": "2.3.4", + "readable-stream": "2.3.5", "remove-bom-buffer": "3.0.0", "remove-bom-stream": "1.2.0", "resolve-options": "1.1.0", @@ -22171,7 +21549,7 @@ "consolidate": "0.14.5", "hash-sum": "1.0.2", "loader-utils": "1.1.0", - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "postcss": "6.0.19", "postcss-load-config": "1.2.0", "postcss-selector-parser": "2.2.3", @@ -22282,136 +21660,13 @@ } }, "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, - "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "requires": { - "lodash": "4.17.5" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - } + "chokidar": "2.0.2", + "graceful-fs": "4.1.11", + "neo-async": "2.5.0" } }, "wcwidth": { @@ -22427,9 +21682,9 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "6.1.1", + "ajv": "6.2.1", "ajv-keywords": "3.1.0", "async": "2.6.0", "enhanced-resolve": "3.4.1", @@ -22446,17 +21701,17 @@ "supports-color": "4.5.0", "tapable": "0.2.8", "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", + "watchpack": "1.5.0", "webpack-sources": "1.1.0", "yargs": "8.0.2" }, "dependencies": { "ajv": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz", - "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", + "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -22618,10 +21873,10 @@ "integrity": "sha512-VKUVkVMc6TWVXmF1OxsBXoiRjYiDRA4XT0KqtbLMDK+891VX7FCuklYwzldND8J2upUcHHnuXYNTP+4mSFi4Kg==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.3", "bfj-node4": "5.2.1", "chalk": "2.3.2", - "commander": "2.14.1", + "commander": "2.15.0", "ejs": "2.5.7", "express": "4.16.3", "filesize": "3.6.0", @@ -22739,11 +21994,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, - "white-space-x": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz", - "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg==" - }, "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", @@ -22819,7 +22069,7 @@ "resolved": "https://registry.npmjs.org/winston-loggly-bulk/-/winston-loggly-bulk-2.0.2.tgz", "integrity": "sha512-Rj5ivuPcaedHziIDJcllYdH7Tqjo3rUtqTiLSDE0s75rOJcVPwKTS9zZK1ZWaPPhMHOcocLYuHqUjAK3SHcU4g==", "requires": { - "node-loggly-bulk": "2.2.1", + "node-loggly-bulk": "2.2.2", "winston": "2.4.1" } }, diff --git a/package.json b/package.json index 610f942f15..f859284c89 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "amplitude": "^3.5.0", "apidoc": "^0.17.5", "autoprefixer": "^8.1.0", - "aws-sdk": "^2.209.0", + "aws-sdk": "^2.211.0", "axios": "^0.18.0", "axios-progress-bar": "^1.1.8", "babel-core": "^6.0.0", @@ -18,7 +18,7 @@ "babel-loader": "^7.1.4", "babel-plugin-syntax-async-functions": "^6.13.0", "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-async-to-module-method": "^6.8.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.16.0", "babel-plugin-transform-regenerator": "^6.16.1", "babel-polyfill": "^6.6.1", @@ -26,7 +26,6 @@ "babel-register": "^6.6.0", "babel-runtime": "^6.11.6", "bcrypt": "^1.0.2", - "bluebird": "^3.3.5", "body-parser": "^1.15.0", "bootstrap": "^4.0.0", "bootstrap-vue": "^2.0.0-rc.2", @@ -34,7 +33,7 @@ "cookie-session": "^1.2.0", "coupon-code": "^0.4.5", "cross-env": "^5.1.4", - "css-loader": "^0.28.0", + "css-loader": "^0.28.11", "csv-stringify": "^2.0.4", "cwait": "^1.1.1", "domain-middleware": "~0.1.0", @@ -51,7 +50,7 @@ "gulp.spritesmith": "^6.9.0", "habitica-markdown": "^1.3.0", "hellojs": "^1.15.1", - "html-webpack-plugin": "^2.8.1", + "html-webpack-plugin": "^3.0.0", "image-size": "^0.6.2", "in-app-purchase": "^1.8.9", "intro.js": "^2.6.0", @@ -93,7 +92,7 @@ "svgo": "^1.0.5", "svgo-loader": "^2.1.0", "universal-analytics": "^0.4.16", - "url-loader": "^0.6.2", + "url-loader": "^1.0.0", "useragent": "^2.1.9", "uuid": "^3.0.1", "validator": "^9.4.1", @@ -114,8 +113,8 @@ }, "private": true, "engines": { - "node": "^6.9.1", - "npm": "^5.0.0" + "node": "^8.9.4", + "npm": "^5.6.0" }, "scripts": { "lint": "eslint --ext .js,.vue .", @@ -142,7 +141,9 @@ "apidoc": "gulp apidoc" }, "devDependencies": { + "@vue/test-utils": "^1.0.0-beta.12", "babel-plugin-istanbul": "^4.1.6", + "babel-plugin-syntax-object-rest-spread": "^6.13.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "chalk": "^2.3.2", @@ -150,15 +151,15 @@ "connect-history-api-fallback": "^1.1.0", "coveralls": "^3.0.0", "cross-spawn": "^6.0.5", - "eslint": "^4.18.2", + "eslint": "^4.19.0", "eslint-config-habitrpg": "^4.0.0", "eslint-friendly-formatter": "^3.0.0", - "eslint-loader": "^1.3.0", + "eslint-loader": "^2.0.0", "eslint-plugin-html": "^4.0.2", "eslint-plugin-mocha": "^4.12.1", "eventsource-polyfill": "^0.9.6", "expect.js": "^0.3.1", - "http-proxy-middleware": "^0.17.0", + "http-proxy-middleware": "^0.18.0", "istanbul": "^1.1.0-alpha.1", "karma": "^2.0.0", "karma-babel-preprocessor": "^7.0.0", @@ -176,11 +177,11 @@ "mocha": "^5.0.4", "monk": "^6.0.5", "nightwatch": "^0.9.20", - "puppeteer": "^1.1.1", + "puppeteer": "^1.2.0", "require-again": "^2.0.0", "selenium-server": "^3.11.0", "sinon": "^4.4.5", - "sinon-chai": "^2.8.0", + "sinon-chai": "^3.0.0", "sinon-stub-promise": "^4.0.0", "webpack-bundle-analyzer": "^2.11.1", "webpack-dev-middleware": "^2.0.5", diff --git a/scripts/paypalBillingSetup.js b/scripts/paypalBillingSetup.js index b941254420..72bec34d61 100644 --- a/scripts/paypalBillingSetup.js +++ b/scripts/paypalBillingSetup.js @@ -1,5 +1,4 @@ require('babel-register'); -require('babel-polyfill'); // This file is used for creating paypal billing plans. PayPal doesn't have a web interface for setting up recurring // payment plan definitions, instead you have to create it via their REST SDK and keep it updated the same way. So this diff --git a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js index 5c290efc64..f1c73907bf 100644 --- a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js @@ -151,7 +151,10 @@ describe('GET challenges/groups/:groupId', () => { }); officialChallenge = await generateChallenge(user, group, { - official: true, + categories: [{ + name: 'habitica_official', + slug: 'habitica_official', + }], }); challenge = await generateChallenge(user, group); diff --git a/test/api/v3/integration/challenges/GET-challenges_user.test.js b/test/api/v3/integration/challenges/GET-challenges_user.test.js index 977574807f..946a703851 100644 --- a/test/api/v3/integration/challenges/GET-challenges_user.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_user.test.js @@ -193,7 +193,10 @@ describe('GET challenges/user', () => { }); officialChallenge = await generateChallenge(user, group, { - official: true, + categories: [{ + name: 'habitica_official', + slug: 'habitica_official', + }], }); challenge = await generateChallenge(user, group); diff --git a/test/api/v3/integration/dataexport/GET-export_userdata.xml.test.js b/test/api/v3/integration/dataexport/GET-export_userdata.xml.test.js index 19d25764a5..db198b6eee 100644 --- a/test/api/v3/integration/dataexport/GET-export_userdata.xml.test.js +++ b/test/api/v3/integration/dataexport/GET-export_userdata.xml.test.js @@ -2,13 +2,12 @@ import { generateUser, } from '../../../../helpers/api-v3-integration.helper'; import xml2js from 'xml2js'; -import Bluebird from 'bluebird'; +import util from 'util'; -let parseStringAsync = Bluebird.promisify(xml2js.parseString, {context: xml2js}); +let parseStringAsync = util.promisify(xml2js.parseString).bind(xml2js); describe('GET /export/userdata.xml', () => { - // TODO disabled because it randomly causes the build to fail - xit('should return a valid XML file with user data', async () => { + it('should return a valid XML file with user data', async () => { let user = await generateUser(); let tasks = await user.post('/tasks/user', [ {type: 'habit', text: 'habit 1'}, @@ -31,13 +30,21 @@ describe('GET /export/userdata.xml', () => { expect(res).to.contain.all.keys(['tasks', 'flags', 'tasksOrder', 'auth']); expect(res.auth.local).not.to.have.keys(['salt', 'hashed_password']); expect(res.tasks).to.have.all.keys(['dailys', 'habits', 'todos', 'rewards']); + expect(res.tasks.habits.length).to.equal(2); - expect(res.tasks.habits[0]._id).to.equal(tasks[0]._id); + let habitIds = _.map(res.tasks.habits, '_id'); + expect(habitIds).to.have.deep.members([tasks[0]._id, tasks[4]._id]); + expect(res.tasks.dailys.length).to.equal(2); - expect(res.tasks.dailys[0]._id).to.equal(tasks[1]._id); + let dailyIds = _.map(res.tasks.dailys, '_id'); + expect(dailyIds).to.have.deep.members([tasks[1]._id, tasks[5]._id]); + expect(res.tasks.rewards.length).to.equal(2); - expect(res.tasks.rewards[0]._id).to.equal(tasks[2]._id); + let rewardIds = _.map(res.tasks.rewards, '_id'); + expect(rewardIds).to.have.deep.members([tasks[2]._id, tasks[6]._id]); + expect(res.tasks.todos.length).to.equal(3); - expect(res.tasks.todos[1]._id).to.equal(tasks[3]._id); + let todoIds = _.map(res.tasks.todos, '_id'); + expect(todoIds).to.deep.include.members([tasks[3]._id, tasks[7]._id]); }); }); diff --git a/test/api/v3/integration/groups/GET-groups.test.js b/test/api/v3/integration/groups/GET-groups.test.js index 10821a7dcb..c0feea5851 100644 --- a/test/api/v3/integration/groups/GET-groups.test.js +++ b/test/api/v3/integration/groups/GET-groups.test.js @@ -201,8 +201,8 @@ describe('GET /groups', () => { await expect(user.get('/groups?type=publicGuilds&paginate=true&page=1')) .to.eventually.have.a.lengthOf(GUILD_PER_PAGE); let page2 = await expect(user.get('/groups?type=publicGuilds&paginate=true&page=2')) - .to.eventually.have.a.lengthOf(1 + 3); // 1 created now, 3 by other tests - expect(page2[3].name).to.equal('guild with less members'); + .to.eventually.have.a.lengthOf(1 + 4); // 1 created now, 4 by other tests + expect(page2[4].name).to.equal('guild with less members'); }); }); @@ -220,4 +220,18 @@ describe('GET /groups', () => { await expect(user.get('/groups?type=privateGuilds,publicGuilds,party,tavern')) .to.eventually.have.lengthOf(NUMBER_OF_GROUPS_USER_CAN_VIEW); }); + + it('returns a list of groups user has access to', async () => { + let group = await generateGroup(user, { + name: 'c++ coders', + type: 'guild', + privacy: 'public', + }); + + // search for 'c++ coders' + await expect(user.get('/groups?type=publicGuilds&paginate=true&page=0&search=c%2B%2B+coders')) + .to.eventually.have.lengthOf(1) + .and.to.have.nested.property('[0]') + .and.to.have.property('_id', group._id); + }); }); diff --git a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js index a06f40bc4e..9a795b2c5d 100644 --- a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js +++ b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js @@ -44,12 +44,12 @@ describe('POST /group/:groupId/join', () => { expect(res.leader.profile.name).to.eql(user.profile.name); }); - it('returns an error is user was already a member', async () => { + it('returns an error if user was already a member', async () => { await joiningUser.post(`/groups/${publicGuild._id}/join`); await expect(joiningUser.post(`/groups/${publicGuild._id}/join`)).to.eventually.be.rejected.and.eql({ code: 401, error: 'NotAuthorized', - message: t('userAlreadyInGroup'), + message: t('youAreAlreadyInGroup'), }); }); @@ -262,6 +262,30 @@ describe('POST /group/:groupId/join', () => { await expect(checkExistence('groups', oldParty._id)).to.eventually.equal(false); }); + it('does not allow user to leave a party if a quest was active and they were the only member', async () => { + let userToInvite = await generateUser(); + let oldParty = await userToInvite.post('/groups', { // add user to a party + name: 'Another Test Party', + type: 'party', + }); + + await userToInvite.update({ + [`items.quests.${PET_QUEST}`]: 1, + }); + await userToInvite.post(`/groups/${oldParty._id}/quests/invite/${PET_QUEST}`); + + await expect(checkExistence('groups', oldParty._id)).to.eventually.equal(true); + await user.post(`/groups/${party._id}/invite`, { + uuids: [userToInvite._id], + }); + + await expect(userToInvite.post(`/groups/${party._id}/join`)).to.eventually.be.rejected.and.eql({ + code: 401, + error: 'NotAuthorized', + message: t('messageCannotLeaveWhileQuesting'), + }); + }); + it('invites joining member to active quest', async () => { await user.update({ [`items.quests.${PET_QUEST}`]: 1, diff --git a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js index 9faa405054..ba030e09ab 100644 --- a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js @@ -2,8 +2,8 @@ import { createAndPopulateGroup, translate as t, generateUser, + sleep, } from '../../../../helpers/api-v3-integration.helper'; -import Bluebird from 'bluebird'; describe('POST /groups/:groupId/quests/accept', () => { const PET_QUEST = 'whale'; @@ -140,7 +140,7 @@ describe('POST /groups/:groupId/quests/accept', () => { // quest will start after everyone has accepted await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`); - await Bluebird.delay(500); + await sleep(0.5); await rejectingMember.sync(); diff --git a/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js b/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js index bcbf6a6cf1..2c5dee2ef3 100644 --- a/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js @@ -2,8 +2,8 @@ import { createAndPopulateGroup, translate as t, generateUser, + sleep, } from '../../../../helpers/api-v3-integration.helper'; -import Bluebird from 'bluebird'; describe('POST /groups/:groupId/quests/force-start', () => { const PET_QUEST = 'whale'; @@ -135,7 +135,7 @@ describe('POST /groups/:groupId/quests/force-start', () => { await leader.post(`/groups/${questingGroup._id}/quests/force-start`); - await Bluebird.delay(500); + await sleep(0.5); await Promise.all([ partyMemberThatRejects.sync(), @@ -161,7 +161,7 @@ describe('POST /groups/:groupId/quests/force-start', () => { await leader.post(`/groups/${questingGroup._id}/quests/force-start`); - await Bluebird.delay(500); + await sleep(0.5); await questingGroup.sync(); @@ -184,7 +184,7 @@ describe('POST /groups/:groupId/quests/force-start', () => { await leader.post(`/groups/${questingGroup._id}/quests/force-start`); - await Bluebird.delay(500); + await sleep(0.5); await questingGroup.sync(); @@ -201,7 +201,7 @@ describe('POST /groups/:groupId/quests/force-start', () => { await leader.post(`/groups/${questingGroup._id}/quests/force-start`); - await Bluebird.delay(500); + await sleep(0.5); await questingGroup.sync(); @@ -222,7 +222,7 @@ describe('POST /groups/:groupId/quests/force-start', () => { await leader.post(`/groups/${questingGroup._id}/quests/force-start`); - await Bluebird.delay(500); + await sleep(0.5); await questingGroup.sync(); diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js index aacec2598b..471946489b 100644 --- a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js @@ -2,9 +2,9 @@ import { createAndPopulateGroup, translate as t, generateUser, + sleep, } from '../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; -import Bluebird from 'bluebird'; describe('POST /groups/:groupId/quests/reject', () => { let questingGroup; @@ -168,7 +168,7 @@ describe('POST /groups/:groupId/quests/reject', () => { // quest will start after everyone has accepted or rejected await rejectingMember.post(`/groups/${questingGroup._id}/quests/reject`); - await Bluebird.delay(500); + await sleep(0.5); await questingGroup.sync(); diff --git a/test/api/v3/integration/shops/GET-shops_market.test.js b/test/api/v3/integration/shops/GET-shops_market.test.js index 04a19f8479..8c9c941fcc 100644 --- a/test/api/v3/integration/shops/GET-shops_market.test.js +++ b/test/api/v3/integration/shops/GET-shops_market.test.js @@ -2,7 +2,6 @@ import { generateUser, translate as t, } from '../../../../helpers/api-integration/v3'; -import Bluebird from 'bluebird'; describe('GET /shops/market', () => { let user; @@ -42,13 +41,13 @@ describe('GET /shops/market', () => { return array; }, []); - let results = await Bluebird.each(items, (item) => { + let results = await Promise.all(items.map((item) => { let { purchaseType, key } = item; return user.post(`/user/purchase/${purchaseType}/${key}`); - }); + })); expect(results.length).to.be.greaterThan(0); - results.forEach((item) => { + items.forEach((item) => { expect(item).to.include.keys('key', 'text', 'notes', 'class', 'value', 'currency'); }); }); diff --git a/test/api/v3/integration/tasks/challenges/POST-tasks_challenges_challengeId_tasks_id_score_direction.test.js b/test/api/v3/integration/tasks/challenges/POST-tasks_challenges_challengeId_tasks_id_score_direction.test.js index e02e6dd2fe..66c868a62e 100644 --- a/test/api/v3/integration/tasks/challenges/POST-tasks_challenges_challengeId_tasks_id_score_direction.test.js +++ b/test/api/v3/integration/tasks/challenges/POST-tasks_challenges_challengeId_tasks_id_score_direction.test.js @@ -2,8 +2,8 @@ import { generateUser, generateGroup, generateChallenge, + sleep, } from '../../../../../helpers/api-integration/v3'; -import Bluebird from 'bluebird'; import { find } from 'lodash'; describe('POST /tasks/:id/score/:direction', () => { @@ -27,7 +27,7 @@ describe('POST /tasks/:id/score/:direction', () => { text: 'test habit', type: 'habit', }); - await Bluebird.delay(1000); + await sleep(1); let updatedUser = await user.get('/user'); usersChallengeTaskId = updatedUser.tasksOrder.habits[0]; }); @@ -65,7 +65,7 @@ describe('POST /tasks/:id/score/:direction', () => { text: 'test daily', type: 'daily', }); - await Bluebird.delay(1000); + await sleep(1); let updatedUser = await user.get('/user'); usersChallengeTaskId = updatedUser.tasksOrder.dailys[0]; }); @@ -109,7 +109,7 @@ describe('POST /tasks/:id/score/:direction', () => { text: 'test todo', type: 'todo', }); - await Bluebird.delay(1000); + await sleep(1); let updatedUser = await user.get('/user'); usersChallengeTaskId = updatedUser.tasksOrder.todos[0]; }); @@ -134,7 +134,7 @@ describe('POST /tasks/:id/score/:direction', () => { text: 'test reward', type: 'reward', }); - await Bluebird.delay(1000); + await sleep(1); let updatedUser = await user.get('/user'); usersChallengeTaskId = updatedUser.tasksOrder.todos[0]; }); diff --git a/test/api/v3/integration/user/DELETE-user.test.js b/test/api/v3/integration/user/DELETE-user.test.js index d11fa679ae..ea9b79f92a 100644 --- a/test/api/v3/integration/user/DELETE-user.test.js +++ b/test/api/v3/integration/user/DELETE-user.test.js @@ -11,7 +11,6 @@ import { each, map, } from 'lodash'; -import Bluebird from 'bluebird'; import { sha1MakeSalt, sha1Encrypt as sha1EncryptPassword, @@ -104,7 +103,7 @@ describe('DELETE /user', () => { password, }); - await Bluebird.all(map(ids, id => { + await Promise.all(map(ids, id => { return expect(checkExistence('tasks', id)).to.eventually.eql(false); })); }); diff --git a/test/api/v3/integration/user/GET-user_inAppRewards.test.js b/test/api/v3/integration/user/GET-user_inAppRewards.test.js new file mode 100644 index 0000000000..a2583dc43f --- /dev/null +++ b/test/api/v3/integration/user/GET-user_inAppRewards.test.js @@ -0,0 +1,24 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /user/in-app-rewards', () => { + let user; + + before(async () => { + user = await generateUser(); + }); + + it('returns the reward items available for purchase', async () => { + let buyList = await user.get('/user/in-app-rewards'); + + expect(_.find(buyList, item => { + return item.text === t('armorWarrior1Text'); + })).to.exist; + + expect(_.find(buyList, item => { + return item.text === t('armorWarrior2Text'); + })).to.not.exist; + }); +}); diff --git a/test/api/v3/integration/user/GET-user_toggle-pinned-item.test.js b/test/api/v3/integration/user/GET-user_toggle-pinned-item.test.js new file mode 100644 index 0000000000..c958c4f979 --- /dev/null +++ b/test/api/v3/integration/user/GET-user_toggle-pinned-item.test.js @@ -0,0 +1,27 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /user/toggle-pinned-item', () => { + let user; + + before(async () => { + user = await generateUser(); + }); + + it('cannot unpin potion', async () => { + await expect(user.get('/user/toggle-pinned-item/potion/potion')) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('cannotUnpinArmoirPotion'), + }); + }); + + it('can pin shield_rogue_5', async () => { + let result = await user.get('/user/toggle-pinned-item/marketGear/gear.flat.shield_rogue_5'); + + expect(result.pinnedItems.length).to.be.eql(user.pinnedItems.length + 1); + }); +}); diff --git a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js index d8cd074bc7..bf7d4fcf1a 100644 --- a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js +++ b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js @@ -258,11 +258,31 @@ describe('POST /user/class/cast/:spellId', () => { expect(user.achievements.birthday).to.equal(1); }); + it('passes correct target to spell when targetType === \'task\'', async () => { + await user.update({'stats.class': 'wizard', 'stats.lvl': 11}); + + let task = await user.post('/tasks/user', { + text: 'test habit', + type: 'habit', + }); + + let result = await user.post(`/user/class/cast/fireball?targetId=${task._id}`); + + expect(result.task._id).to.equal(task._id); + }); + + it('passes correct target to spell when targetType === \'self\'', async () => { + await user.update({'stats.class': 'wizard', 'stats.lvl': 14, 'stats.mp': 50}); + + let result = await user.post('/user/class/cast/frost'); + + expect(result.user.stats.mp).to.equal(10); + }); + + // TODO find a way to have sinon working in integration tests // it doesn't work when tests are running separately from server - it('passes correct target to spell when targetType === \'task\''); it('passes correct target to spell when targetType === \'tasks\''); - it('passes correct target to spell when targetType === \'self\''); it('passes correct target to spell when targetType === \'party\''); it('passes correct target to spell when targetType === \'user\''); it('passes correct target to spell when targetType === \'party\' and user is not in a party'); diff --git a/test/api/v3/integration/user/POST-user_release_both.test.js b/test/api/v3/integration/user/POST-user_release_both.test.js index ce8e5246dd..bbd11587c0 100644 --- a/test/api/v3/integration/user/POST-user_release_both.test.js +++ b/test/api/v3/integration/user/POST-user_release_both.test.js @@ -30,10 +30,12 @@ describe('POST /user/release-both', () => { 'items.currentPet': animal, 'items.pets': loadPets(), 'items.mounts': loadMounts(), + 'achievements.triadBingo': true, }); }); - it('returns an error when user balance is too low and user does not have triadBingo', async () => { + // @TODO: Traid is now free. Add this back if we need + xit('returns an error when user balance is too low and user does not have triadBingo', async () => { await expect(user.post('/user/release-both')) .to.eventually.be.rejected.and.to.eql({ code: 401, @@ -45,9 +47,7 @@ describe('POST /user/release-both', () => { // More tests in common code unit tests it('grants triad bingo with gems', async () => { - await user.update({ - balance: 1.5, - }); + await user.update(); let response = await user.post('/user/release-both'); await user.sync(); diff --git a/test/api/v3/integration/user/PUT-user.test.js b/test/api/v3/integration/user/PUT-user.test.js index ecd932a7dc..9642d3bb61 100644 --- a/test/api/v3/integration/user/PUT-user.test.js +++ b/test/api/v3/integration/user/PUT-user.test.js @@ -27,6 +27,33 @@ describe('PUT /user', () => { expect(user.stats.hp).to.eql(14); }); + it('tags must be an array', async () => { + await expect(user.put('/user', { + tags: { + tag: true, + }, + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: 'mustBeArray', + }); + }); + + it('update tags', async () => { + let userTags = user.tags; + + await user.put('/user', { + tags: [...user.tags, { + name: 'new tag', + }], + }); + + await user.sync(); + + expect(user.tags.length).to.be.eql(userTags.length + 1); + }); + + it('profile.name cannot be an empty string or null', async () => { await expect(user.put('/user', { 'profile.name': ' ', // string should be trimmed diff --git a/test/api/v3/integration/user/auth/POST-register_local.test.js b/test/api/v3/integration/user/auth/POST-register_local.test.js index 1ad091a79e..643ef3d9c2 100644 --- a/test/api/v3/integration/user/auth/POST-register_local.test.js +++ b/test/api/v3/integration/user/auth/POST-register_local.test.js @@ -357,6 +357,21 @@ describe('POST /user/auth/local/register', () => { }); }); + it('sanitizes email params to a lowercase string before creating the user', async () => { + let username = generateRandomUserName(); + let email = 'ISANEmAiL@ExAmPle.coM'; + let password = 'password'; + + let user = await api.post('/user/auth/local/register', { + username, + email, + password, + confirmPassword: password, + }); + + expect(user.auth.local.email).to.equal(email.toLowerCase()); + }); + it('fails on a habitica.com email', async () => { let username = generateRandomUserName(); let email = `${username}@habitica.com`; diff --git a/test/api/v3/integration/user/auth/PUT-user_update_email.test.js b/test/api/v3/integration/user/auth/PUT-user_update_email.test.js index d893f5ac80..d61a71c130 100644 --- a/test/api/v3/integration/user/auth/PUT-user_update_email.test.js +++ b/test/api/v3/integration/user/auth/PUT-user_update_email.test.js @@ -13,7 +13,7 @@ import nconf from 'nconf'; const ENDPOINT = '/user/auth/update-email'; describe('PUT /user/auth/update-email', () => { - let newEmail = 'some-new-email_2@example.net'; + let newEmail = 'SOmE-nEw-emAIl_2@example.net'; let oldPassword = 'password'; // from habitrpg/test/helpers/api-integration/v3/object-generators.js context('Local Authenticaion User', async () => { @@ -53,14 +53,15 @@ describe('PUT /user/auth/update-email', () => { }); it('changes email if new email and existing password are provided', async () => { + let lowerCaseNewEmail = newEmail.toLowerCase(); let response = await user.put(ENDPOINT, { newEmail, password: oldPassword, }); - expect(response).to.eql({ email: 'some-new-email_2@example.net' }); + expect(response.email).to.eql(lowerCaseNewEmail); await user.sync(); - expect(user.auth.local.email).to.eql(newEmail); + expect(user.auth.local.email).to.eql(lowerCaseNewEmail); }); it('rejects if email is already taken', async () => { diff --git a/test/api/v3/unit/libs/cron.test.js b/test/api/v3/unit/libs/cron.test.js index 76990aa20a..3699a3d54a 100644 --- a/test/api/v3/unit/libs/cron.test.js +++ b/test/api/v3/unit/libs/cron.test.js @@ -1,7 +1,6 @@ /* eslint-disable global-require */ import moment from 'moment'; import nconf from 'nconf'; -import Bluebird from 'bluebird'; import requireAgain from 'require-again'; import { recoverCron, cron } from '../../../../../website/server/libs/cron'; import { model as User } from '../../../../../website/server/models/user'; @@ -1363,7 +1362,7 @@ describe('recoverCron', () => { }); it('throws an error if user cannot be found', async () => { - execStub.returns(Bluebird.resolve(null)); + execStub.returns(Promise.resolve(null)); try { await recoverCron(status, locals); @@ -1374,8 +1373,8 @@ describe('recoverCron', () => { }); it('increases status.times count and reruns up to 4 times', async () => { - execStub.returns(Bluebird.resolve({_cronSignature: 'RUNNING_CRON'})); - execStub.onCall(4).returns(Bluebird.resolve({_cronSignature: 'NOT_RUNNING'})); + execStub.returns(Promise.resolve({_cronSignature: 'RUNNING_CRON'})); + execStub.onCall(4).returns(Promise.resolve({_cronSignature: 'NOT_RUNNING'})); await recoverCron(status, locals); @@ -1384,7 +1383,7 @@ describe('recoverCron', () => { }); it('throws an error if recoverCron runs 5 times', async () => { - execStub.returns(Bluebird.resolve({_cronSignature: 'RUNNING_CRON'})); + execStub.returns(Promise.resolve({_cronSignature: 'RUNNING_CRON'})); try { await recoverCron(status, locals); diff --git a/test/api/v3/unit/libs/slack.js b/test/api/v3/unit/libs/slack.js index 6c827d4958..e660a340d2 100644 --- a/test/api/v3/unit/libs/slack.js +++ b/test/api/v3/unit/libs/slack.js @@ -47,7 +47,7 @@ describe('slack', () => { expect(IncomingWebhook.prototype.send).to.be.calledOnce; expect(IncomingWebhook.prototype.send).to.be.calledWith({ - text: 'flagger (flagger-id) flagged a message (language: flagger-lang)', + text: 'flagger (flagger-id; language: flagger-lang) flagged a message', attachments: [{ fallback: 'Flag Message', color: 'danger', diff --git a/test/api/v3/unit/middlewares/language.test.js b/test/api/v3/unit/middlewares/language.test.js index 18caad8527..5a1136bd0c 100644 --- a/test/api/v3/unit/middlewares/language.test.js +++ b/test/api/v3/unit/middlewares/language.test.js @@ -8,7 +8,6 @@ import { attachTranslateFunction, } from '../../../../../website/server/middlewares/language'; import common from '../../../../../website/common'; -import Bluebird from 'bluebird'; import { model as User } from '../../../../../website/server/models/user'; const i18n = common.i18n; @@ -162,7 +161,7 @@ describe('language middleware', () => { return this; }, exec () { - return Bluebird.resolve({ + return Promise.resolve({ preferences: { language: 'it', }, diff --git a/test/api/v3/unit/models/user.test.js b/test/api/v3/unit/models/user.test.js index 14959bd823..00ea3f5607 100644 --- a/test/api/v3/unit/models/user.test.js +++ b/test/api/v3/unit/models/user.test.js @@ -1,4 +1,3 @@ -import Bluebird from 'bluebird'; import moment from 'moment'; import { model as User } from '../../../../../website/server/models/user'; import { model as Group } from '../../../../../website/server/models/group'; @@ -123,7 +122,7 @@ describe('User Model', () => { it('adds notifications without data for all given users via static method', async () => { let user = new User(); let otherUser = new User(); - await Bluebird.all([user.save(), otherUser.save()]); + await Promise.all([user.save(), otherUser.save()]); await User.pushNotification({_id: {$in: [user._id, otherUser._id]}}, 'CRON'); @@ -149,7 +148,7 @@ describe('User Model', () => { it('adds notifications with data and seen status for all given users via static method', async () => { let user = new User(); let otherUser = new User(); - await Bluebird.all([user.save(), otherUser.save()]); + await Promise.all([user.save(), otherUser.save()]); await User.pushNotification({_id: {$in: [user._id, otherUser._id]}}, 'CRON', {field: 1}, true); diff --git a/test/client/unit/specs/components/tasks/column.js b/test/client/unit/specs/components/tasks/column.js new file mode 100644 index 0000000000..268fc08cd3 --- /dev/null +++ b/test/client/unit/specs/components/tasks/column.js @@ -0,0 +1,211 @@ +import { shallow, createLocalVue } from '@vue/test-utils'; + +import TaskColumn from 'client/components/tasks/column.vue'; + +import Store from 'client/libs/store'; + +// eslint-disable no-exclusive-tests + +const localVue = createLocalVue(); +localVue.use(Store); + +describe('Task Column', () => { + let wrapper; + let store, getters; + let habits, taskListOverride, tasks; + + function makeWrapper (additionalSetup = {}) { + let type = 'habit'; + let mocks = { + $t () {}, + }; + let stubs = ['b-modal']; // is a custom component and not tested here + + return shallow(TaskColumn, { + propsData: { + type, + }, + mocks, + stubs, + localVue, + ...additionalSetup, + }); + } + + it('returns a vue instance', () => { + wrapper = makeWrapper(); + expect(wrapper.isVueInstance()).to.be.true; + }); + + describe('Passed Properties', () => { + beforeEach(() => { + wrapper = makeWrapper(); + }); + + it('defaults isUser to false', () => { + expect(wrapper.vm.isUser).to.be.false; + }); + + it('passes isUser to component instance', () => { + wrapper.setProps({ isUser: false }); + + expect(wrapper.vm.isUser).to.be.false; + + wrapper.setProps({ isUser: true }); + + expect(wrapper.vm.isUser).to.be.true; + }); + }); + + describe('Computed Properties', () => { + beforeEach(() => { + habits = [ + { id: 1 }, + { id: 2 }, + ]; + + taskListOverride = [ + { id: 3 }, + { id: 4 }, + ]; + + getters = { + // (...) => { ... } will return a value + // (...) => (...) => { ... } will return a function + // Task Column expects a function + 'tasks:getFilteredTaskList': () => () => habits, + }; + + store = new Store({getters}); + + wrapper = makeWrapper({store}); + }); + + it('returns task list from props for group-plan', () => { + wrapper.setProps({ taskListOverride }); + + wrapper.vm.taskList.forEach((el, i) => { + expect(el).to.eq(taskListOverride[i]); + }); + + wrapper.setProps({ isUser: false, taskListOverride }); + + wrapper.vm.taskList.forEach((el, i) => { + expect(el).to.eq(taskListOverride[i]); + }); + }); + + it('returns task list from store for user', () => { + wrapper.setProps({ isUser: true, taskListOverride }); + + wrapper.vm.taskList.forEach((el, i) => { + expect(el).to.eq(habits[i]); + }); + }); + }); + + describe('Methods', () => { + describe('Filter By Tags', () => { + beforeEach(() => { + tasks = [ + { tags: [3, 4] }, + { tags: [2, 3] }, + { tags: [] }, + { tags: [1, 3] }, + ]; + }); + + it('returns all tasks if no tag is given', () => { + let returnedTasks = wrapper.vm.filterByTagList(tasks); + expect(returnedTasks).to.have.lengthOf(tasks.length); + tasks.forEach((task, i) => { + expect(returnedTasks[i]).to.eq(task); + }); + }); + + it('returns tasks for given single tag', () => { + let returnedTasks = wrapper.vm.filterByTagList(tasks, [3]); + + expect(returnedTasks).to.have.lengthOf(3); + expect(returnedTasks[0]).to.eq(tasks[0]); + expect(returnedTasks[1]).to.eq(tasks[1]); + expect(returnedTasks[2]).to.eq(tasks[3]); + }); + + it('returns tasks for given multiple tags', () => { + let returnedTasks = wrapper.vm.filterByTagList(tasks, [2, 3]); + + expect(returnedTasks).to.have.lengthOf(1); + expect(returnedTasks[0]).to.eq(tasks[1]); + }); + }); + + describe('Filter By Search Text', () => { + beforeEach(() => { + tasks = [ + { + text: 'Hello world 1', + note: '', + checklist: [], + }, + { + text: 'Hello world 2', + note: '', + checklist: [], + }, + { + text: 'Generic Task Title', + note: '', + checklist: [ + { text: 'Check 1' }, + { text: 'Check 2' }, + { text: 'Check 3' }, + ], + }, + { + text: 'Hello world 3', + note: 'Generic Task Note', + checklist: [ + { text: 'Checkitem 1' }, + { text: 'Checkitem 2' }, + { text: 'Checkitem 3' }, + ], + }, + ]; + }); + + it('returns all tasks for empty search term', () => { + let returnedTasks = wrapper.vm.filterBySearchText(tasks); + expect(returnedTasks).to.have.lengthOf(tasks.length); + tasks.forEach((task, i) => { + expect(returnedTasks[i]).to.eq(task); + }); + }); + + it('returns tasks for search term in title /i', () => { + ['Title', 'TITLE', 'title', 'tItLe'].forEach((term) => { + expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[2]); + }); + }); + + it('returns tasks for search term in note /i', () => { + ['Note', 'NOTE', 'note', 'nOtE'].forEach((term) => { + expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[3]); + }); + }); + + it('returns tasks for search term in checklist title /i', () => { + ['Check', 'CHECK', 'check', 'cHeCK'].forEach((term) => { + let returnedTasks = wrapper.vm.filterBySearchText(tasks, term); + + expect(returnedTasks[0]).to.eq(tasks[2]); + expect(returnedTasks[1]).to.eq(tasks[3]); + }); + + ['Checkitem', 'CHECKITEM', 'checkitem', 'cHeCKiTEm'].forEach((term) => { + expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[3]); + }); + }); + }); + }); +}); diff --git a/test/client/unit/specs/libs/store/helpers/filterTasks.js b/test/client/unit/specs/libs/store/helpers/filterTasks.js new file mode 100644 index 0000000000..6537f122b2 --- /dev/null +++ b/test/client/unit/specs/libs/store/helpers/filterTasks.js @@ -0,0 +1,62 @@ +import { + getTypeLabel, + getFilterLabels, + getActiveFilter, +} from 'client/libs/store/helpers/filterTasks.js'; + +describe('Filter Category for Tasks', () => { + describe('getTypeLabel', () => { + it('should return correct task type labels', () => { + expect(getTypeLabel('habit')).to.eq('habits'); + expect(getTypeLabel('daily')).to.eq('dailies'); + expect(getTypeLabel('todo')).to.eq('todos'); + expect(getTypeLabel('reward')).to.eq('rewards'); + }); + }); + + describe('getFilterLabels', () => { + let habit, daily, todo, reward; + beforeEach(() => { + habit = ['all', 'yellowred', 'greenblue']; + daily = ['all', 'due', 'notDue']; + todo = ['remaining', 'scheduled', 'complete2']; + reward = ['all', 'custom', 'wishlist']; + }); + + it('should return all task type filter labels by type', () => { + // habits + getFilterLabels('habit').forEach((item, i) => { + expect(item).to.eq(habit[i]); + }); + // dailys + getFilterLabels('daily').forEach((item, i) => { + expect(item).to.eq(daily[i]); + }); + // todos + getFilterLabels('todo').forEach((item, i) => { + expect(item).to.eq(todo[i]); + }); + // rewards + getFilterLabels('reward').forEach((item, i) => { + expect(item).to.eq(reward[i]); + }); + }); + }); + + describe('getActiveFilter', () => { + it('should return single function by default', () => { + let activeFilter = getActiveFilter('habit'); + expect(activeFilter).to.be.an('object'); + expect(activeFilter).to.have.all.keys('label', 'filterFn', 'default'); + expect(activeFilter.default).to.be.true; + }); + + it('should return single function for given filter type', () => { + let activeFilterLabel = 'yellowred'; + let activeFilter = getActiveFilter('habit', activeFilterLabel); + expect(activeFilter).to.be.an('object'); + expect(activeFilter).to.have.all.keys('label', 'filterFn'); + expect(activeFilter.label).to.eq(activeFilterLabel); + }); + }); +}); diff --git a/test/client/unit/specs/libs/store/helpers/orderTasks.js b/test/client/unit/specs/libs/store/helpers/orderTasks.js new file mode 100644 index 0000000000..e293fc0f32 --- /dev/null +++ b/test/client/unit/specs/libs/store/helpers/orderTasks.js @@ -0,0 +1,43 @@ +import { + orderSingleTypeTasks, + // orderMultipleTypeTasks, +} from 'client/libs/store/helpers/orderTasks.js'; + +import shuffle from 'lodash/shuffle'; + +describe('Task Order Helper Function', () => { + let tasks, shuffledTasks, taskOrderList; + beforeEach(() => { + taskOrderList = [1, 2, 3, 4]; + tasks = []; + taskOrderList.forEach(i => tasks.push({ _id: i, id: i })); + shuffledTasks = shuffle(tasks); + }); + + it('should return tasks as is for no task order', () => { + expect(orderSingleTypeTasks(shuffledTasks)).to.eq(shuffledTasks); + }); + + it('should return tasks in expected order', () => { + let newOrderedTasks = orderSingleTypeTasks(shuffledTasks, taskOrderList); + newOrderedTasks.forEach((item, index) => { + expect(item).to.eq(tasks[index]); + }); + }); + + it('should return new tasks at end of expected order', () => { + let newTaskIds = [10, 15, 20]; + newTaskIds.forEach(i => tasks.push({ _id: i, id: i })); + shuffledTasks = shuffle(tasks); + + let newOrderedTasks = orderSingleTypeTasks(shuffledTasks, taskOrderList); + // checking tasks with order + newOrderedTasks.slice(0, taskOrderList.length).forEach((item, index) => { + expect(item).to.eq(tasks[index]); + }); + // check for new task ids + newOrderedTasks.slice(-3).forEach(item => { + expect(item.id).to.be.oneOf(newTaskIds); + }); + }); +}); diff --git a/test/client/unit/specs/store/getters/tasks/getTasks.js b/test/client/unit/specs/store/getters/tasks/getTasks.js new file mode 100644 index 0000000000..1de50b15cc --- /dev/null +++ b/test/client/unit/specs/store/getters/tasks/getTasks.js @@ -0,0 +1,118 @@ +import generateStore from 'client/store'; + +describe('Store Getters for Tasks', () => { + let store, habits, dailys, todos, rewards; + + beforeEach(() => { + store = generateStore(); + // Get user preference data and user tasks order data + store.state.user.data = { + preferences: {}, + tasksOrder: { + habits: [], + dailys: [], + todos: [], + rewards: [], + }, + }; + }); + + describe('Task List', () => { + beforeEach(() => { + habits = [ + { id: 1 }, + { id: 2 }, + ]; + dailys = [ + { id: 3 }, + { id: 4 }, + ]; + todos = [ + { id: 5 }, + { id: 6 }, + ]; + rewards = [ + { id: 7 }, + { id: 8 }, + ]; + store.state.tasks.data = { + habits, + dailys, + todos, + rewards, + }; + }); + + it('should returns all tasks by task type', () => { + let returnedTasks = store.getters['tasks:getUnfilteredTaskList']('habit'); + expect(returnedTasks).to.eq(habits); + + returnedTasks = store.getters['tasks:getUnfilteredTaskList']('daily'); + expect(returnedTasks).to.eq(dailys); + + returnedTasks = store.getters['tasks:getUnfilteredTaskList']('todo'); + expect(returnedTasks).to.eq(todos); + + returnedTasks = store.getters['tasks:getUnfilteredTaskList']('reward'); + expect(returnedTasks).to.eq(rewards); + }); + }); + + // @TODO add task filter check for rewards and dailys + describe('Task Filters', () => { + beforeEach(() => { + habits = [ + // weak habit + { value: 0 }, + // strong habit + { value: 2 }, + ]; + todos = [ + // scheduled todos + { completed: false, date: 'Mon, 15 Jan 2018 12:18:29 GMT' }, + // completed todos + { completed: true }, + ]; + store.state.tasks.data = { + habits, + todos, + }; + }); + + it('should return weak habits', () => { + let returnedTasks = store.getters['tasks:getFilteredTaskList']({ + type: 'habit', + filterType: 'yellowred', + }); + + expect(returnedTasks[0]).to.eq(habits[0]); + }); + + it('should return strong habits', () => { + let returnedTasks = store.getters['tasks:getFilteredTaskList']({ + type: 'habit', + filterType: 'greenblue', + }); + + expect(returnedTasks[0]).to.eq(habits[1]); + }); + + it('should return scheduled todos', () => { + let returnedTasks = store.getters['tasks:getFilteredTaskList']({ + type: 'todo', + filterType: 'scheduled', + }); + + expect(returnedTasks[0]).to.eq(todos[0]); + }); + + it('should return completed todos', () => { + let returnedTasks = store.getters['tasks:getFilteredTaskList']({ + type: 'todo', + filterType: 'complete2', + }); + + expect(returnedTasks[0]).to.eq(todos[1]); + }); + }); +}); diff --git a/test/common/ops/buy/buyGear.js b/test/common/ops/buy/buyMarketGear.js similarity index 86% rename from test/common/ops/buy/buyGear.js rename to test/common/ops/buy/buyMarketGear.js index bd1798a673..48ce22ea1d 100644 --- a/test/common/ops/buy/buyGear.js +++ b/test/common/ops/buy/buyMarketGear.js @@ -4,14 +4,20 @@ import sinon from 'sinon'; // eslint-disable-line no-shadow import { generateUser, } from '../../../helpers/common.helper'; -import buyGear from '../../../../website/common/script/ops/buy/buyGear'; +import {BuyMarketGearOperation} from '../../../../website/common/script/ops/buy/buyMarketGear'; import shared from '../../../../website/common/script'; import { BadRequest, NotAuthorized, NotFound, } from '../../../../website/common/script/libs/errors'; import i18n from '../../../../website/common/script/i18n'; -describe('shared.ops.buyGear', () => { +function buyGear (user, req, analytics) { + let buyOp = new BuyMarketGearOperation(user, req, analytics); + + return buyOp.purchase(); +} + +describe('shared.ops.buyMarketGear', () => { let user; let analytics = {track () {}}; @@ -111,6 +117,31 @@ describe('shared.ops.buyGear', () => { } }); + it('does not buy equipment of different class', (done) => { + user.stats.gp = 82; + user.stats.class = 'warrior'; + + try { + buyGear(user, {params: {key: 'weapon_special_winter2018Rogue'}}); + } catch (err) { + expect(err).to.be.an.instanceof(NotAuthorized); + expect(err.message).to.equal(i18n.t('cannotBuyItem')); + done(); + } + }); + + it('does not buy equipment in bulk', (done) => { + user.stats.gp = 82; + + try { + buyGear(user, {params: {key: 'armor_warrior_1'}, quantity: 3}); + } catch (err) { + expect(err).to.be.an.instanceof(NotAuthorized); + expect(err.message).to.equal(i18n.t('messageNotAbleToBuyInBulk')); + done(); + } + }); + // TODO after user.ops.equip is done xit('removes one-handed weapon and shield if auto-equip is on and a two-hander is bought', () => { user.stats.gp = 100; diff --git a/test/common/ops/releaseBoth.js b/test/common/ops/releaseBoth.js index b5eae68863..3d2c910075 100644 --- a/test/common/ops/releaseBoth.js +++ b/test/common/ops/releaseBoth.js @@ -26,10 +26,11 @@ describe('shared.ops.releaseBoth', () => { user.items.currentMount = animal; user.items.currentPet = animal; - user.balance = 1.5; + + user.achievements.triadBingo = true; }); - it('returns an error when user balance is too low and user does not have triadBingo', (done) => { + xit('returns an error when user balance is too low and user does not have triadBingo', (done) => { user.balance = 0; try { diff --git a/test/helpers/api-integration/v3/object-generators.js b/test/helpers/api-integration/v3/object-generators.js index 8322ae1098..dd8c4ef3fe 100644 --- a/test/helpers/api-integration/v3/object-generators.js +++ b/test/helpers/api-integration/v3/object-generators.js @@ -1,7 +1,6 @@ import { times, } from 'lodash'; -import Bluebird from 'bluebird'; import { v4 as generateUUID } from 'uuid'; import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes'; import { requester } from '../requester'; @@ -106,7 +105,7 @@ export async function createAndPopulateGroup (settings = {}) { guild: { guilds: [group._id] }, }; - let members = await Bluebird.all( + let members = await Promise.all( times(numberOfMembers, () => { return generateUser(groupMembershipTypes[group.type]); }) @@ -114,7 +113,7 @@ export async function createAndPopulateGroup (settings = {}) { await group.update({ memberCount: numberOfMembers + 1}); - let invitees = await Bluebird.all( + let invitees = await Promise.all( times(numberOfInvites, () => { return generateUser(); }) @@ -126,9 +125,9 @@ export async function createAndPopulateGroup (settings = {}) { }); }); - await Bluebird.all(invitationPromises); + await Promise.all(invitationPromises); - await Bluebird.map(invitees, (invitee) => invitee.sync()); + await Promise.all(invitees.map((invitee) => invitee.sync())); return { groupLeader, diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 16b4e97558..b34b589ed1 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -2,8 +2,6 @@ /* eslint-disable global-require */ /* eslint-disable no-process-env */ -import Bluebird from 'bluebird'; - //------------------------------ // Global modules //------------------------------ @@ -16,7 +14,6 @@ global.sinon = require('sinon'); let sinonStubPromise = require('sinon-stub-promise'); sinonStubPromise(global.sinon); global.sandbox = sinon.sandbox.create(); -global.Promise = Bluebird; import setupNconf from '../../website/server/libs/setupNconf'; setupNconf('./config.json.example'); diff --git a/test/helpers/sleep.js b/test/helpers/sleep.js index a33970dfa2..74acac27a9 100644 --- a/test/helpers/sleep.js +++ b/test/helpers/sleep.js @@ -1,7 +1 @@ -export async function sleep (seconds = 1) { - let milliseconds = seconds * 1000; - - return new Promise((resolve) => { - setTimeout(resolve, milliseconds); - }); -} +export { default as sleep } from '../../website/server/libs/sleep'; \ No newline at end of file diff --git a/test/helpers/start-server.js b/test/helpers/start-server.js index 7e0ea3c00a..49383b55e9 100644 --- a/test/helpers/start-server.js +++ b/test/helpers/start-server.js @@ -1,13 +1,11 @@ /* eslint-disable no-process-env */ import nconf from 'nconf'; import mongoose from 'mongoose'; -import Bluebird from 'bluebird'; import setupNconf from '../../website/server/libs/setupNconf'; if (process.env.LOAD_SERVER === '0') { // when the server is in a different process we simply connect to mongoose setupNconf('./config.json'); // Use Q promises instead of mpromise in mongoose - mongoose.Promise = Bluebird; mongoose.connect(nconf.get('TEST_DB_URI')); } else { // When running tests and the server in the same process setupNconf('./config.json.example'); diff --git a/test/mocha.opts b/test/mocha.opts index 63c3988a56..28345d5049 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -3,7 +3,6 @@ --timeout 8000 --check-leaks --globals io --r babel-polyfill --require babel-register --require ./test/helpers/globals.helper --exit diff --git a/vagrant_scripts/install_node.sh b/vagrant_scripts/install_node.sh index 5ef143d1a4..e27fa26e8d 100755 --- a/vagrant_scripts/install_node.sh +++ b/vagrant_scripts/install_node.sh @@ -11,12 +11,12 @@ source /home/vagrant/.profile echo Setting up node... cd /vagrant -nvm install -nvm use +nvm install 8 +nvm use 8 nvm alias default current echo Update npm... -npm install -g npm@4 +npm install -g npm@5 echo Installing global modules... npm install -g gulp mocha node-pre-gyp diff --git a/website/client/app.vue b/website/client/app.vue index 55400adec6..d8d36bddc0 100644 --- a/website/client/app.vue +++ b/website/client/app.vue @@ -14,10 +14,17 @@ div router-view(v-if="!isUserLoggedIn || isStaticPage") template(v-else) template(v-if="isUserLoaded") + div.resting-banner(v-if="showRestingBanner") + span.content + span.label {{ $t('innCheckOutBanner') }} + span.separator | + span.resume(@click="resumeDamage()") {{ $t('resumeDamage') }} + div.closepadding(@click="hideBanner()") + span.svg-icon.inline.icon-10(aria-hidden="true", v-html="icons.close") notifications-display - app-menu + app-menu(:class='{"restingInn": showRestingBanner}') .container-fluid - app-header + app-header(:class='{"restingInn": showRestingBanner}') buyModal( :item="selectedItemToBuy || {}", :withPin="true", @@ -34,13 +41,15 @@ div div(:class='{sticky: user.preferences.stickyHeader}') router-view - app-footer + app-footer audio#sound(autoplay, ref="sound") source#oggSource(type="audio/ogg", :src="sound.oggSource") source#mp3Source(type="audio/mp3", :src="sound.mp3Source") - diff --git a/website/client/assets/scss/animals.scss b/website/client/assets/scss/animals.scss new file mode 100644 index 0000000000..a75f6dcb17 --- /dev/null +++ b/website/client/assets/scss/animals.scss @@ -0,0 +1,20 @@ +.Pet { + margin: auto !important; + display: block; + position: relative; + right: 0; + bottom: 0; + left: 0; + + &:not([class*="FlyingPig"]) { + top: -28px !important; + } +} + +.Pet[class*="FlyingPig"] { + top: 7px !important; +} + +.Pet.Pet-Dragon-Hydra { + top: -16px !important; +} diff --git a/website/client/assets/scss/index.scss b/website/client/assets/scss/index.scss index 88df7bf699..6c2fa94f5a 100644 --- a/website/client/assets/scss/index.scss +++ b/website/client/assets/scss/index.scss @@ -33,3 +33,4 @@ @import './banner'; @import './progress-bar'; @import './pin'; +@import './animals'; diff --git a/website/client/components/groups/tavern.vue b/website/client/components/groups/tavern.vue index efdb65ef4a..9f8fbeff67 100644 --- a/website/client/components/groups/tavern.vue +++ b/website/client/components/groups/tavern.vue @@ -114,10 +114,9 @@ .toggle-down(@click="sections.staff = !sections.staff", v-if="!sections.staff") .svg-icon(v-html="icons.downIcon") .section.row(v-if="sections.staff") - // @TODO open member modal when clicking on a staff member .col-4.staff(v-for='user in staff', :class='{staff: user.type === "Staff", moderator: user.type === "Moderator", bailey: user.name === "It\'s Bailey"}') div - .title {{user.name}} + a.title(@click="viewStaffProfile(user.uuid)") {{user.name}} .svg-icon.staff-icon(v-html="icons.tierStaff", v-if='user.type === "Staff"') .svg-icon.mod-icon(v-html="icons.tierMod", v-if='user.type === "Moderator" && user.name !== "It\'s Bailey"') .svg-icon.npc-icon(v-html="icons.tierNPC", v-if='user.name === "It\'s Bailey"') @@ -595,78 +594,97 @@ export default { { name: 'beffymaroo', type: 'Staff', + uuid: '9fe7183a-4b79-4c15-9629-a1aee3873390', }, // { // name: 'lefnire', // type: 'Staff', + // uuid: '00000000-0000-4000-9000-000000000000', // }, { name: 'Lemoness', type: 'Staff', + uuid: '7bde7864-ebc5-4ee2-a4b7-1070d464cdb0', }, { name: 'paglias', type: 'Staff', + uuid: 'ed4c688c-6652-4a92-9d03-a5a79844174a', }, { name: 'redphoenix', type: 'Staff', + uuid: 'cb46ad54-8c78-4dbc-a8ed-4e3185b2b3ff', }, { name: 'SabreCat', type: 'Staff', + uuid: '7f14ed62-5408-4e1b-be83-ada62d504931', }, { name: 'TheHollidayInn', type: 'Staff', + uuid: '206039c6-24e4-4b9f-8a31-61cbb9aa3f66', }, { name: 'viirus', type: 'Staff', + uuid: 'a327d7e0-1c2e-41be-9193-7b30b484413f', }, { name: 'It\'s Bailey', type: 'Moderator', + uuid: '9da65443-ed43-4c21-804f-d260c1361596', }, { name: 'Alys', type: 'Moderator', + uuid: 'd904bd62-da08-416b-a816-ba797c9ee265', }, { name: 'Blade', type: 'Moderator', + uuid: '75f270e8-c5db-4722-a5e6-a83f1b23f76b', }, { name: 'Breadstrings', type: 'Moderator', + uuid: '3b675c0e-d7a6-440c-8687-bc67cd0bf4e9', }, { name: 'Cantras', type: 'Moderator', + uuid: '28771972-ca6d-4c03-8261-e1734aa7d21d', }, // { // name: 'Daniel the Bard', // type: 'Moderator', + // uuid: '1f7c4a74-03a3-4b2c-b015-112d0acbd593', // }, { name: 'deilann 5.0.5b', type: 'Moderator', + uuid: 'e7b5d1e2-3b6e-4192-b867-8bafdb03eeec', }, { name: 'Dewines', type: 'Moderator', + uuid: '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc', }, { name: 'Fox_town', type: 'Moderator', + uuid: 'a05f0152-d66b-4ef1-93ac-4adb195d0031', }, { name: 'Megan', type: 'Moderator', + uuid: '73e5125c-2c87-4004-8ccd-972aeac4f17a', }, { name: 'shanaqui', type: 'Moderator', + uuid: 'bb089388-28ae-4e42-a8fa-f0c2bfb6f779', }, ], newMessage: '', @@ -720,7 +738,6 @@ export default { this.newMessage = newText; }, toggleSleep () { - this.user.preferences.sleep = !this.user.preferences.sleep; this.$store.dispatch('user:sleep'); }, async sendMessage () { @@ -764,6 +781,14 @@ export default { this.$root.$emit('bv::show::modal', 'world-boss-rage'); } }, + + async viewStaffProfile (staffId) { + let staffDetails = await this.$store.dispatch('members:fetchMember', { memberId: staffId }); + this.$root.$emit('habitica:show-profile', { + user: staffDetails.data.data, + startingPage: 'profile', + }); + }, }, }; diff --git a/website/client/components/inventory/items/index.vue b/website/client/components/inventory/items/index.vue index f0839b2d4d..8fef525b43 100644 --- a/website/client/components/inventory/items/index.vue +++ b/website/client/components/inventory/items/index.vue @@ -193,31 +193,28 @@