- {isStaff ? 'Staff' : ''}
+const TagLabel = ({children}) =>
+ {children}
;
export default TagLabel;
diff --git a/graph/mutators/comment.js b/graph/mutators/comment.js
index d608eee57..553c3f44c 100644
--- a/graph/mutators/comment.js
+++ b/graph/mutators/comment.js
@@ -189,11 +189,31 @@ const setCommentStatus = ({loaders: {Comments}}, {id, status}) => {
});
};
+/**
+ * Adds a tag to a Comment
+ * @param {String} id identifier of the comment (uuid)
+ * @param {String} tag name of the tag
+ */
+const addCommentTag = ({user, loaders: {Comments}}, {id, tag}) => {
+ return CommentsService.addTag(id, tag, user.id);
+};
+
+/**
+ * Removes a tag from a Comment
+ * @param {String} id identifier of the comment (uuid)
+ * @param {String} tag name of the tag
+ */
+const removeCommentTag = ({user, loaders: {Comments}}, {id, tag}) => {
+ return CommentsService.removeTag(id, tag);
+};
+
module.exports = (context) => {
let mutators = {
Comment: {
create: () => Promise.reject(errors.ErrNotAuthorized),
- setCommentStatus: () => Promise.reject(errors.ErrNotAuthorized)
+ setCommentStatus: () => Promise.reject(errors.ErrNotAuthorized),
+ addCommentTag: () => Promise.reject(errors.ErrNotAuthorized),
+ removeCommentTag: () => Promise.reject(errors.ErrNotAuthorized),
}
};
@@ -205,5 +225,13 @@ module.exports = (context) => {
mutators.Comment.setCommentStatus = (action) => setCommentStatus(context, action);
}
+ if (context.user && context.user.can('mutation:addCommentTag')) {
+ mutators.Comment.addCommentTag = (action) => addCommentTag(context, action);
+ }
+
+ if (context.user && context.user.can('mutation:removeCommentTag')) {
+ mutators.Comment.removeCommentTag = (action) => removeCommentTag(context, action);
+ }
+
return mutators;
};
diff --git a/graph/resolvers/root_mutation.js b/graph/resolvers/root_mutation.js
index 2462962c6..dc540b202 100644
--- a/graph/resolvers/root_mutation.js
+++ b/graph/resolvers/root_mutation.js
@@ -1,5 +1,6 @@
const {Error: {ValidationError}} = require('mongoose');
const errors = require('../../errors');
+const CommentsService = require('../../services/comments');
/**
* Wraps up a promise to return an object with the resolution of the promise
@@ -48,7 +49,13 @@ const RootMutation = {
},
setCommentStatus(_, {id, status}, {mutators: {Comment}}) {
return wrapResponse(null)(Comment.setCommentStatus({id, status}));
- }
+ },
+ addCommentTag(_, {id, tag}, {mutators: {Comment}}) {
+ return wrapResponse('comment')(Comment.addCommentTag({id, tag}).then(() => CommentsService.findById(id)));
+ },
+ removeCommentTag(_, {id, tag}, {mutators: {Comment}}) {
+ return wrapResponse('comment')(Comment.removeCommentTag({id, tag}).then(() => CommentsService.findById(id)));
+ },
};
module.exports = RootMutation;
diff --git a/graph/typeDefs.graphql b/graph/typeDefs.graphql
index 92f0d41e2..daf9edafa 100644
--- a/graph/typeDefs.graphql
+++ b/graph/typeDefs.graphql
@@ -641,6 +641,20 @@ type SetCommentStatusResponse implements Response {
errors: [UserError]
}
+# Response to addCommentTag mutation
+type AddCommentTagResponse implements Response {
+ # An array of errors relating to the mutation that occured.
+ comment: Comment
+ errors: [UserError]
+}
+
+# Response to removeCommentTag mutation
+type RemoveCommentTagResponse implements Response {
+ # An array of errors relating to the mutation that occured.
+ comment: Comment
+ errors: [UserError]
+}
+
# All mutations for the application are defined on this object.
type RootMutation {
@@ -664,6 +678,12 @@ type RootMutation {
# Sets Comment status. Requires the `ADMIN` role.
setCommentStatus(id: ID!, status: COMMENT_STATUS!): SetCommentStatusResponse
+
+ # Add tag to comment.
+ addCommentTag(id: ID!, tag: String!): AddCommentTagResponse
+
+ # Remove tag from comment.
+ removeCommentTag(id: ID!, tag: String!): RemoveCommentTagResponse
}
################################################################################
diff --git a/models/user.js b/models/user.js
index d56f030f3..2b65bd300 100644
--- a/models/user.js
+++ b/models/user.js
@@ -156,7 +156,9 @@ const USER_GRAPH_OPERATIONS = [
'mutation:deleteAction',
'mutation:editName',
'mutation:setUserStatus',
- 'mutation:setCommentStatus'
+ 'mutation:setCommentStatus',
+ 'mutation:addCommentTag',
+ 'mutation:removeCommentTag',
];
/**
@@ -176,6 +178,12 @@ UserSchema.method('can', function(...actions) {
return false;
}
+ // {add,remove}CommentTag - requires admin and/or moderator role
+ const userCanModifyTags = user => ['ADMIN', 'MODERATOR'].some(r => user.hasRoles(r));
+ if (actions.some(a => ['mutation:removeCommentTag', 'mutation:addCommentTag'].includes(a)) && ! userCanModifyTags(this)) {
+ return false;
+ }
+
return true;
});
diff --git a/package.json b/package.json
index 740063dd1..457df7120 100644
--- a/package.json
+++ b/package.json
@@ -49,7 +49,7 @@
},
"homepage": "https://github.com/coralproject/talk#readme",
"dependencies": {
- "bcrypt": "^0.8.7",
+ "bcrypt": "^1.0.2",
"body-parser": "^1.15.2",
"cli-table": "^0.3.1",
"commander": "^2.9.0",
@@ -103,6 +103,7 @@
"babel-preset-es2015": "^6.18.0",
"babel-preset-stage-0": "^6.16.0",
"chai": "^3.5.0",
+ "chai-as-promised": "^6.0.0",
"chai-http": "^3.0.0",
"copy-webpack-plugin": "^4.0.0",
"css-loader": "^0.25.0",
diff --git a/services/comments.js b/services/comments.js
index 4dda82b04..75b53873a 100644
--- a/services/comments.js
+++ b/services/comments.js
@@ -4,7 +4,8 @@ const ActionModel = require('../models/action');
const ActionsService = require('./actions');
const ALLOWED_TAGS = [
- {name: 'STAFF'}
+ {name: 'STAFF'},
+ {name: 'BEST'},
];
const STATUSES = [
@@ -44,6 +45,11 @@ module.exports = class CommentsService {
/**
* Adds a tag if it doesn't already exist on the comment.
+ * @throws if tag is already added to the comment
+ * @throws if tag name is not in ALLOWED_TAGS
+ * @param {String} id the id of the comment to tag
+ * @param {String} name the name of the tag to add
+ * @param {String} assigned_by the user id for the user who added the tag
*/
static addTag(id, name, assigned_by) {
@@ -51,22 +57,61 @@ module.exports = class CommentsService {
return Promise.reject(new Error('tag not allowed'));
}
- return CommentModel.update({
+ const filter = {
id,
- tags: {
- $ne: {
- name
+ 'tags.name': {$ne: name},
+ };
+ const update = {
+ $push: {tags: {
+ name,
+ assigned_by,
+ created_at: new Date()
+ }}
+ };
+ return CommentModel.update(filter, update)
+ .then(({nModified}) => {
+ switch (nModified) {
+ case 0:
+
+ // either the tag was already there, or the comment doesn't exist with that id...
+ throw new Error('Could not add tag to comment. Either the comment doesn\'t exist or the tag is already present.');
+ case 1:
+
+ // tag added
+ return;
+ default:
+
+ // this should never happen because no multi parameter and unique index on id
}
- }
- }, {
- $push: {
- tags: {
- name,
- assigned_by,
- created_at: new Date()
+ });
+ }
+
+ /**
+ * Removes a tag from a comment
+ * @throws if the tag is not on the comment
+ * @param {String} id the id of the comment to tag
+ * @param {String} name the name of the tag to add
+ */
+ static removeTag(id, name) {
+ const filter = {
+ id,
+ 'tags.name': name,
+ };
+ const update = {$pull: {tags: {name}}};
+ return CommentModel.update(filter, update)
+ .then(({nModified}) => {
+ switch (nModified) {
+ case 0:
+ throw new Error('Could not remove tag from comment. Either the comment doesn\'t exist or the tag is not present');
+ case 1:
+
+ // tag removed
+ return;
+ default:
+
+ // this should never happen because no multi parameter and unique index on id
}
- }
- });
+ });
}
/**
diff --git a/test/e2e/pages/adminPage.js b/test/e2e/pages/adminPage.js
index e359715ac..e1568ef51 100644
--- a/test/e2e/pages/adminPage.js
+++ b/test/e2e/pages/adminPage.js
@@ -8,6 +8,8 @@ const embedStreamCommands = {
},
approveComment() {
return this
+ .waitForElementVisible('@moderateNav')
+ .click('@moderateNav')
.waitForElementVisible('@moderationList')
.waitForElementVisible('@approveButton')
.click('@approveButton');
@@ -17,6 +19,9 @@ const embedStreamCommands = {
module.exports = {
commands: [embedStreamCommands],
elements: {
+ moderateNav: {
+ selector: '#moderateNav'
+ },
moderationList: {
selector: '#moderationList'
},
diff --git a/test/e2e/pages/embedStreamPage.js b/test/e2e/pages/embedStreamPage.js
index ca72df1db..12b18874b 100644
--- a/test/e2e/pages/embedStreamPage.js
+++ b/test/e2e/pages/embedStreamPage.js
@@ -117,49 +117,55 @@ module.exports = {
selector: '#commentBox .coral-plugin-commentbox-button'
},
likeButton: {
- selector: '.comment .coral-plugin-likes-container .coral-plugin-likes-button'
+ selector: '.embed__stream .comment .coral-plugin-likes-container .coral-plugin-likes-button'
},
likeText: {
- selector: '.comment .coral-plugin-likes-container .coral-plugin-likes-button .coral-plugin-likes-button-text'
+ selector: '.embed__stream .comment .coral-plugin-likes-container .coral-plugin-likes-button .coral-plugin-likes-button-text'
},
likesCount: {
- selector: '.comment .coral-plugin-likes-container .coral-plugin-likes-button .coral-plugin-likes-like-count'
+ selector: '.embed__stream .comment .coral-plugin-likes-container .coral-plugin-likes-button .coral-plugin-likes-like-count'
},
flagButton: {
- selector: '.comment .coral-plugin-flags-container .coral-plugin-flags-button'
+ selector: '.embed__stream .comment .coral-plugin-flags-container .coral-plugin-flags-button'
},
flagPopUp: {
- selector: '.comment .coral-plugin-flags-popup'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup'
},
flagCommentOption: {
- selector: '.comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="COMMENTS"]'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="COMMENTS"]'
},
flagUsernameOption: {
- selector: '.comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="USERS"]'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="USERS"]'
},
flagOtherOption: {
- selector: '.comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="other"]'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup .coral-plugin-flags-popup-radio-label[for="other"]'
},
flagHeaderMessage: {
- selector: '.comment .coral-plugin-flags-popup .coral-plugin-flags-popup-header'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup .coral-plugin-flags-popup-header'
},
flagButtonText: {
- selector: '.comment .coral-plugin-flags-button-text'
+ selector: '.embed__stream .comment .coral-plugin-flags-button-text'
},
flagDoneButton: {
- selector: '.comment .coral-plugin-flags-popup .coral-plugin-flags-popup-button'
+ selector: '.embed__stream .comment .coral-plugin-flags-popup .coral-plugin-flags-popup-button'
},
permalinkButton: {
- selector: '.comment .coral-plugin-permalinks-button'
+ selector: '.embed__stream .comment .coral-plugin-permalinks-button'
},
permalinkPopUp: {
- selector: '.comment .coral-plugin-permalinks-popover.active'
+ selector: '.embed__stream .comment .coral-plugin-permalinks-popover.active'
},
permalinkInput: {
- selector: '.comment .coral-plugin-permalinks-popover.active input'
+ selector: '.embed__stream .comment .coral-plugin-permalinks-popover.active input'
},
registerButton: {
selector: '#signInDialog #coralRegister'
+ },
+ setBestButton: {
+ selector: '.e2e__set-best-comment'
+ },
+ unsetBestButton: {
+ selector: '.e2e__unset-best-comment'
}
}
};
diff --git a/test/e2e/tests/Commenter/BestCommentTest.js b/test/e2e/tests/Commenter/BestCommentTest.js
new file mode 100644
index 000000000..765ef070f
--- /dev/null
+++ b/test/e2e/tests/Commenter/BestCommentTest.js
@@ -0,0 +1,25 @@
+module.exports = {
+ '@tags': ['like', 'comments', 'commenter'],
+ before: client => {
+ const embedStreamPage = client.page.embedStreamPage();
+ const {users} = client.globals;
+
+ embedStreamPage
+ .navigate()
+ .ready();
+
+ embedStreamPage
+ .login(users.commenter);
+ },
+ 'Commenters should not see the set-best-comment button': client => {
+ const embedStreamPage = client.page.embedStreamPage();
+
+ embedStreamPage
+ .postComment('Hi everyone. Isn\'t this the BEST comment!?')
+ .waitForElementVisible('@likeButton')
+ .expect.element('@setBestButton').to.not.be.present;
+ },
+ after: client => {
+ client.end();
+ }
+};
diff --git a/test/e2e/tests/Commenter/FlagUsernameTest.js b/test/e2e/tests/Commenter/FlagUsernameTest.js
index 7d9ab5a90..d72be5386 100644
--- a/test/e2e/tests/Commenter/FlagUsernameTest.js
+++ b/test/e2e/tests/Commenter/FlagUsernameTest.js
@@ -16,6 +16,7 @@ module.exports = {
embedStreamPage
.flagUsername()
+ .click('@flagButton')
.waitForElementVisible('@flagPopUp')
.waitForElementVisible('@flagUsernameOption')
.click('@flagUsernameOption')
diff --git a/test/e2e/tests/Commenter/LikeCommentTest.js b/test/e2e/tests/Commenter/LikeCommentTest.js
index 59e964969..c9915cd81 100644
--- a/test/e2e/tests/Commenter/LikeCommentTest.js
+++ b/test/e2e/tests/Commenter/LikeCommentTest.js
@@ -15,6 +15,7 @@ module.exports = {
const embedStreamPage = client.page.embedStreamPage();
embedStreamPage
+ .postComment(`hi ${Math.random()}`)
.likeComment()
.waitForElementVisible('@likesCount', 2000)
.expect.element('@likeText').text.to.equal('Liked');
diff --git a/test/e2e/tests/EmbedStreamTests.js b/test/e2e/tests/EmbedStreamTests.js
index 09d07c6c5..ca3a52089 100644
--- a/test/e2e/tests/EmbedStreamTests.js
+++ b/test/e2e/tests/EmbedStreamTests.js
@@ -41,7 +41,6 @@ module.exports = {
.setValue('#password', mockUser.pw)
.setValue('#confirmPassword', mockUser.pw)
.click('#coralSignUpButton')
- .pause(5000)
.waitForElementVisible('#coralLogInButton', 10000)
.click('#coralLogInButton')
.waitForElementVisible('.coral-plugin-commentbox-button', 4000)
@@ -49,10 +48,10 @@ module.exports = {
// Post a comment
.setValue('.coral-plugin-commentbox-textarea', mockComment)
.click('.coral-plugin-commentbox-button')
- .waitForElementVisible('.coral-plugin-content-text', 1000)
+ .waitForElementVisible('.embed__stream .coral-plugin-commentcontent-text', 1000)
// Verify that it appears
- .assert.containsText('.coral-plugin-content-text', mockComment);
+ .assert.containsText('.embed__stream .coral-plugin-commentcontent-text', mockComment);
done();
})
.catch((err) => {
@@ -73,11 +72,7 @@ module.exports = {
// Post a comment
client.waitForElementVisible('.coral-plugin-commentbox-button', 2000)
.setValue('.coral-plugin-commentbox-textarea', mockComment)
- .click('.coral-plugin-commentbox-button')
- .waitForElementVisible('#coral-notif', 1000)
-
- // Verify that it appears
- .assert.containsText('#coral-notif', 'moderation team');
+ .click('.coral-plugin-commentbox-button');
done();
})
.catch((err) => {
@@ -102,15 +97,16 @@ module.exports = {
.click('.coral-plugin-commentbox-button')
// Post a reply
- .waitForElementVisible('.coral-plugin-replies-reply-button', 5000)
- .click('.coral-plugin-replies-reply-button')
+
+ .waitForElementVisible('.embed__stream .coral-plugin-replies-reply-button', 5000)
+ .click('.embed__stream .coral-plugin-replies-reply-button')
.waitForElementVisible('#replyText')
.setValue('#replyText', mockReply)
- .click('.coral-plugin-replies-textarea .coral-plugin-commentbox-button')
- .waitForElementVisible('.reply', 20000)
+ .click('.embed__stream .coral-plugin-replies-textarea .coral-plugin-commentbox-button')
+ .waitForElementVisible('.embed__stream .reply', 20000)
// Verify that it appears
- .assert.containsText('.reply', mockReply);
+ .assert.containsText('.embed__stream .reply', mockReply);
done();
})
.catch((err) => {
@@ -171,7 +167,7 @@ module.exports = {
// Verify that comment count is correct
client.waitForElementVisible('.coral-plugin-comment-count-text', 2000)
- .assert.containsText('.coral-plugin-comment-count-text', '4 Comments');
+ .assert.containsText('.coral-plugin-comment-count-text', '5 Comments');
done();
});
},
diff --git a/test/e2e/tests/Moderator/BestCommentTest.js b/test/e2e/tests/Moderator/BestCommentTest.js
new file mode 100644
index 000000000..8b8be708d
--- /dev/null
+++ b/test/e2e/tests/Moderator/BestCommentTest.js
@@ -0,0 +1,50 @@
+module.exports = {
+ '@tags': ['like', 'comments', 'commenter'],
+ before: client => {
+ const embedStreamPage = client.page.embedStreamPage();
+ const {users} = client.globals;
+
+ embedStreamPage
+ .navigate()
+ .ready();
+
+ embedStreamPage
+ .login(users.moderator);
+ },
+ 'Moderator marks/unmarks their comment as BEST': client => {
+ const embedStreamPage = client.page.embedStreamPage();
+
+ const setBestCommentButton = '.e2e__set-best-comment';
+ const unsetBestCommentButton = '.e2e__unset-best-comment';
+
+ embedStreamPage
+ .postComment(`Hi everyone. Isn't this the BEST comment!? ${String(Math.random()).slice(2)}`)
+ .waitForElementVisible(setBestCommentButton, 2000)
+ .click(setBestCommentButton)
+ .waitForElementVisible(unsetBestCommentButton, 2000);
+
+ // on refresh, it should still be tagged as best :)
+ client.refresh();
+ embedStreamPage.ready()
+
+ // (bengo) I have no idea why, but if the selector here is '@unsetBestButton', it doesn't find it... I think nightwatch bug?
+ // this is why I am not using @elements. Advice appreciated.
+ .waitForElementVisible(unsetBestCommentButton, 2000);
+
+ // now remove the best tag
+ embedStreamPage
+ .click(unsetBestCommentButton);
+
+ embedStreamPage
+ .waitForElementVisible(setBestCommentButton, 2000);
+
+ // on refresh it should still be untagged best
+ client.refresh();
+ embedStreamPage.ready()
+ .waitForElementVisible(setBestCommentButton);
+
+ },
+ after: client => {
+ client.end();
+ }
+};
diff --git a/test/graph/mutations/addCommentTag.js b/test/graph/mutations/addCommentTag.js
new file mode 100644
index 000000000..14a746705
--- /dev/null
+++ b/test/graph/mutations/addCommentTag.js
@@ -0,0 +1,62 @@
+const expect = require('chai').expect;
+const {graphql} = require('graphql');
+
+const schema = require('../../../graph/schema');
+const Context = require('../../../graph/context');
+const UserModel = require('../../../models/user');
+const SettingsService = require('../../../services/settings');
+const CommentsService = require('../../../services/comments');
+
+describe('graph.mutations.addCommentTag', () => {
+ let comment;
+ beforeEach(async () => {
+ await SettingsService.init();
+ comment = await CommentsService.publicCreate({body: `hello there! ${ String(Math.random()).slice(2)}`});
+ });
+
+ const query = `
+ mutation AddCommentTag ($id: ID!, $tag: String!) {
+ addCommentTag(id:$id, tag:$tag) {
+ comment {
+ tags {
+ name
+ }
+ }
+ errors {
+ translation_key
+ }
+ }
+ }
+ `;
+
+ it('moderators can add tags to comments', async () => {
+ const user = new UserModel({roles: ['MODERATOR' ]});
+ const context = new Context({user});
+ const response = await graphql(schema, query, {}, context, {id: comment.id, tag: 'BEST'});
+ if (response.errors && response.errors.length) {
+ console.error(response.errors);
+ }
+ expect(response.errors).to.be.empty;
+ expect(response.data.addCommentTag.comment.tags).to.deep.equal([{name: 'BEST'}]);
+ });
+
+ describe('users who cant add tags', () => {
+ Object.entries({
+ 'anonymous': undefined,
+ 'regular commenter': new UserModel({}),
+ 'banned moderator': new UserModel({roles: ['MODERATOR'], status: 'BANNED'})
+ }).forEach(([ userDescription, user ]) => {
+ it(userDescription, async function () {
+ const context = new Context({user});
+ const response = await graphql(schema, query, {}, context, {id: comment.id, tag: 'BEST'});
+ if (response.errors && response.errors.length) {
+ console.error(response.errors);
+ }
+ expect(response.errors).to.be.empty;
+ expect(response.data.addCommentTag.errors).to.deep.equal([{'translation_key':'NOT_AUTHORIZED'}]);
+ expect(response.data.addCommentTag.comment).to.be.null;
+ });
+ });
+ });
+
+});
diff --git a/test/graph/mutations/removeCommentTag.js b/test/graph/mutations/removeCommentTag.js
new file mode 100644
index 000000000..99def095d
--- /dev/null
+++ b/test/graph/mutations/removeCommentTag.js
@@ -0,0 +1,69 @@
+const expect = require('chai').expect;
+const {graphql} = require('graphql');
+
+const schema = require('../../../graph/schema');
+const Context = require('../../../graph/context');
+const UserModel = require('../../../models/user');
+const SettingsService = require('../../../services/settings');
+const CommentsService = require('../../../services/comments');
+
+describe('graph.mutations.removeCommentTag', () => {
+ let comment;
+ beforeEach(async () => {
+ await SettingsService.init();
+ comment = await CommentsService.publicCreate({body: `hello there! ${ String(Math.random()).slice(2)}`});
+ });
+
+ const query = `
+ mutation RemoveCommentTag ($id: ID!, $tag: String!) {
+ removeCommentTag(id:$id, tag:$tag) {
+ comment {
+ tags {
+ name
+ }
+ }
+ errors {
+ translation_key
+ }
+ }
+ }
+ `;
+
+ it('moderators can add remove tags from comments', async () => {
+ const user = new UserModel({roles: ['MODERATOR' ]});
+ const context = new Context({user});
+
+ // add a tag first
+ await CommentsService.addTag(comment.id, 'BEST');
+ const response = await graphql(schema, query, {}, context, {id: comment.id, tag: 'BEST'});
+ if (response.errors && response.errors.length) {
+ console.error(response.errors);
+ }
+ expect(response.errors).to.be.empty;
+ expect(response.data.removeCommentTag.errors).to.be.null;
+ expect(response.data.removeCommentTag.comment.tags).to.deep.equal([]);
+ });
+
+ describe('users who cant remove tags', () => {
+ Object.entries({
+ 'anonymous': undefined,
+ 'regular commenter': new UserModel({}),
+ 'banned moderator': new UserModel({roles: ['MODERATOR'], status: 'BANNED'})
+ }).forEach(([ userDescription, user ]) => {
+ it(userDescription, async function () {
+ const context = new Context({user});
+
+ // add a tag first
+ await CommentsService.addTag(comment.id, 'BEST');
+ const response = await graphql(schema, query, {}, context, {id: comment.id, tag: 'BEST'});
+ if (response.errors && response.errors.length) {
+ console.error(response.errors);
+ }
+ expect(response.errors).to.be.empty;
+ expect(response.data.removeCommentTag.errors).to.deep.equal([{'translation_key':'NOT_AUTHORIZED'}]);
+ expect(response.data.removeCommentTag.comment).to.be.null;
+ });
+ });
+ });
+
+});
diff --git a/test/services/comments.js b/test/services/comments.js
index 0bab40bfa..782c00560 100644
--- a/test/services/comments.js
+++ b/test/services/comments.js
@@ -8,7 +8,7 @@ const CommentsService = require('../../services/comments');
const settings = {id: '1', moderation: 'PRE', wordlist: {banned: ['bad words'], suspect: ['suspect words']}};
-const expect = require('chai').expect;
+const expect = require('chai').use(require('chai-as-promised')).expect;
describe('services.CommentsService', () => {
const comments = [{
@@ -68,6 +68,7 @@ describe('services.CommentsService', () => {
}];
const users = [{
+ id: 'u1',
email: 'stampi@gmail.com',
username: 'Stampi',
password: '1Coral!!'
@@ -218,6 +219,64 @@ describe('services.CommentsService', () => {
});
+ describe('#addTag', () => {
+ it('adds a tag', async () => {
+ const commentId = comments[0].id;
+ const tagName = 'BEST';
+ const userId = users[0].id;
+ await CommentsService.addTag(commentId, tagName, userId);
+ const updatedComment = await CommentsService.findById(commentId);
+ expect(updatedComment.tags.length).to.equal(1);
+ expect(updatedComment.tags[0].name).to.equal(tagName);
+ expect(updatedComment.tags[0].assigned_by).to.equal(userId);
+ expect(updatedComment.tags[0].created_at).to.be.an.instanceof(Date);
+ });
+ it('can\'t add a tag to comment id that doesn\'t exist', async () => {
+ const commentId = 'fakenews';
+ const tagName = 'BEST';
+ const userId = users[0].id;
+ await expect(CommentsService.addTag(commentId, tagName, userId)).to.be.rejected;
+ });
+ it('can\'t add same tag.name twice', async () => {
+ const commentId = comments[0].id;
+ const tagName = 'BEST';
+ const userId = users[0].id;
+
+ // first time
+ await CommentsService.addTag(commentId, tagName, userId);
+
+ // second time should fail
+ await expect(CommentsService.addTag(commentId, tagName, userId)).to.be.rejected;
+ });
+ });
+
+ describe('#removeTag', () => {
+ it('removes a tag', async () => {
+ const commentId = comments[0].id;
+ const tagName = 'BEST';
+ await CommentsService.addTag(commentId, tagName, users[0].id);
+ const updatedComment = await CommentsService.findById(commentId);
+ expect(updatedComment.tags.length).to.equal(1);
+
+ // ok now to remove it
+ await CommentsService.removeTag(commentId, tagName);
+ const updatedComment2 = await CommentsService.findById(commentId);
+ expect(updatedComment2.tags.length).to.equal(0);
+ });
+ it('throws if removing a tag that isn\'t there', async () => {
+ const commentId = comments[0].id;
+
+ // just make sure it has no tags to start
+ const updatedComment2 = await CommentsService.findById(commentId);
+ expect(updatedComment2.tags.length).to.equal(0);
+
+ const tagName = 'BEST';
+
+ // ok now to remove it
+ await expect(CommentsService.removeTag(commentId, tagName)).to.be.rejected;
+ });
+ });
+
describe('#changeStatus', () => {
it('should change the status of a comment from no status', () => {
diff --git a/yarn.lock b/yarn.lock
index 0331202ef..82b5e92f3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1,7 +1,5 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
-
-
"@kadira/storybook-deployer@^1.1.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@kadira/storybook-deployer/-/storybook-deployer-1.2.0.tgz#1708f5cb37fa08ab4173b1bd99df6f4717dfae12"
@@ -291,14 +289,14 @@ assert@^1.1.1:
dependencies:
util "0.10.3"
-assertion-error@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
-
assertion-error@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+assertion-error@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
+
ast-traverse@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6"
@@ -315,15 +313,11 @@ async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-async@1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0"
-
-async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2:
+async@^1.4.0, async@^1.4.2, async@^1.5.2, async@1.x:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-async@2.1.4, async@^2.1.2, async@^2.1.4:
+async@^2.1.2, async@^2.1.4, async@2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
@@ -337,6 +331,10 @@ async@~0.9.0:
version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+async@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0"
+
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -1055,10 +1053,6 @@ babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
-balanced-match@0.1.0, balanced-match@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a"
-
balanced-match@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.2.1.tgz#7bc658b4bed61eee424ad74f75f5c3e2c4df3cc7"
@@ -1067,6 +1061,10 @@ balanced-match@^0.4.1, balanced-match@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+balanced-match@~0.1.0, balanced-match@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a"
+
base64-js@^1.0.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
@@ -1075,7 +1073,7 @@ base64-url@1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f"
-base64url@2.0.0, base64url@^2.0.0:
+base64url@^2.0.0, base64url@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
@@ -1089,12 +1087,13 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
-bcrypt@^0.8.7:
- version "0.8.7"
- resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-0.8.7.tgz#bc3875a9afd0a7b2cd231a6a7f218a5ce156b093"
+bcrypt@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-1.0.2.tgz#d05fc5d223173e0e28ec381c0f00cc25ffaf2736"
dependencies:
bindings "1.2.1"
- nan "2.3.5"
+ nan "2.5.0"
+ node-pre-gyp "0.6.32"
big.js@^3.1.3:
version "3.1.3"
@@ -1120,6 +1119,10 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
+bluebird@^2.10.2:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
+
bluebird@2.10.2:
version "2.10.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b"
@@ -1136,10 +1139,6 @@ bluebird@3.4.6:
version "3.4.6"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f"
-bluebird@^2.10.2:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
-
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
@@ -1353,6 +1352,12 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
+chai-as-promised:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-6.0.0.tgz#1a02a433a6f24dafac63b9c96fa1684db1aa8da6"
+ dependencies:
+ check-error "^1.0.2"
+
chai-http@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/chai-http/-/chai-http-3.0.0.tgz#5460d8036e1f1a12b0b5b5cbd529e6dc1d31eb4b"
@@ -1378,7 +1383,7 @@ chai@^3.5.0:
deep-eql "^0.1.3"
type-detect "^1.0.0"
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3, chalk@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -1408,6 +1413,10 @@ chdir-promise@0.2.1:
q "1.1.2"
spots "0.3.0"
+check-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+
check-more-types@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-1.1.0.tgz#3d0e36cbfbe907b3e5ec0a14f6b256086452c216"
@@ -1533,7 +1542,7 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
-cli-table@0.3.1, cli-table@^0.3.1:
+cli-table@^0.3.1, cli-table@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
dependencies:
@@ -1617,18 +1626,18 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
-colors@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
-
-colors@1.1.2, colors@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
colors@~0.6.0-1:
version "0.6.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
+colors@~1.1.2, colors@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+colors@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+
combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
@@ -1641,6 +1650,16 @@ combined-stream@~0.0.4:
dependencies:
delayed-stream "0.0.5"
+commander@^2.5.0, commander@^2.9.0, commander@2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commander@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
+
commander@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06"
@@ -1659,16 +1678,6 @@ commander@2.8.x:
dependencies:
graceful-readlink ">= 1.0.0"
-commander@2.9.0, commander@^2.5.0, commander@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-commander@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
-
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -1796,7 +1805,7 @@ cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-cookiejar@2.0.x, cookiejar@^2.0.6:
+cookiejar@^2.0.6, cookiejar@2.0.x:
version "2.0.6"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe"
@@ -1821,7 +1830,7 @@ core-js@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
-core-util-is@1.0.2, core-util-is@~1.0.0:
+core-util-is@~1.0.0, core-util-is@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -2011,7 +2020,7 @@ csso@~2.3.1:
clap "^1.0.9"
source-map "^0.5.3"
-cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
+"cssom@>= 0.3.0 < 0.4.0", cssom@0.3.x:
version "0.3.2"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
@@ -2036,16 +2045,16 @@ cz-conventional-changelog@1.1.5:
dependencies:
word-wrap "^1.0.3"
-d3-helpers@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/d3-helpers/-/d3-helpers-0.3.0.tgz#4b31dce4a2121a77336384574d893fbed5fb293d"
-
d@^0.1.1, d@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
dependencies:
es5-ext "~0.10.2"
+d3-helpers@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/d3-helpers/-/d3-helpers-0.3.0.tgz#4b31dce4a2121a77336384574d893fbed5fb293d"
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -2076,13 +2085,17 @@ date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-debug@*, debug@2, debug@2.6.0, debug@^2.1.1, debug@^2.2.0:
+debug@*, debug@^2.1.1, debug@^2.2.0, debug@2, debug@2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
dependencies:
ms "0.7.2"
-debug@2.2.0, debug@~2.2.0:
+debug@^0.7.2, debug@~0.7.4:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
+
+debug@~2.2.0, debug@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
@@ -2094,15 +2107,11 @@ debug@2.3.3:
dependencies:
ms "0.7.2"
-debug@^0.7.2, debug@~0.7.4:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
-
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-deep-eql@0.1.3, deep-eql@^0.1.3:
+deep-eql@^0.1.3, deep-eql@0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
dependencies:
@@ -2168,14 +2177,14 @@ del@^2.0.2:
pinkie-promise "^2.0.0"
rimraf "^2.2.8"
-delayed-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f"
-
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+delayed-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f"
+
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -2232,7 +2241,7 @@ dns-prefetch-control@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2"
-doctrine@1.5.0, doctrine@^1.2.2:
+doctrine@^1.2.2, doctrine@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
dependencies:
@@ -2243,7 +2252,7 @@ doctypes@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
-dom-serializer@0, dom-serializer@~0.1.0:
+dom-serializer@~0.1.0, dom-serializer@0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
dependencies:
@@ -2254,21 +2263,21 @@ domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-domelementtype@1, domelementtype@~1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
domelementtype@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-domhandler@2.3, domhandler@^2.3.0:
+domelementtype@~1.1.1, domelementtype@1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+domhandler@^2.3.0, domhandler@2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
dependencies:
domelementtype "1"
-domutils@1.5, domutils@1.5.1, domutils@^1.5.1:
+domutils@^1.5.1, domutils@1.5, domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
dependencies:
@@ -2352,18 +2361,18 @@ encoding@^0.1.11:
dependencies:
iconv-lite "~0.4.13"
-end-of-stream@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
- dependencies:
- once "~1.3.0"
-
end-of-stream@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07"
dependencies:
once "~1.3.0"
+end-of-stream@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
+ dependencies:
+ once "~1.3.0"
+
enhanced-resolve@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.0.3.tgz#df14c06b5fc5eecade1094c9c5a12b4b3edc0b62"
@@ -2373,14 +2382,14 @@ enhanced-resolve@^3.0.0:
object-assign "^4.0.1"
tapable "^0.2.5"
-entities@1.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
-
entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+entities@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+
env-rewrite@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/env-rewrite/-/env-rewrite-1.0.2.tgz#3e344a95af1bdaab34a559479b8be3abd0804183"
@@ -2454,14 +2463,14 @@ es6-map@^0.1.3:
es6-symbol "~3.1.0"
event-emitter "~0.3.4"
-es6-promise@3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
-
es6-promise@^3.0.2:
version "3.3.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+es6-promise@3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
+
es6-set@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
@@ -2476,7 +2485,7 @@ es6-shim@^0.35.3:
version "0.35.3"
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26"
-es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
+es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
dependencies:
@@ -2500,15 +2509,15 @@ escape-regexp-component@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz#9c63b6d0b25ff2a88c3adbd18c5b61acc3b9faa2"
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
escape-string-regexp@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@1.x.x, escodegen@^1.6.1:
+escodegen@^1.6.1, escodegen@1.x.x:
version "1.8.1"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
dependencies:
@@ -2644,14 +2653,14 @@ esprima-fb@~15001.1001.0-dev-harmony-fb:
version "15001.1001.0-dev-harmony-fb"
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
-esprima@3.x.x, esprima@~3.1.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+esprima@~3.1.0, esprima@3.x.x:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
esrecurse@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
@@ -2776,14 +2785,14 @@ express@^4.12.2, express@^4.14.0:
utils-merge "1.0.0"
vary "~1.1.0"
-extend@3, extend@^3.0.0, extend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
-
extend@^1.2.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extend/-/extend-1.3.0.tgz#d1516fb0ff5624d2ebf9123ea1dac5a1994004f8"
+extend@^3.0.0, extend@~3.0.0, extend@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+
external-editor@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.1.tgz#4c597c6c88fa6410e41dbbaa7b1be2336aa31095"
@@ -2952,14 +2961,6 @@ forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-form-data@1.0.0-rc4:
- version "1.0.0-rc4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e"
- dependencies:
- async "^1.5.2"
- combined-stream "^1.0.5"
- mime-types "^2.1.10"
-
form-data@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz#26f8bc26da6440e299cbdcfb69035c4f77a6e466"
@@ -2976,6 +2977,14 @@ form-data@~2.1.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
+form-data@1.0.0-rc4:
+ version "1.0.0-rc4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e"
+ dependencies:
+ async "^1.5.2"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.10"
+
formidable@^1.0.17:
version "1.1.1"
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
@@ -3190,6 +3199,37 @@ glob-to-regexp@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+glob@^5.0.15, glob@^5.0.3:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^6.0.4:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glob@3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.3.tgz#e313eeb249c7affaa5c475286b0e115b59839467"
@@ -3219,37 +3259,6 @@ glob@7.0.5, glob@7.0.x:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.2"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^5.0.15, glob@^5.0.3:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
globals@^9.0.0, globals@^9.14.0:
version "9.14.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034"
@@ -3591,15 +3600,15 @@ https-proxy-agent@1:
debug "2"
extend "3"
+iconv-lite@^0.4.13, iconv-lite@^0.4.5, iconv-lite@~0.4.13, iconv-lite@0.4.15:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+
iconv-lite@0.4.13:
version "0.4.13"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
-iconv-lite@0.4.15, iconv-lite@^0.4.13, iconv-lite@^0.4.5, iconv-lite@~0.4.13:
- version "0.4.15"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
-
-icss-replace-symbols@1.0.2, icss-replace-symbols@^1.0.2:
+icss-replace-symbols@^1.0.2, icss-replace-symbols@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5"
@@ -3657,7 +3666,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
+inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@2, inherits@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
@@ -3676,24 +3685,7 @@ inquirer-confirm@0.2.2:
bluebird "2.9.24"
inquirer "0.8.2"
-inquirer@0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.11.1.tgz#623b6e0c101d2fe9e8e8ed902e651e0519d143e5"
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^1.0.1"
- figures "^1.3.5"
- lodash "^3.3.1"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-inquirer@0.12.0, inquirer@^0.12.0:
+inquirer@^0.12.0, inquirer@0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
dependencies:
@@ -3711,19 +3703,6 @@ inquirer@0.12.0, inquirer@^0.12.0:
strip-ansi "^3.0.0"
through "^2.3.6"
-inquirer@0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.8.2.tgz#41586548e1c5d9b3f81df7325034baacab6f58ab"
- dependencies:
- ansi-regex "^1.1.1"
- chalk "^1.0.0"
- cli-width "^1.0.1"
- figures "^1.3.5"
- lodash "^3.3.1"
- readline2 "^0.1.1"
- rx "^2.4.3"
- through "^2.3.6"
-
inquirer@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.1.tgz#6dfbffaf4d697dd76c8fe349f919de01c28afc4d"
@@ -3742,6 +3721,36 @@ inquirer@^3.0.1:
strip-ansi "^3.0.0"
through "^2.3.6"
+inquirer@0.11.1:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.11.1.tgz#623b6e0c101d2fe9e8e8ed902e651e0519d143e5"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^1.0.1"
+ figures "^1.3.5"
+ lodash "^3.3.1"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+inquirer@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.8.2.tgz#41586548e1c5d9b3f81df7325034baacab6f58ab"
+ dependencies:
+ ansi-regex "^1.1.1"
+ chalk "^1.0.0"
+ cli-width "^1.0.1"
+ figures "^1.3.5"
+ lodash "^3.3.1"
+ readline2 "^0.1.1"
+ rx "^2.4.3"
+ through "^2.3.6"
+
interpret@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
@@ -3989,14 +3998,14 @@ is-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
isemail@1.x.x:
version "1.2.0"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
@@ -4137,7 +4146,7 @@ js-tokens@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
-js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@~3.7.0:
+js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@~3.7.0, js-yaml@3.x:
version "3.7.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
dependencies:
@@ -4411,7 +4420,7 @@ loader-runner@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
-loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.7, loader-utils@~0.2.2:
+loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@0.2.x:
version "0.2.16"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
dependencies:
@@ -4531,7 +4540,7 @@ lodash.cond@^4.3.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
-lodash.create@3.1.1, lodash.create@^3.1.1:
+lodash.create@^3.1.1, lodash.create@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
dependencies:
@@ -4624,7 +4633,7 @@ lodash.pickby@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff"
-lodash.reduce@4.6.0, lodash.reduce@^4.4.0:
+lodash.reduce@^4.4.0, lodash.reduce@4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
@@ -4650,18 +4659,18 @@ lodash.words@^3.0.0:
dependencies:
lodash._root "^3.0.0"
-lodash@3.10.1, lodash@^3.3.1:
+lodash@^3.3.1, lodash@3.10.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-lodash@3.9.3:
- version "3.9.3"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.9.3.tgz#0159e86832feffc6d61d852b12a953b99496bd32"
-
lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+lodash@3.9.3:
+ version "3.9.3"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.9.3.tgz#0159e86832feffc6d61d852b12a953b99496bd32"
+
log4js@*:
version "1.1.0"
resolved "https://registry.yarnpkg.com/log4js/-/log4js-1.1.0.tgz#c7d2b616d91bbf47cc65fb79d6fe04581c8096fa"
@@ -4684,7 +4693,7 @@ lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
-lru-cache@2, lru-cache@^2.5.0:
+lru-cache@^2.5.0, lru-cache@2:
version "2.7.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
@@ -4765,7 +4774,7 @@ metascraper@^1.0.6:
popsicle "^6.2.0"
to-title-case "^1.0.0"
-methods@1.x, methods@^1.1.1, methods@^1.1.2, methods@~1.1.2:
+methods@^1.1.1, methods@^1.1.2, methods@~1.1.2, methods@1.x:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@@ -4814,7 +4823,7 @@ mime-types@~2.0.3:
dependencies:
mime-db "~1.12.0"
-mime@1.3.4, mime@^1.3.4:
+mime@^1.3.4, mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
@@ -4826,7 +4835,7 @@ minimalistic-assert@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3:
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, "minimatch@2 || 3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
dependencies:
@@ -4839,7 +4848,11 @@ minimatch@~0.2.11, minimatch@~0.2.14:
lru-cache "2"
sigmund "~1.0.0"
-minimist@0.0.8, minimist@~0.0.1:
+minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+minimist@~0.0.1, minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
@@ -4847,9 +4860,11 @@ minimist@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.0.tgz#cdf225e8898f840a258ded44fc91776770afdc93"
-minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.1, mkdirp@0.5.x:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
mkdirp@0.3.0:
version "0.3.0"
@@ -4861,12 +4876,6 @@ mkdirp@0.5.0:
dependencies:
minimist "0.0.8"
-mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
mkpath@>=0.1.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d"
@@ -4911,6 +4920,10 @@ mocha@^3.1.2:
mkdirp "0.5.1"
supports-color "3.1.2"
+moment@^2.10.3, moment@2.x.x:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
+
moment@2.12.0:
version "2.12.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.12.0.tgz#dc2560d19838d6c0731b1a6afa04675264d360d6"
@@ -4919,10 +4932,6 @@ moment@2.17.0:
version "2.17.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.0.tgz#a4c292e02aac5ddefb29a6eed24f51938dd3b74f"
-moment@2.x.x, moment@^2.10.3:
- version "2.17.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82"
-
mongodb-core@2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.7.tgz#6a27909b98142ef2508d924c274969008954fa29"
@@ -4982,14 +4991,14 @@ mquery@2.2.1:
regexp-clone "0.0.1"
sliced "0.0.5"
+ms@^0.7.1, ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
ms@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-ms@0.7.2, ms@^0.7.1:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
-
muri@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.0.tgz#b86383c902920b09ebe62af0e75c94de5f33cd3d"
@@ -5006,9 +5015,9 @@ mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-nan@2.3.5, nan@^2.3.0:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.3.5.tgz#822a0dc266290ce4cd3a12282ca3e7e364668a08"
+nan@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
natural-compare@^1.4.0:
version "1.4.0"
@@ -5111,7 +5120,7 @@ node-libs-browser@^2.0.0:
util "^0.10.3"
vm-browserify "0.0.4"
-node-pre-gyp@^0.6.29:
+node-pre-gyp@0.6.32, node-pre-gyp@^0.6.29:
version "0.6.32"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
dependencies:
@@ -5203,18 +5212,18 @@ nodemon@^1.11.0:
undefsafe "0.0.3"
update-notifier "0.5.0"
-nopt@3.x, nopt@~3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
nopt@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
dependencies:
abbrev "1"
+nopt@~3.0.6, nopt@3.x:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
normalize-package-data@^2.3.2:
version "2.3.5"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
@@ -5357,7 +5366,7 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-optimist@0.6.1, optimist@>=0.3.5, optimist@^0.6.1:
+optimist@^0.6.1, optimist@>=0.3.5, optimist@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
dependencies:
@@ -5533,16 +5542,16 @@ path-parse@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-
path-to-regexp@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
dependencies:
isarray "0.0.1"
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -5848,33 +5857,33 @@ postcss-mixins@^2.1.0:
postcss "^5.0.10"
postcss-simple-vars "^1.0.1"
-postcss-modules-extract-imports@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.0.tgz#5b07f368e350cda6fd5c8844b79123a7bd3e37be"
- dependencies:
- postcss "^5.0.4"
-
postcss-modules-extract-imports@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341"
dependencies:
postcss "^5.0.4"
-postcss-modules-local-by-default@1.1.1, postcss-modules-local-by-default@^1.0.1:
+postcss-modules-extract-imports@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.0.tgz#5b07f368e350cda6fd5c8844b79123a7bd3e37be"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce"
dependencies:
css-selector-tokenizer "^0.6.0"
postcss "^5.0.4"
-postcss-modules-scope@1.0.2, postcss-modules-scope@^1.0.0:
+postcss-modules-scope@^1.0.0, postcss-modules-scope@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29"
dependencies:
css-selector-tokenizer "^0.6.0"
postcss "^5.0.4"
-postcss-modules-values@1.2.2, postcss-modules-values@^1.1.0:
+postcss-modules-values@^1.1.0, postcss-modules-values@1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1"
dependencies:
@@ -6040,14 +6049,6 @@ postcss-zindex@^2.0.1:
postcss "^5.0.4"
uniqs "^2.0.0"
-postcss@5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.1.2.tgz#bd84886a66bcad489afaf7c673eed5ef639551e2"
- dependencies:
- js-base64 "^2.1.9"
- source-map "^0.5.6"
- supports-color "^3.1.2"
-
postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.2, postcss@^5.2.11, postcss@^5.2.4, postcss@^5.2.5, postcss@^5.2.9:
version "5.2.11"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.11.tgz#ff29bcd6d2efb98bfe08a022055ec599bbe7b761"
@@ -6057,6 +6058,14 @@ postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.
source-map "^0.5.6"
supports-color "^3.2.3"
+postcss@5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.1.2.tgz#bd84886a66bcad489afaf7c673eed5ef639551e2"
+ dependencies:
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.1.2"
+
pre-git@^3.10.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/pre-git/-/pre-git-3.12.0.tgz#8291899a15ba86f9cdaa8ca180e47096deff8dc3"
@@ -6121,7 +6130,7 @@ process@^0.11.0:
version "0.11.9"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
-progress@1.1.8, progress@^1.1.8:
+progress@^1.1.8, progress@1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
@@ -6274,18 +6283,22 @@ pug@^2.0.0-beta3:
pug-runtime "^2.0.3"
pug-strip-comments "^1.0.2"
+punycode@^1.2.4, punycode@^1.4.1, punycode@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-punycode@1.4.1, punycode@^1.2.4, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
pym.js@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/pym.js/-/pym.js-1.1.1.tgz#3b5eb9e8499e5c95e5cb8fe29888ea7edf10a507"
+q@^1.1.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+
q@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/q/-/q-1.1.2.tgz#6357e291206701d99f197ab84e57e8ad196f2a89"
@@ -6298,15 +6311,7 @@ q@2.0.3:
pop-iterate "^1.0.1"
weak-map "^1.0.5"
-q@^1.1.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
-
-qs@6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
-
-qs@6.2.1, qs@^6.1.0, qs@^6.2.0:
+qs@^6.1.0, qs@^6.2.0, qs@6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
@@ -6314,6 +6319,10 @@ qs@~6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+qs@6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
+
query-string@^4.1.0, query-string@^4.2.2:
version "4.3.1"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.1.tgz#54baada6713eafc92be75c47a731f2ebd09cd11d"
@@ -6333,14 +6342,14 @@ quote@0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/quote/-/quote-0.4.0.tgz#10839217f6c1362b89194044d29b233fd7f32f01"
-ramda@0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.9.1.tgz#cc914dc3a82c608d003090203787c3f6826c1d87"
-
ramda@^0.22.1:
version "0.22.1"
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.22.1.tgz#031da0c3df417c5b33c96234757eb37033f36a0e"
+ramda@0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.9.1.tgz#cc914dc3a82c608d003090203787c3f6826c1d87"
+
random-bytes@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
@@ -6396,7 +6405,7 @@ react-apollo@^0.10.0:
optionalDependencies:
react-dom "0.14.x || 15.* || ^15.0.0"
-"react-dom@0.14.x || 15.* || ^15.0.0", react-dom@15.3.2, react-dom@^15.3.1:
+react-dom@^15.3.1, "react-dom@0.14.x || 15.* || ^15.0.0", react-dom@15.3.2:
version "15.3.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f"
@@ -6458,7 +6467,7 @@ react-tagsinput@^3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/react-tagsinput/-/react-tagsinput-3.14.0.tgz#6729f8d5b313ed8fbb35496205ec2a97654af6bc"
-react@15.3.2, react@^15.3.1:
+react@^15.3.1, react@15.3.2:
version "15.3.2"
resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e"
dependencies:
@@ -6494,7 +6503,7 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
-readable-stream@1.1, readable-stream@1.1.x, readable-stream@^1.1.7:
+readable-stream@^1.1.7, readable-stream@1.1, readable-stream@1.1.x:
version "1.1.13"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
dependencies:
@@ -6503,7 +6512,7 @@ readable-stream@1.1, readable-stream@1.1.x, readable-stream@^1.1.7:
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@2, readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.2.2:
+readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.2.2, readable-stream@2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
@@ -6515,7 +6524,7 @@ readable-stream@2, readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13",
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
-readable-stream@2.1.5, readable-stream@^2.0.5, readable-stream@~2.1.4:
+readable-stream@^2.0.5, readable-stream@~2.1.4, readable-stream@2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
dependencies:
@@ -6551,15 +6560,6 @@ readline2@^1.0.1:
is-fullwidth-code-point "^1.0.0"
mute-stream "0.0.5"
-recast@0.10.33:
- version "0.10.33"
- resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
- dependencies:
- ast-types "0.8.12"
- esprima-fb "~15001.1001.0-dev-harmony-fb"
- private "~0.1.5"
- source-map "~0.5.0"
-
recast@^0.11.17:
version "0.11.20"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.20.tgz#2cb9bec269c03b36d0598118a936cd0a293ca3f3"
@@ -6569,6 +6569,15 @@ recast@^0.11.17:
private "~0.1.5"
source-map "~0.5.0"
+recast@0.10.33:
+ version "0.10.33"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
+ dependencies:
+ ast-types "0.8.12"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
@@ -6732,7 +6741,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-request@2.79.0, request@^2.55.0, request@^2.74.0, request@^2.79.0:
+request@^2.55.0, request@^2.74.0, request@^2.79.0, request@2.79.0:
version "2.79.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
dependencies:
@@ -6757,6 +6766,13 @@ request@2.79.0, request@^2.55.0, request@^2.74.0, request@^2.79.0:
tunnel-agent "~0.4.1"
uuid "^3.0.0"
+require_optional@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf"
+ dependencies:
+ resolve-from "^2.0.0"
+ semver "^5.1.0"
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -6780,13 +6796,6 @@ require-uncached@^1.0.2:
caller-path "^0.1.0"
resolve-from "^1.0.0"
-require_optional@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf"
- dependencies:
- resolve-from "^2.0.0"
- semver "^5.1.0"
-
resolve-from@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
@@ -6823,7 +6832,7 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4:
+rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
@@ -6865,14 +6874,14 @@ safe-buffer@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
-sax@0.5.x:
- version "0.5.8"
- resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
-
sax@^1.1.4, sax@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
+sax@0.5.x:
+ version "0.5.8"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
+
selenium-standalone@^5.11.2:
version "5.11.2"
resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-5.11.2.tgz#724ccaa72fb26f3711e0e20989e478c4133df844"
@@ -6899,18 +6908,18 @@ semver-regex@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0:
+semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 || 5":
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-semver@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5"
-
semver@~5.0.1:
version "5.0.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+semver@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5"
+
send@0.14.2:
version "0.14.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef"
@@ -6960,10 +6969,6 @@ sha.js@^2.3.6:
dependencies:
inherits "^2.0.1"
-shelljs@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.0.tgz#ce1ed837b4b0e55b5ec3dab84251ab9dbdc0c7ec"
-
shelljs@^0.7.0, shelljs@^0.7.5:
version "0.7.6"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
@@ -6972,6 +6977,10 @@ shelljs@^0.7.0, shelljs@^0.7.5:
interpret "^1.0.0"
rechoir "^0.6.2"
+shelljs@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.0.tgz#ce1ed837b4b0e55b5ec3dab84251ab9dbdc0c7ec"
+
sigmund@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
@@ -7046,7 +7055,7 @@ socks-proxy-agent@2:
extend "3"
socks "~1.1.5"
-socks@1.1.9, socks@~1.1.5:
+socks@~1.1.5, socks@1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691"
dependencies:
@@ -7069,13 +7078,7 @@ source-map-support@^0.4.2:
dependencies:
source-map "^0.5.3"
-source-map@0.1.x:
- version "0.1.43"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@0.4.x, source-map@^0.4.4:
+source-map@^0.4.4, source-map@0.4.x:
version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
dependencies:
@@ -7091,6 +7094,12 @@ source-map@~0.2.0:
dependencies:
amdefine ">=0.0.4"
+source-map@0.1.x:
+ version "0.1.43"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+ dependencies:
+ amdefine ">=0.0.4"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -7191,6 +7200,10 @@ strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
string-hash@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.1.tgz#8e85bed291e0763b8f6809d9c3368fea048db3dc"
@@ -7216,10 +7229,6 @@ string-width@^2.0.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^3.0.0"
-string_decoder@^0.10.25, string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
stringmap@~0.2.2:
version "0.2.2"
resolved "http://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1"
@@ -7268,7 +7277,7 @@ style-loader@^0.13.1:
dependencies:
loader-utils "^0.2.7"
-stylus@0.54.5, stylus@~0.54.5:
+stylus@~0.54.5, stylus@0.54.5:
version "0.54.5"
resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79"
dependencies:
@@ -7307,16 +7316,6 @@ supertest@^2.0.1:
methods "1.x"
superagent "^2.0.0"
-supports-color@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
-
-supports-color@3.1.2, supports-color@^3.1.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
- dependencies:
- has-flag "^1.0.0"
-
supports-color@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
@@ -7325,12 +7324,22 @@ supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+supports-color@^3.1.0, supports-color@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
supports-color@^3.1.2, supports-color@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
dependencies:
has-flag "^1.0.0"
+supports-color@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
+
svgo@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
@@ -7418,7 +7427,7 @@ text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-through@2, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.8:
+through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.8, through@2:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@@ -7555,14 +7564,14 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
-type-detect@0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
-
type-detect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
+type-detect@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
+
type-is@~1.6.14:
version "1.6.14"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
@@ -7599,7 +7608,7 @@ uid-number@~0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-uid-safe@2.1.3, uid-safe@~2.1.3:
+uid-safe@~2.1.3, uid-safe@2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.3.tgz#077e264a00b3187936b270bb7376a26473631071"
dependencies:
@@ -7636,7 +7645,7 @@ uniqs@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-unpipe@1.0.0, unpipe@~1.0.0:
+unpipe@~1.0.0, unpipe@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -7673,7 +7682,7 @@ util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-util@0.10.3, util@^0.10.3:
+util@^0.10.3, util@0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
dependencies:
@@ -7793,7 +7802,7 @@ whatwg-encoding@^1.0.1:
dependencies:
iconv-lite "0.4.13"
-whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.0:
+whatwg-fetch@^2.0.0, whatwg-fetch@>=0.10.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e"
@@ -7818,28 +7827,24 @@ which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-which@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.1.1.tgz#9ce512459946166e12c083f08ec073380fc8cbbb"
- dependencies:
- is-absolute "^0.1.7"
-
which@^1.1.1:
version "1.2.12"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
dependencies:
isexe "^1.1.1"
+which@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.1.1.tgz#9ce512459946166e12c083f08ec073380fc8cbbb"
+ dependencies:
+ is-absolute "^0.1.7"
+
wide-align@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
dependencies:
string-width "^1.0.1"
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
window-size@^0.1.2:
version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
@@ -7848,6 +7853,10 @@ window-size@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075"
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
with@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"
@@ -7855,14 +7864,10 @@ with@^5.0.0:
acorn "^3.1.0"
acorn-globals "^3.0.0"
-word-wrap@1.1.0, word-wrap@^1.0.3:
+word-wrap@^1.0.3, word-wrap@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.1.0.tgz#356153d61d10610d600785c5d701288e0ae764a6"
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
wordwrap@^1.0.0, wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
@@ -7871,6 +7876,10 @@ wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -8028,3 +8037,4 @@ yauzl@^2.5.0:
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.0.1"
+