Adding role, instead of roles. And disable banning and suspending for the user thats logged in

This commit is contained in:
okbel
2017-12-20 18:10:13 -03:00
parent 570c0edfb3
commit f67f1e3b52
6 changed files with 129 additions and 162 deletions
@@ -104,6 +104,7 @@ class UserDetail extends React.Component {
data,
root,
root: {
me,
user,
totalComments,
rejectedComments,
@@ -130,7 +131,7 @@ class UserDetail extends React.Component {
const banned = isBanned(user);
const suspended = isSuspended(user);
return (
<ClickOutside onClickOutside={hideUserDetail}>
<Drawer className="talk-admin-user-detail-drawer" onClose={hideUserDetail}>
@@ -152,6 +153,7 @@ class UserDetail extends React.Component {
onClick={() => unSuspendUser({id: user.id})}>
Remove Suspension
</ActionsMenuItem> : <ActionsMenuItem
disabled={me.id === user.id}
onClick={this.showSuspenUserDialog}>
Suspend User
</ActionsMenuItem>}
@@ -160,6 +162,7 @@ class UserDetail extends React.Component {
onClick={() => unBanUser({id: user.id})}>
Remove Ban
</ActionsMenuItem> : <ActionsMenuItem
disabled={me.id === user.id}
onClick={this.showBanUserDialog}>
Ban User
</ActionsMenuItem>}
@@ -199,6 +199,9 @@ export const withUserDetailQuery = withQuery(gql`
}
${getSlotFragmentSpreads(slots, 'user')}
}
me {
id
}
totalComments: commentCount(query: {author_id: $author_id, statuses: []})
rejectedComments: commentCount(query: {author_id: $author_id, statuses: [REJECTED]})
comments: comments(query: {
+34 -22
View File
@@ -1,7 +1,10 @@
import {gql} from 'react-apollo';
import update from 'immutability-helper';
import uuid from 'uuid/v4';
import {insertCommentIntoEmbedQuery, removeCommentFromEmbedQuery} from './utils';
import {
insertCommentIntoEmbedQuery,
removeCommentFromEmbedQuery,
} from './utils';
import {mapLeaves} from 'coral-framework/utils';
export default {
@@ -45,7 +48,7 @@ export default {
}
}
`,
CreateDontAgreeResponse : gql`
CreateDontAgreeResponse: gql`
fragment CoralEmbedStream_CreateDontAgreeResponse on CreateDontAgreeResponse {
dontagree {
id
@@ -143,13 +146,13 @@ export default {
tag: {
name: tag,
created_at: new Date().toISOString(),
__typename: 'Tag'
__typename: 'Tag',
},
assigned_by: {
id: auth.user.id,
__typename: 'User'
__typename: 'User',
},
__typename: 'TagLink'
__typename: 'TagLink',
})),
},
created_at: new Date().toISOString(),
@@ -159,9 +162,9 @@ export default {
tag: {
name: tag,
created_at: new Date().toISOString(),
__typename: 'Tag'
__typename: 'Tag',
},
__typename: 'TagLink'
__typename: 'TagLink',
})),
status: 'NONE',
replyCount: 0,
@@ -171,9 +174,7 @@ export default {
title: '',
url: '',
},
parent: parent_id
? {__typename: 'Comment', id: parent_id}
: null,
parent: parent_id ? {__typename: 'Comment', id: parent_id} : null,
replies: {
__typename: 'CommentConnection',
nodes: [],
@@ -188,13 +189,17 @@ export default {
},
status_history: [],
id: `pending-${uuid()}`,
}
}
},
},
},
updateQueries: {
CoralEmbedStream_Embed: (prev, {mutationResult: {data: {createComment: {comment}}}}) => {
CoralEmbedStream_Embed: (
prev,
{mutationResult: {data: {createComment: {comment}}}}
) => {
if (
prev.me.roles.indexOf('ADMIN') === -1 && prev.asset.settings.moderation === 'PRE' ||
(prev.me.role !== 'ADMIN' &&
prev.asset.settings.moderation === 'PRE') ||
comment.status === 'PREMOD' ||
comment.status === 'REJECTED' ||
comment.status === 'SYSTEM_WITHHELD'
@@ -203,7 +208,10 @@ export default {
}
return insertCommentIntoEmbedQuery(prev, comment);
},
CoralEmbedStream_Profile: (prev, {mutationResult: {data: {createComment: {comment}}}}) => {
CoralEmbedStream_Profile: (
prev,
{mutationResult: {data: {createComment: {comment}}}}
) => {
return update(prev, {
me: {
comments: {
@@ -212,19 +220,24 @@ export default {
},
});
},
}
},
}),
EditComment: () => ({
updateQueries: {
CoralEmbedStream_Embed: (prev, {mutationResult: {data: {editComment: {comment}}}}) => {
if (!['PREMOD', 'REJECTED', 'SYSTEM_WITHHELD'].includes(comment.status)) {
CoralEmbedStream_Embed: (
prev,
{mutationResult: {data: {editComment: {comment}}}}
) => {
if (
!['PREMOD', 'REJECTED', 'SYSTEM_WITHHELD'].includes(comment.status)
) {
return null;
}
return removeCommentFromEmbedQuery(prev, comment.id);
},
},
}),
UpdateAssetSettings: ({variables: {input}}) => ({
UpdateAssetSettings: ({variables: {input}}) => ({
updateQueries: {
CoralEmbedStream_Embed: (prev) => {
const updated = update(prev, {
@@ -233,9 +246,8 @@ export default {
},
});
return updated;
}
}
},
},
}),
},
};
@@ -2,15 +2,25 @@ import React from 'react';
import {gql, compose} from 'react-apollo';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {ADDTL_COMMENTS_ON_LOAD_MORE, THREADING_LEVEL} from '../../../constants/stream';
import {
withPostComment, withPostFlag, withPostDontAgree,
withDeleteAction, withEditComment
ADDTL_COMMENTS_ON_LOAD_MORE,
THREADING_LEVEL,
} from '../../../constants/stream';
import {
withPostComment,
withPostFlag,
withPostDontAgree,
withDeleteAction,
withEditComment,
} from 'coral-framework/graphql/mutations';
import * as authActions from 'coral-embed-stream/src/actions/auth';
import * as notificationActions from 'coral-framework/actions/notification';
import {setActiveReplyBox, setActiveTab, viewAllComments} from '../../../actions/stream';
import {
setActiveReplyBox,
setActiveTab,
viewAllComments,
} from '../../../actions/stream';
import Stream from '../components/Stream';
import Comment from './Comment';
import {withFragments, withEmit} from 'coral-framework/hocs';
@@ -40,10 +50,12 @@ class StreamContainer extends React.Component {
assetId: this.props.asset.id,
},
updateQuery: (prev, {subscriptionData: {data: {commentEdited}}}) => {
// Ignore mutations from me.
// TODO: need way to detect mutations created by this client, and allow mutations from other clients.
if (this.props.auth.user && commentEdited.user.id === this.props.auth.user.id) {
if (
this.props.auth.user &&
commentEdited.user.id === this.props.auth.user.id
) {
return prev;
}
@@ -52,7 +64,11 @@ class StreamContainer extends React.Component {
return prev;
}
if (['PREMOD', 'REJECTED', 'SYSTEM_WITHHELD'].includes(commentEdited.status)) {
if (
['PREMOD', 'REJECTED', 'SYSTEM_WITHHELD'].includes(
commentEdited.status
)
) {
return removeCommentFromEmbedQuery(prev, commentEdited.id);
}
},
@@ -66,17 +82,22 @@ class StreamContainer extends React.Component {
assetId: this.props.asset.id,
},
updateQuery: (prev, {subscriptionData: {data: {commentAdded}}}) => {
// Ignore mutations from me.
// TODO: need way to detect mutations created by this client, and allow mutations from other clients.
if (this.props.auth.user && commentAdded.user.id === this.props.auth.user.id) {
if (
this.props.auth.user &&
commentAdded.user.id === this.props.auth.user.id
) {
return prev;
}
// Exit if author is ignored.
if (
this.props.root.me &&
this.props.root.me.ignoredUsers.some(({id}) => id === commentAdded.user.id)) {
this.props.root.me.ignoredUsers.some(
({id}) => id === commentAdded.user.id
)
) {
return prev;
}
@@ -121,11 +142,11 @@ class StreamContainer extends React.Component {
sortOrder: 'ASC',
excludeIgnored: this.props.data.variables.excludeIgnored,
},
updateQuery: (prev, {fetchMoreResult:{comments}}) => {
updateQuery: (prev, {fetchMoreResult: {comments}}) => {
return insertFetchedCommentsIntoEmbedQuery(prev, comments, parent_id);
},
});
}
};
loadMoreComments = () => {
return this.props.data.fetchMore({
@@ -139,7 +160,7 @@ class StreamContainer extends React.Component {
sortBy: this.props.data.variables.sortBy,
excludeIgnored: this.props.data.variables.excludeIgnored,
},
updateQuery: (prev, {fetchMoreResult:{comments}}) => {
updateQuery: (prev, {fetchMoreResult: {comments}}) => {
return insertFetchedCommentsIntoEmbedQuery(prev, comments);
},
});
@@ -168,7 +189,10 @@ class StreamContainer extends React.Component {
}
componentWillReceiveProps(nextProps) {
if (this.props.sortOrder !== nextProps.sortOrder || this.props.sortBy !== nextProps.sortBy) {
if (
this.props.sortOrder !== nextProps.sortOrder ||
this.props.sortBy !== nextProps.sortBy
) {
nextProps.data.refetch();
}
}
@@ -178,23 +202,25 @@ class StreamContainer extends React.Component {
}
render() {
if (!this.props.asset
|| this.props.asset.comment === undefined
&& !this.props.asset.comments
if (
!this.props.asset ||
(this.props.asset.comment === undefined && !this.props.asset.comments)
) {
return <Spinner />;
}
const streamLoading = this.props.refetching || this.props.data.loading;
return <Stream
{...this.props}
loadMore={this.loadMore}
loadMoreComments={this.loadMoreComments}
loadNewReplies={this.loadNewReplies}
userIsDegraged={this.userIsDegraged()}
loading={streamLoading}
/>;
return (
<Stream
{...this.props}
loadMore={this.loadMore}
loadMoreComments={this.loadMoreComments}
loadNewReplies={this.loadNewReplies}
userIsDegraged={this.userIsDegraged()}
loading={streamLoading}
/>
);
}
}
@@ -211,8 +237,8 @@ const commentFragment = gql`
`;
const COMMENTS_ADDED_SUBSCRIPTION = gql`
subscription CommentAdded($assetId: ID!, $excludeIgnored: Boolean){
commentAdded(asset_id: $assetId){
subscription CommentAdded($assetId: ID!, $excludeIgnored: Boolean) {
commentAdded(asset_id: $assetId) {
parent {
id
}
@@ -223,8 +249,8 @@ const COMMENTS_ADDED_SUBSCRIPTION = gql`
`;
const COMMENTS_EDITED_SUBSCRIPTION = gql`
subscription CommentEdited($assetId: ID!){
commentEdited(asset_id: $assetId){
subscription CommentEdited($assetId: ID!) {
commentEdited(asset_id: $assetId) {
id
body
status
@@ -297,7 +323,7 @@ const fragments = {
ignoredUsers {
id
}
roles
role
}
settings {
organizationName
@@ -311,12 +337,15 @@ const fragments = {
fragment CoralEmbedStream_Stream_asset on Asset {
comment(id: $commentId) @include(if: $hasComment) {
...CoralEmbedStream_Stream_comment
${nest(`
${nest(
`
parent {
...CoralEmbedStream_Stream_comment
...nest
}
`, THREADING_LEVEL)}
`,
THREADING_LEVEL
)}
}
id
title
@@ -372,14 +401,17 @@ const mapStateToProps = (state) => ({
});
const mapDispatchToProps = (dispatch) =>
bindActionCreators({
showSignInDialog,
notify,
setActiveReplyBox,
editName,
viewAllComments,
setActiveStreamTab: setActiveTab,
}, dispatch);
bindActionCreators(
{
showSignInDialog,
notify,
setActiveReplyBox,
editName,
viewAllComments,
setActiveStreamTab: setActiveTab,
},
dispatch
);
export default compose(
withFragments(fragments),
@@ -389,5 +421,5 @@ export default compose(
withPostFlag,
withPostDontAgree,
withDeleteAction,
withEditComment,
withEditComment
)(StreamContainer);
+6 -8
View File
@@ -5,17 +5,17 @@ import get from 'lodash/get';
// =========================================================================
const basicPerms = {
'INTERACT_WITH_COMMUNITY': (user) => {
INTERACT_WITH_COMMUNITY: (user) => {
const banned = get(user, 'status.banned.status');
const suspensionUntil = get(user, 'status.suspension.until');
const suspended = suspensionUntil && new Date(suspensionUntil) > new Date();
return !banned && !suspended;
},
'EDIT_NAME': (user) => {
EDIT_NAME: (user) => {
const usernameStatus = user.status.username.status;
return usernameStatus === 'UNSET' || usernameStatus === 'REJECTED';
}
},
};
// =========================================================================
@@ -23,30 +23,28 @@ const basicPerms = {
// =========================================================================
const basicRoles = {
HAS_STAFF_TAG: ['ADMIN', 'MODERATOR', 'STAFF']
HAS_STAFF_TAG: ['ADMIN', 'MODERATOR', 'STAFF'],
};
const queryRoles = {
UPDATE_CONFIG: ['ADMIN'],
ACCESS_ADMIN: ['ADMIN', 'MODERATOR'],
VIEW_USER_EMAILS: ['ADMIN']
VIEW_USER_EMAILS: ['ADMIN'],
};
const mutationRoles = {
CHANGE_ROLES: ['ADMIN'],
MODERATE_COMMENTS: ['ADMIN', 'MODERATOR']
MODERATE_COMMENTS: ['ADMIN', 'MODERATOR'],
};
const roles = {...basicRoles, ...queryRoles, ...mutationRoles};
export const can = (user, ...perms) => {
if (!user) {
return false;
}
return perms.every((perm) => {
// Basic Permissions
const permAction = basicPerms[perm];
if (typeof permAction !== 'undefined') {
+9 -90
View File
@@ -24,28 +24,12 @@
git-url-parse "^6.0.2"
shelljs "^0.7.0"
<<<<<<< HEAD
=======
"@remy/pstree@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@remy/pstree/-/pstree-1.1.0.tgz#414045d4fec60946604f3718023052aaf49bd8d3"
dependencies:
ps-tree "^1.1.0"
"@types/express-serve-static-core@*":
version "4.0.53"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.53.tgz#1723a35d1447f2c55e13c8721eab3448e42f4d82"
dependencies:
"@types/node" "*"
"@types/express@^4.0.35":
version "4.0.37"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.0.37.tgz#625ac3765169676e01897ca47011c26375784971"
dependencies:
"@types/express-serve-static-core" "*"
"@types/serve-static" "*"
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
"@types/graphql@0.10.2":
version "0.10.2"
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.10.2.tgz#d7c79acbaa17453b6681c80c34b38fcb10c4c08c"
@@ -77,16 +61,9 @@ abab@^1.0.0, abab@^1.0.3:
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
abbrev@1:
<<<<<<< HEAD
=======
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
abbrev@1.0.x:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
accepts@^1.3.4, accepts@~1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
@@ -485,25 +462,17 @@ async@2.1.4:
dependencies:
lodash "^4.14.0"
<<<<<<< HEAD
async@2.4.1:
=======
async@2.4.1, async@^2.1.2:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "2.4.1"
resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
dependencies:
lodash "^4.14.0"
<<<<<<< HEAD
async@^1.4.0, async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@^2.1.2, async@^2.1.4, async@~2.6.0:
=======
async@^2.1.4:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
async@^2.1.4, async@~2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
dependencies:
@@ -1584,11 +1553,7 @@ chain-function@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
<<<<<<< HEAD
chalk@2.3.0, chalk@^2.0.1:
=======
chalk@2.3.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "2.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
dependencies:
@@ -1606,17 +1571,6 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
<<<<<<< HEAD
chalk@^2.0.0, chalk@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.0.tgz#477b3bf2f9b8fd5ca9e429747e37f724ee7af240"
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
=======
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
change-emitter@^0.1.2:
version "0.1.6"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
@@ -2496,15 +2450,13 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
<<<<<<< HEAD
detect-libc@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-0.2.0.tgz#47fdf567348a17ec25fcbf0b9e446348a76f9fb5"
=======
detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
dialog-polyfill@^0.4.9:
version "0.4.9"
@@ -2747,12 +2699,9 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
<<<<<<< HEAD
es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0:
=======
es-abstract@^1.6.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
es-abstract@^1.4.3, es-abstract@^1.7.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
@@ -2760,10 +2709,9 @@ es-abstract@^1.6.1:
is-callable "^1.1.3"
is-regex "^1.0.4"
es-abstract@^1.7.0:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "1.9.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
es-abstract@^1.6.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
@@ -5264,15 +5212,6 @@ libqp@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8"
<<<<<<< HEAD
=======
license-webpack-plugin@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.1.1.tgz#76b2cedccc78f139fd7877e576f756cfc141b8c2"
dependencies:
ejs "^2.5.7"
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
linkify-it@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f"
@@ -5855,15 +5794,11 @@ minimist@^1.1.1, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
<<<<<<< HEAD
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:
=======
minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
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:
@@ -5925,11 +5860,7 @@ moment@2.18.1:
version "2.18.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
<<<<<<< HEAD
moment@2.19.1, moment@2.x.x, "moment@>= 2.9.0", moment@^2.10.3, moment@^2.18.1:
=======
moment@2.19.1, moment@^2.10.3:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "2.19.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167"
@@ -6033,11 +5964,7 @@ mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
<<<<<<< HEAD
nan@^2.3.0, nan@^2.6.2:
=======
nan@^2.3.0:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "2.8.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
@@ -7241,11 +7168,7 @@ postcss@^6.0.1:
source-map "^0.6.1"
supports-color "^4.4.0"
<<<<<<< HEAD
pre-git@^3.16.0:
=======
pre-git@^3.15.3:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "3.16.0"
resolved "https://registry.yarnpkg.com/pre-git/-/pre-git-3.16.0.tgz#a7656bc5f277185fd213c78f39f24f2cb603eb61"
dependencies:
@@ -7826,7 +7749,6 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
path-type "^2.0.0"
<<<<<<< HEAD
read-pkg@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
@@ -7835,10 +7757,7 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
readable-stream@1.1, readable-stream@1.1.x:
=======
readable-stream@1.1:
>>>>>>> b2cc4bdb12f26c733306ba1789404ba040977387
version "1.1.13"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
dependencies: