MM-37298 fix missing current user in system join / leave messages (#5561)

* MM-37298 Fix missing current user in system message when more than 1 user joins a team/channel

* Add missing participants translation
This commit is contained in:
Elias Nahum 2021-07-21 17:48:30 -04:00 committed by GitHub
parent 74d3bad792
commit b607d44e59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 94 deletions

View file

@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react';
import React, {useEffect} from 'react';
import {injectIntl, intlShape} from 'react-intl';
import {Keyboard, StyleProp, View, ViewStyle} from 'react-native';
@ -25,6 +25,8 @@ type Props = {
canDelete: boolean;
currentUserId?: string;
currentUsername?: string;
getMissingProfilesByIds: (ids: string[]) => void;
getMissingProfilesByUsernames: (usernames: string[]) => void;
intl: typeof intlShape;
post: Post;
showJoinLeave: boolean;
@ -87,18 +89,29 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
});
const CombinedUserActivity = ({
canDelete, currentUserId, currentUsername, intl, post,
showJoinLeave, testID, theme, usernamesById, style,
canDelete, currentUserId, currentUsername, getMissingProfilesByIds, getMissingProfilesByUsernames,
intl, post, showJoinLeave, testID, theme, usernamesById, style,
}: Props) => {
const itemTestID = `${testID}.${post.id}`;
const textStyles = getMarkdownTextStyles(theme);
const {allUsernames, messageData} = post.props.user_activity;
const {allUserIds, allUsernames, messageData} = post.props.user_activity;
const styles = getStyleSheet(theme);
const content = [];
const removedUserIds: string[] = [];
const loadUserProfiles = () => {
if (allUserIds.length) {
getMissingProfilesByIds(allUserIds);
}
if (allUsernames.length) {
getMissingProfilesByUsernames(allUsernames);
}
};
const getUsernames = (userIds: string[]) => {
const someone = intl.formatMessage({id: 'channel_loader.someone', defaultMessage: 'Someone'});
const you = intl.formatMessage({id: 'combined_system_message.you', defaultMessage: 'You'});
const usernames = userIds.reduce((acc: string[], id: string) => {
if (id !== currentUserId && id !== currentUsername) {
const name = usernamesById[id];
@ -108,9 +121,9 @@ const CombinedUserActivity = ({
}, []);
if (currentUserId && userIds.includes(currentUserId)) {
usernames.unshift(allUsernames[currentUserId]);
usernames.unshift(you);
} else if (currentUsername && userIds.includes(currentUsername)) {
usernames.unshift(allUsernames[currentUsername]);
usernames.unshift(you);
}
return usernames;
@ -185,6 +198,10 @@ const CombinedUserActivity = ({
);
};
useEffect(() => {
loadUserProfiles();
}, [allUserIds, allUsernames]);
for (const message of messageData) {
const {postType, actorId} = message;
let userIds = message.userIds;

View file

@ -3,6 +3,7 @@
import {connect} from 'react-redux';
import {getMissingProfilesByIds, getMissingProfilesByUsernames} from '@mm-redux/actions/users';
import {Preferences} from '@mm-redux/constants';
import {getChannel} from '@mm-redux/selectors/entities/channels';
import {getCurrentUser, getUsernamesByUserId} from '@mm-redux/selectors/entities/users';
@ -45,4 +46,9 @@ export function mapStateToProps() {
};
}
export default connect(mapStateToProps)(CombinedUserActivity);
const mapDispatchToProps = {
getMissingProfilesByIds,
getMissingProfilesByUsernames,
};
export default connect(mapStateToProps, mapDispatchToProps)(CombinedUserActivity);

View file

@ -442,6 +442,7 @@
"mobile.open_gm.error": "We couldn't open a group message with those users. Please check your connection and try again.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.participants.header": "THREAD PARTICIPANTS",
"mobile.participants.you": "(you)",
"mobile.permission_denied_dismiss": "Don't Allow",
"mobile.permission_denied_retry": "Settings",
"mobile.pinned_posts.empty_description": "Pin important messages which are visible to the whole channel. Long press on a message and choose Pin to Channel to save it here.",

131
package-lock.json generated
View file

@ -5,7 +5,7 @@
"requires": true,
"packages": {
"": {
"version": "1.45.0",
"version": "1.45.1",
"hasInstallScript": true,
"license": "Apache 2.0",
"dependencies": {
@ -41640,8 +41640,7 @@
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@react-native-community/cameraroll/-/cameraroll-4.0.4.tgz",
"integrity": "sha512-3SY96Xh1yQjV5M7dFisl5kQmrO/K09URarZwmTN801KEalOoo/opsd/e8Vu1dwSKe0NGCK7A2u0oJQpeNbWbnA==",
"requires": {
}
"requires": {}
},
"@react-native-community/cli": {
"version": "5.0.1",
@ -42171,8 +42170,7 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
"integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
"requires": {
}
"requires": {}
},
"@react-native-community/eslint-config": {
"version": "3.0.0",
@ -42200,8 +42198,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz",
"integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==",
"dev": true,
"requires": {
}
"requires": {}
}
}
},
@ -42215,15 +42212,13 @@
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
"integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
"requires": {
}
"requires": {}
},
"@react-native-community/netinfo": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-6.0.0.tgz",
"integrity": "sha512-Z9M8VGcF2IZVOo2x+oUStvpCW/8HjIRi4+iQCu5n+PhC7OqCQX58KYAzdBr///alIfRXiu6oMb+lK+rXQH1FvQ==",
"requires": {
}
"requires": {}
},
"@react-native-cookies/cookies": {
"version": "6.0.8",
@ -46465,8 +46460,7 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
"dev": true,
"requires": {
}
"requires": {}
},
"acorn-walk": {
"version": "7.2.0",
@ -46539,16 +46533,14 @@
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"dev": true,
"requires": {
}
"requires": {}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"requires": {
}
"requires": {}
},
"analytics-react-native": {
"version": "1.2.0",
@ -47248,8 +47240,7 @@
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
"requires": {
}
"requires": {}
},
"babel-eslint": {
"version": "10.1.0",
@ -49992,8 +49983,7 @@
"resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz",
"integrity": "sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ==",
"peer": true,
"requires": {
}
"requires": {}
},
"diff": {
"version": "5.0.0",
@ -50999,8 +50989,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz",
"integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==",
"dev": true,
"requires": {
}
"requires": {}
},
"eslint-plugin-jest": {
"version": "24.3.6",
@ -51072,8 +51061,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz",
"integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==",
"dev": true,
"requires": {
}
"requires": {}
},
"eslint-plugin-react-native": {
"version": "3.11.0",
@ -56499,8 +56487,7 @@
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
"dev": true,
"requires": {
}
"requires": {}
},
"jest-regex-util": {
"version": "27.0.6",
@ -57890,8 +57877,7 @@
"resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
"integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
"dev": true,
"requires": {
}
"requires": {}
},
"jsesc": {
"version": "2.5.2",
@ -58799,8 +58785,7 @@
"resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz",
"integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==",
"dev": true,
"requires": {
}
"requires": {}
},
"matcher": {
"version": "3.0.0",
@ -62829,8 +62814,7 @@
"resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.2.2.tgz",
"integrity": "sha512-Xdb1Rl6lZ5SMdNBH59eE0lGqR1g2LVD8IgPlw0WeMDrOC65lYI8fgMEwj/0dDpVRVMh5qp73ciISDst/t2O2iQ==",
"dev": true,
"requires": {
}
"requires": {}
},
"react-dev-utils": {
"version": "9.1.0",
@ -63508,22 +63492,19 @@
"resolved": "https://registry.npmjs.org/react-native-dev-menu/-/react-native-dev-menu-4.0.2.tgz",
"integrity": "sha512-tjWAULoJgOr/WjcfhFsCYaZGtQNmApm7gD5d7G/kSAWVBdEbFFuN2MIq+CxAxBsjHSwscysD1C55TCcmXP/82w==",
"dev": true,
"requires": {
}
"requires": {}
},
"react-native-device-info": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.1.3.tgz",
"integrity": "sha512-73e3wiGFL8DvIXEd8x4Aq+mO8mZvHARwfYorIEu+X0trLHY92bP5Ict8DJHDjCQ0+HtAvpA4Wda2VoUVN1zh6Q==",
"requires": {
}
"requires": {}
},
"react-native-document-picker": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-5.2.0.tgz",
"integrity": "sha512-zXK34hW6fM0gXoo6v7edZZxKvLT7DyjOdBXi7WrxbKqZchDokTEQ/tNTeZxky+7oI8sVz8T3uXBBEW0sp+VfXQ==",
"requires": {
}
"requires": {}
},
"react-native-dotenv": {
"version": "3.0.0",
@ -63561,22 +63542,19 @@
"version": "2.10.10",
"resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.10.tgz",
"integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==",
"requires": {
}
"requires": {}
},
"react-native-fast-image": {
"version": "8.3.5",
"resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.3.5.tgz",
"integrity": "sha512-ouYTbLGk6IfzIUy8wr+CgWnFWJJaE1hEPMZ0jyv39hwfH/U0GeLLMEi5/BTD7LYKxDIRECli5lljONdKglmzWg==",
"requires": {
}
"requires": {}
},
"react-native-file-viewer": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/react-native-file-viewer/-/react-native-file-viewer-2.1.4.tgz",
"integrity": "sha512-G3ko9lmqxT+lWhsDNy2K3Jes6xSMsUvlYwuwnRCNk2wC6hgYMeoeaiwDt8R3CdON781hB6Ej1eu3ir1QATtHXg==",
"requires": {
}
"requires": {}
},
"react-native-gesture-handler": {
"version": "1.10.3",
@ -63594,43 +63572,37 @@
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-1.11.0.tgz",
"integrity": "sha512-KTIy7lExwMtB6pOpCARyUzFj5EzYTh+A1GN/FB5Eb0LrW5C6hbb1kdj9K2/RHyZC+wyAJD1M823ZaDCU6n6cLA==",
"requires": {
}
"requires": {}
},
"react-native-hw-keyboard-event": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/react-native-hw-keyboard-event/-/react-native-hw-keyboard-event-0.0.4.tgz",
"integrity": "sha512-G8qp0nm17PHigLb/axgdF9xg51BKCG2p1AGeq//J/luLp5zNczIcQJh+nm02R1MeEUE3e53wqO4LMe0MV3raZg==",
"requires": {
}
"requires": {}
},
"react-native-image-picker": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-4.0.4.tgz",
"integrity": "sha512-MR1okWbIQg38ZtD9QT2kCu6kZez9h92JKhGi0VLT/f5fXhwk+piBKxVbLhKdFx6+ofS0d4+gT4GaYauHSkG4Lw==",
"requires": {
}
"requires": {}
},
"react-native-iphone-x-helper": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
"integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
"requires": {
}
"requires": {}
},
"react-native-keyboard-aware-scrollview": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scrollview/-/react-native-keyboard-aware-scrollview-2.1.0.tgz",
"integrity": "sha512-XfWozWFPhdecfxN+wuqERX3mCGDrAim5siC6TWg3Qw7wK/zlwIwe1UIsHDNOQCzf9oIh0SkZXvoOFsMrnyIVmQ==",
"requires": {
}
"requires": {}
},
"react-native-keyboard-tracking-view": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/react-native-keyboard-tracking-view/-/react-native-keyboard-tracking-view-5.7.0.tgz",
"integrity": "sha512-MDeEwAbn9LJDOfHq0QLCGaZirVLk2X/tHqkAqz3y6uxryTRdSl9PwleOVar5Jx2oAPEg4J9BXbUD1wwOOi+5Kg==",
"requires": {
}
"requires": {}
},
"react-native-keychain": {
"version": "7.0.0",
@ -63641,29 +63613,25 @@
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.5.6.tgz",
"integrity": "sha512-HDwEaXcQIuXXCV70O+bK1rizFong3wj+5Q/jSyifKFLg0VWF95xh8XQgfzXwtq0NggL9vNjPKXa016KuFu+VFg==",
"requires": {
}
"requires": {}
},
"react-native-local-auth": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/react-native-local-auth/-/react-native-local-auth-1.6.0.tgz",
"integrity": "sha512-36cYGZGCG82pMiVJbQa5WMA93khP4v5JqLutFkMyB/eRpCULHmojNIBlbUPIY9SCeN4sg5VBRFTVGCtTg2r2kA==",
"requires": {
}
"requires": {}
},
"react-native-localize": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.1.1.tgz",
"integrity": "sha512-+uyz2/b0vyLq19fcb7r1qU1gqmzbp3aC6EMTvOVXwfBuiN+aJXR/fDdFOJJ8D7+bLccKeuS2zBDrazh+ZayX/g==",
"requires": {
}
"requires": {}
},
"react-native-mmkv-storage": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.6.0.tgz",
"integrity": "sha512-FqmxwOMiL7AnjCBOEa/IABLWcHLcHXAjA52lKjD8Ajj2gPtY7zT+lSoppv8oN1pKfrAviwljrbtLylFXImu1fw==",
"requires": {
}
"requires": {}
},
"react-native-modal": {
"version": "11.10.0",
@ -63723,8 +63691,7 @@
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-3.5.0.tgz",
"integrity": "sha512-uoFvV0jhn+5TcFlGUYEk/nBNyy9I6lWbmjNYvUYrShWyxHl3peeULxuu/A1z2hwhAV9JtJEqEZQrahoX1aT+2g==",
"requires": {
}
"requires": {}
},
"react-native-passcode-status": {
"version": "1.1.2",
@ -63735,8 +63702,7 @@
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.0.5.tgz",
"integrity": "sha512-hcvLtHhTyOTXC+CCv79d4Qtdnj6PGuY5Ms0fhW8V6Et1T/mPvzO6++Du4jwEv/oHZ62qMWKUDq0/Tsh63QHuyQ==",
"requires": {
}
"requires": {}
},
"react-native-ratings": {
"version": "8.0.4",
@ -63796,8 +63762,7 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz",
"integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==",
"requires": {
}
"requires": {}
},
"react-native-screens": {
"version": "3.4.0",
@ -63821,8 +63786,7 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz",
"integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==",
"requires": {
}
"requires": {}
},
"react-native-slider": {
"version": "0.11.0",
@ -63836,8 +63800,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/react-native-startup-time/-/react-native-startup-time-2.0.0.tgz",
"integrity": "sha512-tYruEDvwoVEOf+FMTTqp3aHNfA5ARWXXV+ar4wJBIQBdIlPEYDQWaYljOAV2dITuTsKAyPY2Q/N58gkKvGWIrA==",
"requires": {
}
"requires": {}
},
"react-native-storybook-loader": {
"version": "2.0.4",
@ -64422,8 +64385,7 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/redux-batched-actions/-/redux-batched-actions-0.5.0.tgz",
"integrity": "sha512-6orZWyCnIQXMGY4DUGM0oj0L7oYnwTACsfsru/J7r94RM3P9eS7SORGpr3LCeRCMoIMQcpfKZ7X4NdyFHBS8Eg==",
"requires": {
}
"requires": {}
},
"redux-mock-store": {
"version": "1.5.4",
@ -64438,8 +64400,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
"integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==",
"requires": {
}
"requires": {}
},
"redux-persist-node-storage": {
"version": "2.0.0",
@ -65004,8 +64965,7 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/rn-placeholder/-/rn-placeholder-3.0.3.tgz",
"integrity": "sha512-EmVeLT8zDcTPilQZ2OHO/IiYUy2gApKGgbshDZBX0C4qxsn0cFATwgwOwyz8O7Vwg1Hul97Ci95hu7d6Js6XMQ==",
"requires": {
}
"requires": {}
},
"roarr": {
"version": "2.15.4",
@ -68455,8 +68415,7 @@
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.2.5.tgz",
"integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==",
"dev": true,
"requires": {
}
"requires": {}
},
"use-composed-ref": {
"version": "1.1.0",
@ -68472,8 +68431,7 @@
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz",
"integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==",
"dev": true,
"requires": {
}
"requires": {}
},
"use-latest": {
"version": "1.2.0",
@ -69649,8 +69607,7 @@
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz",
"integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==",
"requires": {
}
"requires": {}
},
"xcode": {
"version": "3.0.1",