diff --git a/.eslintrc.json b/.eslintrc.json
index a5df0769b..0ab12801f 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -59,7 +59,7 @@
"func-names": 2,
"func-style": [2, "declaration", { "allowArrowFunctions": true }],
"generator-star-spacing": [0, {"before": false, "after": true}],
- "global-require": 2,
+ "global-require": 0,
"guard-for-in": 2,
"id-blacklist": 0,
"indent": [2, 4, {"SwitchCase": 0}],
@@ -261,4 +261,4 @@
"wrap-regex": 2,
"yoda": [2, "never", {"exceptRange": false, "onlyEquality": false}]
}
-}
\ No newline at end of file
+}
diff --git a/Makefile b/Makefile
index 926b5e779..2f558e789 100644
--- a/Makefile
+++ b/Makefile
@@ -89,7 +89,7 @@ post-install:
start: | pre-run ## Starts the React Native packager server
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start; \
+ npm start; \
else \
echo React Native packager server already running; \
fi
@@ -141,7 +141,7 @@ run: run-ios ## alias for run-ios
run-ios: | check-device-ios pre-run ## Runs the app on an iOS simulator
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo Running iOS app in development; \
+ npm start & echo Running iOS app in development; \
if [ ! -z "${SIMULATOR}" ]; then \
react-native run-ios --simulator="${SIMULATOR}"; \
else \
@@ -160,7 +160,7 @@ run-ios: | check-device-ios pre-run ## Runs the app on an iOS simulator
run-android: | check-device-android pre-run prepare-android-build ## Runs the app on an Android emulator or dev device
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo Running Android app in development; \
+ npm start & echo Running Android app in development; \
if [ ! -z ${VARIANT} ]; then \
react-native run-android --no-packager --variant=${VARIANT}; \
else \
@@ -183,7 +183,7 @@ ifneq ($(IOS_APP_GROUP),)
endif
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo; \
+ npm start & echo; \
fi
@echo "Building iOS app"
@cd fastlane && BABEL_ENV=production NODE_ENV=production bundle exec fastlane ios build
@@ -193,7 +193,7 @@ endif
build-android: | pre-run check-style prepare-android-build ## Creates an Android build
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo; \
+ npm start & echo; \
fi
@echo "Building Android app"
@cd fastlane && BABEL_ENV=production NODE_ENV=production bundle exec fastlane android build
@@ -202,7 +202,7 @@ build-android: | pre-run check-style prepare-android-build ## Creates an Android
unsigned-ios: pre-run check-style
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo; \
+ npm start & echo; \
fi
@echo "Building unsigned iOS app"
ifneq ($(IOS_APP_GROUP),)
@@ -221,7 +221,7 @@ endif
unsigned-android: pre-run check-style prepare-android-build
@if [ $(shell ps -e | grep -i "cli.js start" | grep -civ grep) -eq 0 ]; then \
echo Starting React Native packager server; \
- node ./node_modules/react-native/local-cli/cli.js start & echo; \
+ npm start & echo; \
fi
@echo "Building unsigned Android app"
@cd fastlane && NODE_ENV=production bundle exec fastlane android unsigned
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 11ec7fc8e..c63e42052 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -73,7 +73,9 @@ import com.android.build.OutputFile
*/
project.ext.react = [
- entryFile: "index.js"
+ entryFile: "index.js",
+ bundleCommand: "unbundle",
+ bundleConfig: "packager/config.js"
]
apply from: "../../node_modules/react-native/react.gradle"
diff --git a/app/actions/views/login.test.js b/app/actions/views/login.test.js
index 4cc110305..f10138e82 100644
--- a/app/actions/views/login.test.js
+++ b/app/actions/views/login.test.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import configureStore from 'redux-mock-store';
@@ -11,9 +11,11 @@ import {
handlePasswordChanged,
} from 'app/actions/views/login';
-jest.mock('react-native-fetch-blob', () => ({
- DocumentDir: () => jest.fn(),
- fs: {dirs: {CacheDir: () => jest.fn()}},
+jest.mock('react-native-fetch-blob/fs', () => ({
+ dirs: {
+ DocumentDir: () => jest.fn(),
+ CacheDir: () => jest.fn(),
+ },
}));
const mockStore = configureStore([thunk]);
diff --git a/app/actions/views/select_server.test.js b/app/actions/views/select_server.test.js
index a9d8dcaff..7ab34186f 100644
--- a/app/actions/views/select_server.test.js
+++ b/app/actions/views/select_server.test.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {batchActions} from 'redux-batched-actions';
@@ -11,9 +11,11 @@ import {ViewTypes} from 'app/constants';
import {handleServerUrlChanged} from 'app/actions/views/select_server';
-jest.mock('react-native-fetch-blob', () => ({
- DocumentDir: () => jest.fn(),
- fs: {dirs: {CacheDir: () => jest.fn()}},
+jest.mock('react-native-fetch-blob/fs', () => ({
+ dirs: {
+ DocumentDir: () => jest.fn(),
+ CacheDir: () => jest.fn(),
+ },
}));
const mockStore = configureStore([thunk]);
diff --git a/app/actions/views/thread.test.js b/app/actions/views/thread.test.js
index 1c449ddfc..7efd33e0e 100644
--- a/app/actions/views/thread.test.js
+++ b/app/actions/views/thread.test.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import configureStore from 'redux-mock-store';
@@ -11,9 +11,11 @@ import {
handleCommentDraftSelectionChanged,
} from 'app/actions/views/thread';
-jest.mock('react-native-fetch-blob', () => ({
- DocumentDir: () => jest.fn(),
- fs: {dirs: {CacheDir: () => jest.fn()}},
+jest.mock('react-native-fetch-blob/fs', () => ({
+ dirs: {
+ DocumentDir: () => jest.fn(),
+ CacheDir: () => jest.fn(),
+ },
}));
const mockStore = configureStore([thunk]);
diff --git a/app/components/post_body/post_body.js b/app/components/post_body/post_body.js
index 18a755643..e60f51913 100644
--- a/app/components/post_body/post_body.js
+++ b/app/components/post_body/post_body.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
@@ -15,19 +15,19 @@ import {intlShape} from 'react-intl';
import Icon from 'react-native-vector-icons/Ionicons';
import LinearGradient from 'react-native-linear-gradient';
-import FileAttachmentList from 'app/components/file_attachment_list';
import FormattedText from 'app/components/formatted_text';
import Markdown from 'app/components/markdown';
import OptionsContext from 'app/components/options_context';
-import PostAddChannelMember from 'app/components/post_add_channel_member';
-
-import PostBodyAdditionalContent from 'app/components/post_body_additional_content';
import {emptyFunction} from 'app/utils/general';
import {getMarkdownTextStyles, getMarkdownBlockStyles} from 'app/utils/markdown';
import {preventDoubleTap} from 'app/utils/tap';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
-import Reactions from 'app/components/reactions';
+
+let FileAttachmentList;
+let PostAddChannelMember;
+let PostBodyAdditionalContent;
+let Reactions;
export default class PostBody extends PureComponent {
static propTypes = {
@@ -229,6 +229,31 @@ export default class PostBody extends PureComponent {
}
};
+ renderAddChannelMember = (style, textStyles) => {
+ const {onPermalinkPress, onPress, postProps} = this.props;
+
+ if (!PostAddChannelMember) {
+ PostAddChannelMember = require('app/components/post_add_channel_member').default;
+ }
+
+ return (
+
+
+
+
+
+ );
+ };
+
renderFileAttachments() {
const {
fileIds,
@@ -246,6 +271,10 @@ export default class PostBody extends PureComponent {
let attachments;
if (fileIds.length > 0) {
+ if (!FileAttachmentList) {
+ FileAttachmentList = require('app/components/file_attachment_list').default;
+ }
+
attachments = (
{
const {isReplyPost, message, navigator, onPermalinkPress, postId, postProps} = this.props;
+ if (!PostBodyAdditionalContent) {
+ PostBodyAdditionalContent = require('app/components/post_body_additional_content').default;
+ }
+
return (
{messageComponent});
} else if (isPostAddChannelMember) {
- messageComponent = (
-
-
-
-
-
- );
+ messageComponent = this.renderAddChannelMember(style, textStyles);
} else if (message.length) {
messageComponent = (
diff --git a/app/components/post_body_additional_content/post_body_additional_content.js b/app/components/post_body_additional_content/post_body_additional_content.js
index 1ba6c13e2..f22586c29 100644
--- a/app/components/post_body_additional_content/post_body_additional_content.js
+++ b/app/components/post_body_additional_content/post_body_additional_content.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
@@ -14,10 +14,6 @@ import {
import {YouTubeStandaloneAndroid, YouTubeStandaloneIOS} from 'react-native-youtube';
import youTubeVideoId from 'youtube-video-id';
-import youtubePlayIcon from 'assets/images/icons/youtube-play-icon.png';
-
-import MessageAttachments from 'app/components/message_attachments';
-import PostAttachmentOpenGraph from 'app/components/post_attachment_opengraph';
import ProgressiveImage from 'app/components/progressive_image';
import CustomPropTypes from 'app/constants/custom_prop_types';
@@ -27,6 +23,9 @@ import {isImageLink, isYoutubeLink} from 'app/utils/url';
const MAX_IMAGE_HEIGHT = 150;
+let MessageAttachments;
+let PostAttachmentOpenGraph;
+
export default class PostBodyAdditionalContent extends PureComponent {
static propTypes = {
baseTextStyle: CustomPropTypes.Style,
@@ -132,6 +131,9 @@ export default class PostBodyAdditionalContent extends PureComponent {
}
if (link && showLinkPreviews) {
+ if (!PostAttachmentOpenGraph) {
+ PostAttachmentOpenGraph = require('app/components/post_attachment_opengraph').default;
+ }
return (
@@ -261,6 +263,10 @@ export default class PostBodyAdditionalContent extends PureComponent {
const {attachments} = postProps;
if (attachments && attachments.length) {
+ if (!MessageAttachments) {
+ MessageAttachments = require('app/components/message_attachments').default;
+ }
+
return (
true,
};
- newMessagesIndex = -1;
- scrollToMessageTries = 0;
- makeExtraData = makeExtraData();
- itemMeasurements = {};
+ constructor(props) {
+ super(props);
- state = {
- managedConfig: {},
- scrollToMessage: false,
- };
+ this.newMessagesIndex = -1;
+ this.makeExtraData = makeExtraData();
+ this.itemMeasurements = {};
+
+ this.state = {
+ managedConfig: {},
+ scrollToMessage: false,
+ };
+ }
componentWillMount() {
this.listenerId = mattermostManaged.addEventListener('change', this.setManagedConfig);
diff --git a/app/components/post_textbox/post_textbox.js b/app/components/post_textbox/post_textbox.js
index 08fdf9782..a6f5cddc6 100644
--- a/app/components/post_textbox/post_textbox.js
+++ b/app/components/post_textbox/post_textbox.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
@@ -11,12 +11,13 @@ import EventEmitter from 'mattermost-redux/utils/event_emitter';
import AttachmentButton from 'app/components/attachment_button';
import Autocomplete from 'app/components/autocomplete';
import FileUploadPreview from 'app/components/file_upload_preview';
-import PaperPlane from 'app/components/paper_plane';
import {INITIAL_HEIGHT, INSERT_TO_COMMENT, INSERT_TO_DRAFT, IS_REACTION_REGEX, MAX_CONTENT_HEIGHT, MAX_FILE_COUNT} from 'app/constants/post_textbox';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
import Typing from './components/typing';
+let PaperPlane = null;
+
export default class PostTextbox extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
@@ -282,35 +283,44 @@ export default class PostTextbox extends PureComponent {
const {files, theme} = this.props;
const style = getStyleSheet(theme);
- const icon = (
-
- );
+ const canSend = this.canSend();
+ const imagesLoading = files.filter((f) => f.loading).length > 0;
let button = null;
- const imagesLoading = files.filter((f) => f.loading).length > 0;
- if (imagesLoading) {
- button = (
-
-
- {icon}
-
-
+
+ if (canSend || imagesLoading) {
+ if (!PaperPlane) {
+ PaperPlane = require('app/components/paper_plane').default;
+ }
+
+ const icon = (
+
);
- } else if (this.canSend()) {
- button = (
-
-
- {icon}
+
+ if (imagesLoading) {
+ button = (
+
+
+ {icon}
+
-
- );
+ );
+ } else if (canSend) {
+ button = (
+
+
+ {icon}
+
+
+ );
+ }
}
return button;
diff --git a/app/constants/device.js b/app/constants/device.js
index a60da371a..2bd3facda 100644
--- a/app/constants/device.js
+++ b/app/constants/device.js
@@ -1,8 +1,8 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import keyMirror from 'mattermost-redux/utils/key_mirror';
-import RNFetchBlob from 'react-native-fetch-blob';
+import RNFetchBlobFS from 'react-native-fetch-blob/fs';
const deviceTypes = keyMirror({
CONNECTION_CHANGED: null,
@@ -14,7 +14,7 @@ const deviceTypes = keyMirror({
export default {
...deviceTypes,
- DOCUMENTS_PATH: `${RNFetchBlob.fs.dirs.CacheDir}/Documents`,
- IMAGES_PATH: `${RNFetchBlob.fs.dirs.CacheDir}/Images`,
- VIDEOS_PATH: `${RNFetchBlob.fs.dirs.CacheDir}/Videos`,
+ DOCUMENTS_PATH: `${RNFetchBlobFS.dirs.CacheDir}/Documents`,
+ IMAGES_PATH: `${RNFetchBlobFS.dirs.CacheDir}/Images`,
+ VIDEOS_PATH: `${RNFetchBlobFS.dirs.CacheDir}/Videos`,
};
diff --git a/app/i18n/index.js b/app/i18n/index.js
index 66524bd9c..9ce1bdc05 100644
--- a/app/i18n/index.js
+++ b/app/i18n/index.js
@@ -1,70 +1,87 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import 'intl';
import {addLocaleData} from 'react-intl';
-import deLocaleData from 'react-intl/locale-data/de';
import enLocaleData from 'react-intl/locale-data/en';
-import esLocaleData from 'react-intl/locale-data/es';
-import frLocaleData from 'react-intl/locale-data/fr';
-import itLocaleData from 'react-intl/locale-data/it';
-import jaLocaleData from 'react-intl/locale-data/ja';
-import koLocaleData from 'react-intl/locale-data/ko';
-import nlLocaleData from 'react-intl/locale-data/nl';
-import plLocaleData from 'react-intl/locale-data/pl';
-import ptLocaleData from 'react-intl/locale-data/pt';
-import trLocaleData from 'react-intl/locale-data/tr';
-import ruLocaleData from 'react-intl/locale-data/ru';
-import zhLocaleData from 'react-intl/locale-data/zh';
-import {DEFAULT_LOCALE} from 'mattermost-redux/constants/general';
-
-import de from 'assets/i18n/de.json';
import en from 'assets/i18n/en.json';
-import es from 'assets/i18n/es.json';
-import fr from 'assets/i18n/fr.json';
-import it from 'assets/i18n/it.json';
-import ja from 'assets/i18n/ja.json';
-import ko from 'assets/i18n/ko.json';
-import nl from 'assets/i18n/nl.json';
-import pl from 'assets/i18n/pl.json';
-import ptBR from 'assets/i18n/pt-BR.json';
-import tr from 'assets/i18n/tr.json';
-import ru from 'assets/i18n/ru.json';
-import zhCN from 'assets/i18n/zh-CN.json';
-import zhTW from 'assets/i18n/zh-TW.json';
-const TRANSLATIONS = {
- de,
- en,
- es,
- fr,
- it,
- ja,
- ko,
- nl,
- pl,
- 'pt-BR': ptBR,
- tr,
- ru,
- 'zh-CN': zhCN,
- 'zh-TW': zhTW,
-};
+const TRANSLATIONS = {en};
+
+export const DEFAULT_LOCALE = 'en';
-addLocaleData(deLocaleData);
addLocaleData(enLocaleData);
-addLocaleData(esLocaleData);
-addLocaleData(frLocaleData);
-addLocaleData(itLocaleData);
-addLocaleData(jaLocaleData);
-addLocaleData(koLocaleData);
-addLocaleData(nlLocaleData);
-addLocaleData(plLocaleData);
-addLocaleData(ptLocaleData);
-addLocaleData(trLocaleData);
-addLocaleData(ruLocaleData);
-addLocaleData(zhLocaleData);
+
+function loadTranslation(locale) {
+ try {
+ let localeData;
+ switch (locale) {
+ case 'de':
+ TRANSLATIONS.de = require('assets/i18n/de.json');
+ localeData = require('react-intl/locale-data/de');
+ break;
+ case 'es':
+ TRANSLATIONS.es = require('assets/i18n/es.json');
+ localeData = require('react-intl/locale-data/es');
+ break;
+ case 'fr':
+ TRANSLATIONS.fr = require('assets/i18n/fr.json');
+ localeData = require('react-intl/locale-data/fr');
+ break;
+ case 'it':
+ TRANSLATIONS.it = require('assets/i18n/it.json');
+ localeData = require('react-intl/locale-data/it');
+ break;
+ case 'ja':
+ TRANSLATIONS.ja = require('assets/i18n/ja.json');
+ localeData = require('react-intl/locale-data/ja');
+ break;
+ case 'ko':
+ TRANSLATIONS.ko = require('assets/i18n/ko.json');
+ localeData = require('react-intl/locale-data/ko');
+ break;
+ case 'nl':
+ TRANSLATIONS.nl = require('assets/i18n/nl.json');
+ localeData = require('react-intl/locale-data/nl');
+ break;
+ case 'pl':
+ TRANSLATIONS.pl = require('assets/i18n/pl.json');
+ localeData = require('react-intl/locale-data/pl');
+ break;
+ case 'pt-BT':
+ TRANSLATIONS[locale] = require('assets/i18n/pt-BR.json');
+ localeData = require('react-intl/locale-data/pt');
+ break;
+ case 'tr':
+ TRANSLATIONS.tr = require('assets/i18n/tr.json');
+ localeData = require('react-intl/locale-data/tr');
+ break;
+ case 'ru':
+ TRANSLATIONS.ru = require('assets/i18n/ru.json');
+ localeData = require('react-intl/locale-data/ru');
+ break;
+ case 'zh-CN':
+ TRANSLATIONS[locale] = require('assets/i18n/zh-CN.json');
+ localeData = require('react-intl/locale-data/zh');
+ break;
+ case 'zh-TW':
+ TRANSLATIONS[locale] = require('assets/i18n/zh-TW.json');
+ localeData = require('react-intl/locale-data/zh');
+ break;
+ }
+
+ if (localeData) {
+ addLocaleData(localeData);
+ }
+ } catch (e) {
+ console.error('NO Translation found', e); //eslint-disable-line no-console
+ }
+}
export function getTranslations(locale) {
+ if (!TRANSLATIONS[locale]) {
+ loadTranslation(locale);
+ }
return TRANSLATIONS[locale] || TRANSLATIONS[DEFAULT_LOCALE];
}
diff --git a/app/screens/channel/channel.js b/app/screens/channel/channel.js
index 41cc6138e..7f70194ef 100644
--- a/app/screens/channel/channel.js
+++ b/app/screens/channel/channel.js
@@ -1,9 +1,9 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
-import {injectIntl, intlShape} from 'react-intl';
+import {intlShape} from 'react-intl';
import {
AppState,
Platform,
@@ -12,14 +12,10 @@ import {
import EventEmitter from 'mattermost-redux/utils/event_emitter';
-import ClientUpgradeListener from 'app/components/client_upgrade_listener';
import ChannelDrawer from 'app/components/channel_drawer';
import SettingsDrawer from 'app/components/settings_drawer';
-import ChannelLoader from 'app/components/channel_loader';
import KeyboardLayout from 'app/components/layout/keyboard_layout';
-import Loading from 'app/components/loading';
import OfflineIndicator from 'app/components/offline_indicator';
-import PostListRetry from 'app/components/post_list_retry';
import SafeAreaView from 'app/components/safe_area_view';
import StatusBar from 'app/components/status_bar';
import {preventDoubleTap} from 'app/utils/tap';
@@ -32,7 +28,9 @@ import LocalConfig from 'assets/config';
import ChannelNavBar from './channel_nav_bar';
import ChannelPostList from './channel_post_list';
-class Channel extends PureComponent {
+let ClientUpgradeListener;
+
+export default class Channel extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
connection: PropTypes.func.isRequired,
@@ -49,11 +47,22 @@ class Channel extends PureComponent {
currentChannelId: PropTypes.string,
channelsRequestFailed: PropTypes.bool,
currentTeamId: PropTypes.string,
- intl: intlShape.isRequired,
navigator: PropTypes.object,
theme: PropTypes.object.isRequired,
};
+ static contextTypes = {
+ intl: intlShape.isRequired,
+ };
+
+ constructor(props) {
+ super(props);
+
+ if (LocalConfig.EnableMobileClientUpgrade && !ClientUpgradeListener) {
+ ClientUpgradeListener = require('app/components/client_upgrade_listener').default;
+ }
+ }
+
componentWillMount() {
EventEmitter.on('leave_team', this.handleLeaveTeam);
@@ -67,9 +76,7 @@ class Channel extends PureComponent {
}
componentDidMount() {
- if (Platform.OS === 'android') {
- AppState.addEventListener('change', this.handleAppStateChange);
- }
+ AppState.addEventListener('change', this.handleAppStateChange);
if (tracker.initialLoad) {
this.props.actions.recordLoadTime('Start time', 'initialLoad');
@@ -86,6 +93,10 @@ class Channel extends PureComponent {
if (nextProps.currentTeamId && this.props.currentTeamId !== nextProps.currentTeamId) {
this.loadChannels(nextProps.currentTeamId);
}
+
+ if (LocalConfig.EnableMobileClientUpgrade && !ClientUpgradeListener) {
+ ClientUpgradeListener = require('app/components/client_upgrade_listener').default;
+ }
}
componentDidUpdate() {
@@ -100,20 +111,20 @@ class Channel extends PureComponent {
EventEmitter.off('leave_team', this.handleLeaveTeam);
this.networkListener.removeEventListener();
- if (Platform.OS === 'android') {
- AppState.removeEventListener('change', this.handleAppStateChange);
- }
+ AppState.removeEventListener('change', this.handleAppStateChange);
closeWebSocket();
stopPeriodicStatusUpdates();
}
- attachPostTextbox = (ref) => {
+ attachPostTextBox = (ref) => {
this.postTextbox = ref;
};
blurPostTextBox = () => {
- this.postTextbox.getWrappedInstance().blur();
+ if (this.postTextbox && this.postTextbox.getWrappedInstance()) {
+ this.postTextbox.getWrappedInstance().blur();
+ }
};
channelDrawerRef = (ref) => {
@@ -129,7 +140,8 @@ class Channel extends PureComponent {
};
goToChannelInfo = preventDoubleTap(() => {
- const {intl, navigator, theme} = this.props;
+ const {intl} = this.context;
+ const {navigator, theme} = this.props;
const options = {
screen: 'ChannelInfo',
title: intl.formatMessage({id: 'mobile.routes.channelInfo', defaultMessage: 'Info'}),
@@ -150,7 +162,7 @@ class Channel extends PureComponent {
}
});
- handleAppStateChange = async (appState) => {
+ handleWebSocket = (open) => {
const {actions} = this.props;
const {
closeWebSocket,
@@ -158,9 +170,8 @@ class Channel extends PureComponent {
startPeriodicStatusUpdates,
stopPeriodicStatusUpdates,
} = actions;
- const isActive = appState === 'active';
- if (isActive) {
+ if (open) {
initWebSocket(Platform.OS);
startPeriodicStatusUpdates();
} else {
@@ -169,23 +180,14 @@ class Channel extends PureComponent {
}
};
- handleConnectionChange = (isConnected) => {
- const {actions} = this.props;
- const {
- closeWebSocket,
- connection,
- initWebSocket,
- startPeriodicStatusUpdates,
- stopPeriodicStatusUpdates,
- } = actions;
+ handleAppStateChange = async (appState) => {
+ this.handleWebSocket(appState === 'active');
+ };
- if (isConnected) {
- initWebSocket(Platform.OS);
- startPeriodicStatusUpdates();
- } else {
- closeWebSocket(true);
- stopPeriodicStatusUpdates();
- }
+ handleConnectionChange = (isConnected) => {
+ const {connection} = this.props.actions;
+
+ this.handleWebSocket(isConnected);
connection(isConnected);
};
@@ -225,10 +227,10 @@ class Channel extends PureComponent {
};
render() {
+ const {intl} = this.context;
const {
channelsRequestFailed,
currentChannelId,
- intl,
navigator,
theme,
} = this.props;
@@ -237,6 +239,7 @@ class Channel extends PureComponent {
if (!currentChannelId) {
if (channelsRequestFailed) {
+ const PostListRetry = require('app/components/post_list_retry').default;
return (
);
}
+
+ const Loading = require('app/components/channel_loader').default;
return (
-
+
);
}
@@ -277,10 +282,9 @@ class Channel extends PureComponent {
-
{LocalConfig.EnableMobileClientUpgrade && }
@@ -301,5 +305,3 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
},
};
});
-
-export default injectIntl(Channel);
diff --git a/app/screens/channel/channel_post_list/channel_post_list.js b/app/screens/channel/channel_post_list/channel_post_list.js
index f378be202..30a8f7db0 100644
--- a/app/screens/channel/channel_post_list/channel_post_list.js
+++ b/app/screens/channel/channel_post_list/channel_post_list.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import PropTypes from 'prop-types';
@@ -13,13 +13,14 @@ import {
import {debounce} from 'mattermost-redux/actions/helpers';
import AnnouncementBanner from 'app/components/announcement_banner';
-import ChannelIntro from 'app/components/channel_intro';
-import LoadMorePosts from 'app/components/load_more_posts';
import PostList from 'app/components/post_list';
import PostListRetry from 'app/components/post_list_retry';
import RetryBarIndicator from 'app/components/retry_bar_indicator';
import tracker from 'app/utils/time_tracker';
+let ChannelIntro = null;
+let LoadMorePosts = null;
+
export default class ChannelPostList extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
@@ -136,6 +137,10 @@ export default class ChannelPostList extends PureComponent {
}
if (this.props.loadMorePostsVisible) {
+ if (!LoadMorePosts) {
+ LoadMorePosts = require('app/components/load_more_posts').default;
+ }
+
return (
wrapWithContextProvider(require('app/screens/about').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('AddReaction', () => wrapWithContextProvider(require('app/screens/add_reaction').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('AdvancedSettings', () => wrapWithContextProvider(require('app/screens/settings/advanced_settings').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Channel', () => wrapWithContextProvider(require('app/screens/channel').default, false), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ChannelAddMembers', () => wrapWithContextProvider(require('app/screens/channel_add_members').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ChannelInfo', () => wrapWithContextProvider(require('app/screens/channel_info').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ChannelMembers', () => wrapWithContextProvider(require('app/screens/channel_members').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ChannelPeek', () => wrapWithContextProvider(require('app/screens/channel_peek').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ClientUpgrade', () => wrapWithContextProvider(require('app/screens/client_upgrade').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ClockDisplay', () => wrapWithContextProvider(require('app/screens/clock_display').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Code', () => wrapWithContextProvider(require('app/screens/code').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('CreateChannel', () => wrapWithContextProvider(require('app/screens/create_channel').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('DisplaySettings', () => wrapWithContextProvider(require('app/screens/settings/display_settings').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('EditChannel', () => wrapWithContextProvider(require('app/screens/edit_channel').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('EditPost', () => wrapWithContextProvider(require('app/screens/edit_post').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('EditProfile', () => wrapWithContextProvider(require('app/screens/edit_profile').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Entry', () => wrapWithContextProvider(require('app/screens/entry').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('FlaggedPosts', () => wrapWithContextProvider(require('app/screens/flagged_posts').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('ImagePreview', () => wrapWithContextProvider(require('app/screens/image_preview').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('TextPreview', () => wrapWithContextProvider(require('app/screens/text_preview').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Login', () => wrapWithContextProvider(require('app/screens/login').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('LoginOptions', () => wrapWithContextProvider(require('app/screens/login_options').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('LongPost', () => wrapWithContextProvider(require('app/screens/long_post').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('MFA', () => wrapWithContextProvider(require('app/screens/mfa').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('MoreChannels', () => wrapWithContextProvider(require('app/screens/more_channels').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('MoreDirectMessages', () => wrapWithContextProvider(require('app/screens/more_dms').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Notification', () => wrapWithContextProvider(require('app/screens/notification').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('NotificationSettings', () => wrapWithContextProvider(require('app/screens/settings/notification_settings').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('NotificationSettingsEmail', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_email').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('NotificationSettingsMentions', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mentions').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('NotificationSettingsMentionsKeywords', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mentions_keywords').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('NotificationSettingsMobile', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mobile').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('OptionsModal', () => wrapWithContextProvider(require('app/screens/options_modal').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Permalink', () => wrapWithContextProvider(require('app/screens/permalink').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('RecentMentions', () => wrapWithContextProvider(require('app/screens/recent_mentions').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Root', () => require('app/screens/root').default, store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Search', () => wrapWithContextProvider(require('app/screens/search').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('SelectServer', () => wrapWithContextProvider(require('app/screens/select_server').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('SelectTeam', () => wrapWithContextProvider(require('app/screens/select_team').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Settings', () => wrapWithContextProvider(require('app/screens/settings/general').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('SSO', () => wrapWithContextProvider(require('app/screens/sso').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Table', () => wrapWithContextProvider(require('app/screens/table').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('TableImage', () => wrapWithContextProvider(require('app/screens/table_image').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('Thread', () => wrapWithContextProvider(require('app/screens/thread').default), store, Provider); //eslint-disable-line global-require
- Navigation.registerComponent('UserProfile', () => wrapWithContextProvider(require('app/screens/user_profile').default), store, Provider); //eslint-disable-line global-require
+ Navigation.registerComponent('About', () => wrapWithContextProvider(require('app/screens/about').default), store, Provider);
+ Navigation.registerComponent('AddReaction', () => wrapWithContextProvider(require('app/screens/add_reaction').default), store, Provider);
+ Navigation.registerComponent('AdvancedSettings', () => wrapWithContextProvider(require('app/screens/settings/advanced_settings').default), store, Provider);
+ Navigation.registerComponent('Channel', () => wrapWithContextProvider(Channel, false), store, Provider);
+ Navigation.registerComponent('ChannelAddMembers', () => wrapWithContextProvider(require('app/screens/channel_add_members').default), store, Provider);
+ Navigation.registerComponent('ChannelInfo', () => wrapWithContextProvider(require('app/screens/channel_info').default), store, Provider);
+ Navigation.registerComponent('ChannelMembers', () => wrapWithContextProvider(require('app/screens/channel_members').default), store, Provider);
+ Navigation.registerComponent('ChannelPeek', () => wrapWithContextProvider(require('app/screens/channel_peek').default), store, Provider);
+ Navigation.registerComponent('ClientUpgrade', () => wrapWithContextProvider(require('app/screens/client_upgrade').default), store, Provider);
+ Navigation.registerComponent('ClockDisplay', () => wrapWithContextProvider(require('app/screens/clock_display').default), store, Provider);
+ Navigation.registerComponent('Code', () => wrapWithContextProvider(require('app/screens/code').default), store, Provider);
+ Navigation.registerComponent('CreateChannel', () => wrapWithContextProvider(require('app/screens/create_channel').default), store, Provider);
+ Navigation.registerComponent('DisplaySettings', () => wrapWithContextProvider(require('app/screens/settings/display_settings').default), store, Provider);
+ Navigation.registerComponent('EditChannel', () => wrapWithContextProvider(require('app/screens/edit_channel').default), store, Provider);
+ Navigation.registerComponent('EditPost', () => wrapWithContextProvider(require('app/screens/edit_post').default), store, Provider);
+ Navigation.registerComponent('EditProfile', () => wrapWithContextProvider(require('app/screens/edit_profile').default), store, Provider);
+ Navigation.registerComponent('Entry', () => wrapWithContextProvider(Entry), store, Provider);
+ Navigation.registerComponent('FlaggedPosts', () => wrapWithContextProvider(require('app/screens/flagged_posts').default), store, Provider);
+ Navigation.registerComponent('ImagePreview', () => wrapWithContextProvider(require('app/screens/image_preview').default), store, Provider);
+ Navigation.registerComponent('Login', () => wrapWithContextProvider(require('app/screens/login').default), store, Provider);
+ Navigation.registerComponent('LoginOptions', () => wrapWithContextProvider(require('app/screens/login_options').default), store, Provider);
+ Navigation.registerComponent('LongPost', () => wrapWithContextProvider(require('app/screens/long_post').default), store, Provider);
+ Navigation.registerComponent('MFA', () => wrapWithContextProvider(require('app/screens/mfa').default), store, Provider);
+ Navigation.registerComponent('MoreChannels', () => wrapWithContextProvider(require('app/screens/more_channels').default), store, Provider);
+ Navigation.registerComponent('MoreDirectMessages', () => wrapWithContextProvider(require('app/screens/more_dms').default), store, Provider);
+ Navigation.registerComponent('Notification', () => wrapWithContextProvider(require('app/screens/notification').default), store, Provider);
+ Navigation.registerComponent('NotificationSettings', () => wrapWithContextProvider(require('app/screens/settings/notification_settings').default), store, Provider);
+ Navigation.registerComponent('NotificationSettingsEmail', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_email').default), store, Provider);
+ Navigation.registerComponent('NotificationSettingsMentions', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mentions').default), store, Provider);
+ Navigation.registerComponent('NotificationSettingsMentionsKeywords', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mentions_keywords').default), store, Provider);
+ Navigation.registerComponent('NotificationSettingsMobile', () => wrapWithContextProvider(require('app/screens/settings/notification_settings_mobile').default), store, Provider);
+ Navigation.registerComponent('OptionsModal', () => wrapWithContextProvider(require('app/screens/options_modal').default), store, Provider);
+ Navigation.registerComponent('Permalink', () => wrapWithContextProvider(require('app/screens/permalink').default), store, Provider);
+ Navigation.registerComponent('RecentMentions', () => wrapWithContextProvider(require('app/screens/recent_mentions').default), store, Provider);
+ Navigation.registerComponent('Root', () => require('app/screens/root').default, store, Provider);
+ Navigation.registerComponent('Search', () => wrapWithContextProvider(require('app/screens/search').default), store, Provider);
+ Navigation.registerComponent('SelectServer', () => wrapWithContextProvider(SelectServer), store, Provider);
+ Navigation.registerComponent('SelectTeam', () => wrapWithContextProvider(require('app/screens/select_team').default), store, Provider);
+ Navigation.registerComponent('Settings', () => wrapWithContextProvider(require('app/screens/settings/general').default), store, Provider);
+ Navigation.registerComponent('SSO', () => wrapWithContextProvider(require('app/screens/sso').default), store, Provider);
+ Navigation.registerComponent('Table', () => wrapWithContextProvider(require('app/screens/table').default), store, Provider);
+ Navigation.registerComponent('TableImage', () => wrapWithContextProvider(require('app/screens/table_image').default), store, Provider);
+ Navigation.registerComponent('TextPreview', () => wrapWithContextProvider(require('app/screens/text_preview').default), store, Provider);
+ Navigation.registerComponent('Thread', () => wrapWithContextProvider(require('app/screens/thread').default), store, Provider);
+ Navigation.registerComponent('UserProfile', () => wrapWithContextProvider(require('app/screens/user_profile').default), store, Provider);
}
diff --git a/app/screens/login/login.js b/app/screens/login/login.js
index f346baf74..85b3b7c99 100644
--- a/app/screens/login/login.js
+++ b/app/screens/login/login.js
@@ -1,9 +1,9 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
-import {injectIntl, intlShape} from 'react-intl';
+import {intlShape} from 'react-intl';
import {
ActivityIndicator,
Dimensions,
@@ -27,13 +27,10 @@ import {GlobalStyles} from 'app/styles';
import {preventDoubleTap} from 'app/utils/tap';
import tracker from 'app/utils/time_tracker';
-import logo from 'assets/images/logo.png';
-
import {RequestStatus} from 'mattermost-redux/constants';
-class Login extends PureComponent {
+export default class Login extends PureComponent {
static propTypes = {
- intl: intlShape.isRequired,
navigator: PropTypes.object,
theme: PropTypes.object,
actions: PropTypes.shape({
@@ -52,6 +49,10 @@ class Login extends PureComponent {
loginRequest: PropTypes.object.isRequired,
};
+ static contextTypes = {
+ intl: intlShape.isRequired,
+ };
+
constructor(props) {
super(props);
@@ -66,7 +67,7 @@ class Login extends PureComponent {
componentWillReceiveProps(nextProps) {
if (this.props.loginRequest.status === RequestStatus.STARTED && nextProps.loginRequest.status === RequestStatus.SUCCESS) {
- this.props.actions.handleSuccessfulLogin().then(this.props.actions.getSession).then(this.goToLoadTeam);
+ this.props.actions.handleSuccessfulLogin().then(this.props.actions.getSession).then(this.goToChannel);
} else if (this.props.loginRequest.status !== nextProps.loginRequest.status && nextProps.loginRequest.status !== RequestStatus.STARTED) {
this.setState({isLoading: false});
}
@@ -76,8 +77,9 @@ class Login extends PureComponent {
Dimensions.removeEventListener('change', this.orientationDidChange);
}
- goToLoadTeam = (expiresAt) => {
- const {intl, navigator} = this.props;
+ goToChannel = (expiresAt) => {
+ const {intl} = this.context;
+ const {navigator} = this.props;
tracker.initialLoad = Date.now();
if (expiresAt) {
@@ -110,7 +112,8 @@ class Login extends PureComponent {
};
goToMfa = () => {
- const {intl, navigator, theme} = this.props;
+ const {intl} = this.context;
+ const {navigator, theme} = this.props;
this.setState({isLoading: false});
@@ -152,13 +155,14 @@ class Login extends PureComponent {
}
this.setState({
+ isLoading: false,
error: {
intl: {
id: msgId,
defaultMessage: '',
values: {
ldapUsername: this.props.config.LdapLoginFieldName ||
- this.props.intl.formatMessage({
+ this.context.intl.formatMessage({
id: 'login.ldapUsernameLower',
defaultMessage: 'AD/LDAP username',
}),
@@ -171,6 +175,7 @@ class Login extends PureComponent {
if (!this.props.password) {
this.setState({
+ isLoading: false,
error: {
intl: {
id: 'login.noPassword',
@@ -202,7 +207,7 @@ class Login extends PureComponent {
};
createLoginPlaceholder() {
- const {formatMessage} = this.props.intl;
+ const {formatMessage} = this.context.intl;
const license = this.props.license;
const config = this.props.config;
@@ -346,7 +351,7 @@ class Login extends PureComponent {
enableOnAndroid={true}
>
@@ -379,7 +384,7 @@ class Login extends PureComponent {
value={this.props.password}
onChangeText={this.props.actions.handlePasswordChanged}
style={GlobalStyles.inputBox}
- placeholder={this.props.intl.formatMessage({id: 'login.password', defaultMessage: 'Password'})}
+ placeholder={this.context.intl.formatMessage({id: 'login.password', defaultMessage: 'Password'})}
secureTextEntry={true}
autoCorrect={false}
autoCapitalize='none'
@@ -409,5 +414,3 @@ const style = StyleSheet.create({
paddingVertical: 50,
},
});
-
-export default injectIntl(Login);
diff --git a/app/screens/mfa/mfa.js b/app/screens/mfa/mfa.js
index d229f192d..732fc059a 100644
--- a/app/screens/mfa/mfa.js
+++ b/app/screens/mfa/mfa.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import React, {PureComponent} from 'react';
@@ -14,6 +14,8 @@ import {
} from 'react-native';
import Button from 'react-native-button';
+import {RequestStatus} from 'mattermost-redux/constants';
+
import ErrorText from 'app/components/error_text';
import FormattedText from 'app/components/formatted_text';
import StatusBar from 'app/components/status_bar';
@@ -21,10 +23,6 @@ import TextInputWithLocalizedPlaceholder from 'app/components/text_input_with_lo
import {GlobalStyles} from 'app/styles';
import {preventDoubleTap} from 'app/utils/tap';
-import logo from 'assets/images/logo.png';
-
-import {RequestStatus} from 'mattermost-redux/constants';
-
export default class Mfa extends PureComponent {
static propTypes = {
navigator: PropTypes.object,
@@ -138,7 +136,7 @@ export default class Mfa extends PureComponent {
{
- const {intl, theme} = this.props;
+ const {intl} = this.context;
+ const {theme} = this.props;
this.props.navigator.push({
screen: 'ClientUpgrade',
@@ -124,7 +126,7 @@ class SelectServer extends PureComponent {
backButtonTitle: '',
navigatorStyle: {
navBarHidden: false,
- disabledBackGesture: Config.AutoSelectServerUrl,
+ disabledBackGesture: LocalConfig.AutoSelectServerUrl,
statusBarHidden: true,
statusBarHideWithNavBar: true,
navBarTextColor: theme.sidebarHeaderTextColor,
@@ -132,14 +134,15 @@ class SelectServer extends PureComponent {
navBarButtonColor: theme.sidebarHeaderTextColor,
},
passProps: {
- closeAction: () => this.handleLoginOptions(this.props),
+ closeAction: this.handleLoginOptions,
upgradeType,
},
});
}
- handleLoginOptions = (props) => {
- const {config, intl, license, theme} = props;
+ handleLoginOptions = (props = this.props) => {
+ const {intl} = this.context;
+ const {config, license, theme} = props;
const samlEnabled = config.EnableSaml === 'true' && license.IsLicensed === 'true' && license.SAML === 'true';
const gitlabEnabled = config.EnableSignUpWithGitLab === 'true';
@@ -164,8 +167,8 @@ class SelectServer extends PureComponent {
animated: true,
backButtonTitle: '',
navigatorStyle: {
- navBarHidden: Config.AutoSelectServerUrl,
- disabledBackGesture: Config.AutoSelectServerUrl,
+ navBarHidden: LocalConfig.AutoSelectServerUrl,
+ disabledBackGesture: LocalConfig.AutoSelectServerUrl,
navBarTextColor: theme.sidebarHeaderTextColor,
navBarBackgroundColor: theme.sidebarHeaderBg,
navBarButtonColor: theme.sidebarHeaderTextColor,
@@ -184,6 +187,7 @@ class SelectServer extends PureComponent {
};
onClick = preventDoubleTap(async () => {
+ const urlParse = require('url-parse');
const preUrl = urlParse(this.state.url, true);
const url = stripTrailingSlashes(preUrl.protocol + '//' + preUrl.host);
@@ -272,11 +276,12 @@ class SelectServer extends PureComponent {
blur = () => {
if (this.textInput) {
- this.textInput.refs.wrappedInstance.blur();
+ this.textInput.blur();
}
};
render() {
+ const {formatMessage} = this.context.intl;
const {allowOtherServers} = this.props;
const {
connected,
@@ -331,7 +336,7 @@ class SelectServer extends PureComponent {
@@ -341,7 +346,7 @@ class SelectServer extends PureComponent {
defaultMessage='Enter Server URL'
/>
- {
- return {
- DocumentDir: () => null,
- polyfill: () => null,
- fs: {
- dirs: {
- },
- },
- };
-});
+jest.mock('react-native-fetch-blob/fs', () => ({
+ dirs: {
+ DocumentDir: () => jest.fn(),
+ CacheDir: () => jest.fn(),
+ },
+}));
jest.mock('react-native-device-info', () => {
return {
diff --git a/index.js b/index.js
index effcd7828..3e4e9f219 100644
--- a/index.js
+++ b/index.js
@@ -1,6 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
+import 'react-native/Libraries/Core/InitializeCore';
import {AppRegistry, Platform} from 'react-native';
import 'app/mattermost';
@@ -9,3 +10,33 @@ import ShareExtension from 'share_extension/android';
if (Platform.OS === 'android') {
AppRegistry.registerComponent('MattermostShare', () => ShareExtension);
}
+
+// Uncomment the snippet below if you want to update the modules
+// defined in packager/modulePaths.js so they are included in the main bundle.
+
+/*
+/!* eslint-disable no-console *!/
+/!* eslint-disable no-undef *!/
+if (__DEV__) {
+ const modules = require.getModules();
+ const moduleIds = Object.keys(modules);
+ const loadedModuleNames = moduleIds.
+ filter((moduleId) => modules[moduleId].isInitialized).
+ map((moduleId) => modules[moduleId].verboseName);
+
+ const waitingModuleNames = moduleIds.
+ filter((moduleId) => !modules[moduleId].isInitialized).
+ map((moduleId) => modules[moduleId].verboseName);
+
+ // make sure that the modules you expect to be waiting are actually waiting
+ console.log(
+ 'loaded:',
+ loadedModuleNames,
+ 'waiting:',
+ waitingModuleNames
+ );
+
+ // grab this text blob, and put it in a file named packager/moduleNames.js
+ console.log(`module.exports = ${JSON.stringify(loadedModuleNames.sort())};`);
+}
+*/
diff --git a/package.json b/package.json
index 1f5427fd2..a2a08a2cb 100644
--- a/package.json
+++ b/package.json
@@ -98,6 +98,7 @@
"underscore": "1.9.0"
},
"scripts": {
+ "start": "node ./node_modules/react-native/local-cli/cli.js start --config ../../../../packager/config.js",
"check": "eslint --ignore-path .gitignore --ignore-pattern node_modules --quiet .",
"fix": "eslint --ignore-path .gitignore --ignore-pattern node_modules --quiet . --fix",
"postinstall": "make post-install",
diff --git a/packager/config.js b/packager/config.js
new file mode 100644
index 000000000..2613db46b
--- /dev/null
+++ b/packager/config.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+/* eslint-disable no-console */
+const modulePaths = require('./modulePaths');
+const resolve = require('path').resolve;
+const fs = require('fs');
+
+const platformRegex = /\.(android\.js|ios\.js)/g;
+const modulesRegex = /\/(node_modules)/;
+
+// This script will let the react native packager what modules to include
+// in the main bundle and what modules to blacklist from the inline requires
+// this modules are taken from the modulePaths.js file
+
+const config = {
+ getTransformOptions: (entryFile, {platform}) => {
+ console.log('BUILDING MODULES FOR', platform);
+ const moduleMap = {};
+ modulePaths.forEach((path) => {
+ let realPath = path;
+ if (platform && platformRegex.test(realPath)) {
+ realPath = path.replace(platformRegex, `.${platform}.js`);
+ }
+
+ let fsFile = realPath;
+ if (path.match(modulesRegex).length > 1) {
+ fsFile = path.replace(modulesRegex, '');
+ }
+
+ if (fs.existsSync(fsFile)) {
+ moduleMap[resolve(realPath)] = true;
+ }
+ });
+ return {
+ preloadedModules: moduleMap,
+ transform: {
+ inlineRequires: {
+ blacklist: moduleMap,
+ },
+ },
+ };
+ },
+};
+
+module.exports = config;
diff --git a/packager/generateModulePaths.js b/packager/generateModulePaths.js
new file mode 100644
index 000000000..b9f3fbea1
--- /dev/null
+++ b/packager/generateModulePaths.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+/* eslint-disable no-console */
+const execSync = require('child_process').execSync;
+const fs = require('fs');
+const moduleNames = require('./moduleNames');
+
+const pjson = require('../package.json');
+const localPrefix = `${pjson.name}/`;
+
+// Transforming to Module Paths
+// This script will convert the module names found in moduleNames.js
+// to the absolute module path that we need.
+const modulePaths = moduleNames.map((moduleName) => {
+ if (moduleName.startsWith(localPrefix)) {
+ return `./${moduleName.substring(localPrefix.length)}`;
+ }
+ if (moduleName.endsWith('.js')) {
+ return `./node_modules/${moduleName}`;
+ }
+ try {
+ const result = execSync(
+ `grep "@providesModule ${moduleName}" $(find . -name ${moduleName}\\\\.js) -l`
+ ).toString().trim().split('\n')[0];
+
+ if (result != null) {
+ return result;
+ }
+ } catch (e) {
+ return null;
+ }
+ return null;
+});
+
+const paths = modulePaths.filter((path) => path != null).map((path) => `'${path}'`).join(',\n');
+
+const fileData = `module.exports = [${paths}];`;
+
+fs.writeFile('./packager/modulePaths.js', fileData, (err) => {
+ if (err) {
+ console.log(err);
+ }
+
+ console.log('Done');
+});
diff --git a/packager/moduleNames.js b/packager/moduleNames.js
new file mode 100644
index 000000000..cd65369c3
--- /dev/null
+++ b/packager/moduleNames.js
@@ -0,0 +1 @@
+module.exports = ['ARTSerializablePath', 'Animated', 'AnimatedAddition', 'AnimatedDiffClamp', 'AnimatedDivision', 'AnimatedEvent', 'AnimatedImplementation', 'AnimatedInterpolation', 'AnimatedModulo', 'AnimatedMultiplication', 'AnimatedNode', 'AnimatedProps', 'AnimatedStyle', 'AnimatedTracking', 'AnimatedTransform', 'AnimatedValue', 'AnimatedValueXY', 'AnimatedWithChildren', 'Animation', 'AppContainer', 'AppRegistry', 'AppState', 'AssetRegistry', 'AssetSourceResolver', 'AsyncStorage', 'BackHandler', 'BatchedBridge', 'Blob', 'BlobManager', 'BlobRegistry', 'BoundingDimensions', 'BugReporting', 'ColorPropType', 'DecayAnimation', 'DeviceInfo', 'Dimensions', 'Easing', 'EdgeInsetsPropType', 'EmitterSubscription', 'ErrorUtils', 'EventEmitter', 'EventSubscription', 'EventSubscriptionVendor', 'ExceptionsManager', 'FormData', 'FrameRateLogger', 'HMRClient', 'I18nManager', 'Image', 'ImageBackground', 'ImageResizeMode', 'ImageStylePropTypes', 'InitializeCore', 'InspectorAgent', 'InteractionManager', 'JSInspector', 'JSTimers', 'Keyboard', 'LayoutAnimation', 'LayoutPropTypes', 'Map', 'MaskedViewIOS', 'MatrixMath', 'MessageQueue', 'MissingNativeEventEmitterShim', 'NativeAnimatedHelper', 'NativeEventEmitter', 'NativeMethodsMixin', 'NativeModules', 'NetInfo', 'NetworkAgent', 'PanResponder', 'PermissionsAndroid', 'PixelRatio', 'Platform', 'PlatformViewPropTypes', 'PointPropType', 'PolyfillFunctions', 'PooledClass', 'Position', 'Promise', 'RCTDeviceEventEmitter', 'RCTEventEmitter', 'RCTNetworking', 'React', 'ReactFeatureFlags', 'ReactNative', 'ReactNativeART', 'ReactNativeBridgeEventPlugin', 'ReactNativeComponentTree', 'ReactNativePropRegistry', 'ReactNativeRenderer-dev', 'ReactNativeStyleAttributes', 'ReactNativeVersion', 'ReactNativeVersionCheck', 'ReactNativeViewAttributes', 'SceneTracker', 'ScrollResponder', 'ScrollView', 'ScrollViewStickyHeader', 'Set', 'ShadowPropTypesIOS', 'SpringAnimation', 'SpringConfig', 'StyleSheet', 'StyleSheetPropType', 'StyleSheetValidation', 'Subscribable', 'Systrace', 'TVEventHandler', 'TVViewPropTypes', 'TaskQueue', 'Text', 'TextInputState', 'TextPropTypes', 'TextStylePropTypes', 'TimingAnimation', 'TouchHistoryMath', 'Touchable', 'TouchableOpacity', 'TouchableWithoutFeedback', 'TransformPropTypes', 'UIManager', 'UnimplementedView', 'View', 'ViewAccessibility', 'ViewContext', 'ViewPropTypes', 'ViewStylePropTypes', 'WebSocket', 'WebSocketEvent', 'XMLHttpRequest', '_shouldPolyfillES6Collection', 'app/actions/device/index.js', 'app/actions/views/announcement.js', 'app/actions/views/channel.js', 'app/actions/views/client_upgrade.js', 'app/actions/views/command.js', 'app/actions/views/emoji.js', 'app/actions/views/file_upload.js', 'app/actions/views/login.js', 'app/actions/views/more_dms.js', 'app/actions/views/root.js', 'app/actions/views/select_server.js', 'app/actions/views/select_team.js', 'app/actions/views/thread.js', 'app/actions/views/typing.js', 'app/app.js', 'app/components/announcement_banner/announcement_banner.js', 'app/components/announcement_banner/index.js', 'app/components/app_icon.js', 'app/components/at_mention/at_mention.js', 'app/components/at_mention/index.js', 'app/components/attachment_button.js', 'app/components/autocomplete/at_mention/at_mention.js', 'app/components/autocomplete/at_mention/index.js', 'app/components/autocomplete/at_mention_item/at_mention_item.js', 'app/components/autocomplete/at_mention_item/index.js', 'app/components/autocomplete/autocomplete.js', 'app/components/autocomplete/autocomplete_divider/autocomplete_divider.js', 'app/components/autocomplete/autocomplete_divider/index.js', 'app/components/autocomplete/autocomplete_section_header.js', 'app/components/autocomplete/channel_mention/channel_mention.js', 'app/components/autocomplete/channel_mention/index.js', 'app/components/autocomplete/channel_mention_item/channel_mention_item.js', 'app/components/autocomplete/channel_mention_item/index.js', 'app/components/autocomplete/emoji_suggestion/emoji_suggestion.js', 'app/components/autocomplete/emoji_suggestion/index.js', 'app/components/autocomplete/index.js', 'app/components/autocomplete/slash_suggestion/index.js', 'app/components/autocomplete/slash_suggestion/slash_suggestion.js', 'app/components/autocomplete/slash_suggestion/slash_suggestion_item.js', 'app/components/autocomplete/special_mention_item.js', 'app/components/badge.js', 'app/components/channel_drawer/channel_drawer.js', 'app/components/channel_drawer/channels_list/channel_item/channel_item.js', 'app/components/channel_drawer/channels_list/channel_item/index.js', 'app/components/channel_drawer/channels_list/channels_list.js', 'app/components/channel_drawer/channels_list/index.js', 'app/components/channel_drawer/channels_list/list/index.js', 'app/components/channel_drawer/channels_list/list/list.js', 'app/components/channel_drawer/channels_list/switch_teams_button/index.js', 'app/components/channel_drawer/channels_list/switch_teams_button/switch_teams_button.js', 'app/components/channel_drawer/drawer_swipper/drawer_swiper.js', 'app/components/channel_drawer/drawer_swipper/index.js', 'app/components/channel_drawer/index.js', 'app/components/channel_drawer/teams_list/index.js', 'app/components/channel_drawer/teams_list/teams_list.js', 'app/components/channel_drawer/teams_list/teams_list_item/index.js', 'app/components/channel_drawer/teams_list/teams_list_item/teams_list_item.js', 'app/components/channel_icon.js', 'app/components/channel_link/channel_link.js', 'app/components/channel_link/index.js', 'app/components/channel_loader/channel_loader.js', 'app/components/channel_loader/index.js', 'app/components/drawer.js', 'app/components/emoji/emoji.js', 'app/components/emoji/index.js', 'app/components/error_text.js', 'app/components/file_attachment_list/file_attachment_icon.js', 'app/components/file_attachment_list/file_attachment_image.js', 'app/components/file_upload_preview/file_upload_item/file_upload_item.js', 'app/components/file_upload_preview/file_upload_item/index.js', 'app/components/file_upload_preview/file_upload_preview.js', 'app/components/file_upload_preview/file_upload_remove.js', 'app/components/file_upload_preview/file_upload_retry.js', 'app/components/file_upload_preview/index.js', 'app/components/flag_icon.js', 'app/components/formatted_date.js', 'app/components/formatted_text.js', 'app/components/formatted_time.js', 'app/components/layout/keyboard_layout/index.js', 'app/components/layout/keyboard_layout/keyboard_layout.js', 'app/components/loading.js', 'app/components/markdown/index.js', 'app/components/markdown/markdown.js', 'app/components/markdown/markdown_block_quote.js', 'app/components/markdown/markdown_code_block/index.js', 'app/components/markdown/markdown_code_block/markdown_code_block.js', 'app/components/markdown/markdown_image/index.js', 'app/components/markdown/markdown_image/markdown_image.js', 'app/components/markdown/markdown_link/index.js', 'app/components/markdown/markdown_link/markdown_link.js', 'app/components/markdown/markdown_list.js', 'app/components/markdown/markdown_list_item.js', 'app/components/markdown/markdown_table/index.js', 'app/components/markdown/markdown_table/markdown_table.js', 'app/components/markdown/markdown_table_cell/index.js', 'app/components/markdown/markdown_table_cell/markdown_table_cell.js', 'app/components/markdown/markdown_table_image/index.js', 'app/components/markdown/markdown_table_image/markdown_table_image.js', 'app/components/markdown/markdown_table_row/index.js', 'app/components/markdown/markdown_table_row/markdown_table_row.js', 'app/components/markdown/transform.js', 'app/components/offline_indicator/index.js', 'app/components/offline_indicator/offline_indicator.js', 'app/components/options_context/index.js', 'app/components/options_context/options_context.android.js', 'app/components/paper_plane.js', 'app/components/post/index.js', 'app/components/post/post.js', 'app/components/post_body/index.js', 'app/components/post_body/post_body.js', 'app/components/post_header/index.js', 'app/components/post_header/post_header.js', 'app/components/post_list/date_header/date_header.js', 'app/components/post_list/date_header/index.js', 'app/components/post_list/index.js', 'app/components/post_list/new_messages_divider.js', 'app/components/post_list/post_list.js', 'app/components/post_list/with_layout.js', 'app/components/post_list_retry.js', 'app/components/post_profile_picture/index.js', 'app/components/post_profile_picture/post_profile_picture.js', 'app/components/post_textbox/components/typing/index.js', 'app/components/post_textbox/components/typing/typing.js', 'app/components/post_textbox/index.js', 'app/components/post_textbox/post_textbox.js', 'app/components/profile_picture/index.js', 'app/components/profile_picture/profile_picture.js', 'app/components/progressive_image/index.js', 'app/components/progressive_image/progressive_image.js', 'app/components/reply_icon.js', 'app/components/retry_bar_indicator/index.js', 'app/components/retry_bar_indicator/retry_bar_indicator.js', 'app/components/root/index.js', 'app/components/root/root.js', 'app/components/safe_area_view/index.js', 'app/components/safe_area_view/safe_area_view.android.js', 'app/components/search_bar/index.js', 'app/components/search_bar/search_bar.android.js', 'app/components/settings_drawer/drawer_item.js', 'app/components/settings_drawer/index.js', 'app/components/settings_drawer/settings_drawer.js', 'app/components/settings_drawer/status_label/index.js', 'app/components/settings_drawer/status_label/status_label.js', 'app/components/settings_drawer/user_info/index.js', 'app/components/settings_drawer/user_info/user_info.js', 'app/components/start/empty_toolbar.js', 'app/components/status_bar/index.js', 'app/components/status_bar/status_bar.js', 'app/components/swiper.js', 'app/components/team_icon/index.js', 'app/components/team_icon/team_icon.js', 'app/components/user_status/index.js', 'app/components/user_status/user_status.js', 'app/components/vector_icon.js', 'app/constants/autocomplete.js', 'app/constants/custom_prop_types.js', 'app/constants/device.js', 'app/constants/index.js', 'app/constants/list.js', 'app/constants/navigation.js', 'app/constants/permissions.js', 'app/constants/post_textbox.js', 'app/constants/view.js', 'app/i18n/index.js', 'app/initial_state.js', 'app/mattermost.js', 'app/mattermost_bucket/index.js', 'app/mattermost_managed/index.js', 'app/mattermost_managed/mattermost-managed.android.js', 'app/push_notifications/index.js', 'app/push_notifications/push_notifications.android.js', 'app/reducers/app/build.js', 'app/reducers/app/index.js', 'app/reducers/app/version.js', 'app/reducers/device/connection.js', 'app/reducers/device/dimension.js', 'app/reducers/device/index.js', 'app/reducers/device/is_tablet.js', 'app/reducers/device/orientation.js', 'app/reducers/device/status_bar.js', 'app/reducers/device/websocket.js', 'app/reducers/index.js', 'app/reducers/navigation/index.js', 'app/reducers/views/announcement.js', 'app/reducers/views/channel.js', 'app/reducers/views/client_upgrade.js', 'app/reducers/views/emoji.js', 'app/reducers/views/extension.js', 'app/reducers/views/i18n.js', 'app/reducers/views/index.js', 'app/reducers/views/login.js', 'app/reducers/views/recent_emojis.js', 'app/reducers/views/root.js', 'app/reducers/views/search.js', 'app/reducers/views/select_server.js', 'app/reducers/views/team.js', 'app/reducers/views/thread.js', 'app/screens/channel/channel.js', 'app/screens/channel/channel_nav_bar/channel_drawer_button.js', 'app/screens/channel/channel_nav_bar/channel_nav_bar.js', 'app/screens/channel/channel_nav_bar/channel_search_button/channel_search_button.js', 'app/screens/channel/channel_nav_bar/channel_search_button/index.js', 'app/screens/channel/channel_nav_bar/channel_title/channel_title.js', 'app/screens/channel/channel_nav_bar/channel_title/index.js', 'app/screens/channel/channel_nav_bar/index.js', 'app/screens/channel/channel_nav_bar/settings_drawer_button.js', 'app/screens/channel/channel_post_list/channel_post_list.js', 'app/screens/channel/channel_post_list/index.js', 'app/screens/channel/index.js', 'app/screens/entry/entry.js', 'app/screens/entry/index.js', 'app/screens/index.js', 'app/screens/select_server/index.js', 'app/screens/select_server/select_server.js', 'app/selectors/autocomplete.js', 'app/selectors/channel.js', 'app/selectors/client_upgrade.js', 'app/selectors/device.js', 'app/selectors/file.js', 'app/selectors/i18n.js', 'app/selectors/post_list.js', 'app/selectors/views.js', 'app/store/index.js', 'app/store/middleware.js', 'app/store/utils.js', 'app/styles/index.js', 'app/telemetry/index.js', 'app/telemetry/telemetry.android.js', 'app/utils/avoid_native_bridge.js', 'app/utils/channels.js', 'app/utils/client_upgrade.js', 'app/utils/emojis.js', 'app/utils/file.js', 'app/utils/general.js', 'app/utils/image_cache_manager.js', 'app/utils/latinise.js', 'app/utils/list_view.js', 'app/utils/markdown.js', 'app/utils/network.js', 'app/utils/push_notifications.js', 'app/utils/segment.js', 'app/utils/sentry/index.js', 'app/utils/sentry/middleware.js', 'app/utils/tap.js', 'app/utils/theme.js', 'app/utils/time_tracker.js', 'app/utils/tooltip.js', 'app/utils/url.js', 'binaryToBase64', 'convertRequestBody', 'createAnimatedComponent', 'createReactNativeComponentClass', 'createStrictShapeTypeChecker', 'deepDiffer', 'deepFreezeAndThrowOnMutationInDev', 'defineLazyObjectProperty', 'deprecatedPropType', 'dismissKeyboard', 'dist/assets/config.json', 'dist/assets/i18n/en.json', 'dist/assets/images/icons/audio.png', 'dist/assets/images/icons/code.png', 'dist/assets/images/icons/excel.png', 'dist/assets/images/icons/generic.png', 'dist/assets/images/icons/image.png', 'dist/assets/images/icons/patch.png', 'dist/assets/images/icons/pdf.png', 'dist/assets/images/icons/ppt.png', 'dist/assets/images/icons/video.png', 'dist/assets/images/icons/webhook.jpg', 'dist/assets/images/icons/word.png', 'dist/assets/images/profile.jpg', 'dist/assets/images/status/away.png', 'dist/assets/images/status/dnd.png', 'dist/assets/images/status/offline.png', 'dist/assets/images/status/online.png', 'dist/assets/images/thumb.png', 'ensureComponentIsNative', 'ensurePositiveDelayProps', 'fetch', 'flattenStyle', 'getDevServer', 'guid', 'index.js', 'infoLog', 'insetsDiffer', 'logError', 'matricesDiffer', 'merge', 'mergeFast', 'mergeHelpers', 'mergeInto', 'node_modules/analytics-react-native/lib/helpers/assert.js', 'node_modules/analytics-react-native/lib/helpers/fetch-retry.js', 'node_modules/analytics-react-native/lib/helpers/parse-response.js', 'node_modules/analytics-react-native/lib/helpers/uid.js', 'node_modules/analytics-react-native/lib/helpers/validate.js', 'node_modules/analytics-react-native/lib/index.js', 'node_modules/art/core/class.js', 'node_modules/art/core/color.js', 'node_modules/art/core/path.js', 'node_modules/art/core/transform.js', 'node_modules/art/metrics/path.js', 'node_modules/base-64/base64.js', 'node_modules/base64-js/index.js', 'node_modules/clamp/index.js', 'node_modules/color-convert/conversions.js', 'node_modules/color-convert/index.js', 'node_modules/color-convert/route.js', 'node_modules/color-name/index.js', 'node_modules/color-string/index.js', 'node_modules/color/index.js', 'node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js', 'node_modules/commonmark/lib/blocks.js', 'node_modules/commonmark/lib/common.js', 'node_modules/commonmark/lib/from-code-point.js', 'node_modules/commonmark/lib/index.js', 'node_modules/commonmark/lib/inlines.js', 'node_modules/commonmark/lib/node.js', 'node_modules/commonmark/lib/normalize-reference.js', 'node_modules/commonmark/lib/render/html.js', 'node_modules/commonmark/lib/render/renderer.js', 'node_modules/commonmark/lib/render/xml.js', 'node_modules/create-react-class/factory.js', 'node_modules/create-react-class/index.js', 'node_modules/entities/index.js', 'node_modules/entities/lib/decode.js', 'node_modules/entities/lib/decode_codepoint.js', 'node_modules/entities/lib/encode.js', 'node_modules/entities/maps/decode.json', 'node_modules/entities/maps/entities.json', 'node_modules/entities/maps/legacy.json', 'node_modules/entities/maps/xml.json', 'node_modules/event-target-shim/lib/commons.js', 'node_modules/event-target-shim/lib/custom-event-target.js', 'node_modules/event-target-shim/lib/event-target.js', 'node_modules/event-target-shim/lib/event-wrapper.js', 'node_modules/eventemitter3/index.js', 'node_modules/fbjs/lib/ExecutionEnvironment.js', 'node_modules/fbjs/lib/Promise.native.js', 'node_modules/fbjs/lib/TouchEventUtils.js', 'node_modules/fbjs/lib/emptyFunction.js', 'node_modules/fbjs/lib/emptyObject.js', 'node_modules/fbjs/lib/invariant.js', 'node_modules/fbjs/lib/isNode.js', 'node_modules/fbjs/lib/keyMirror.js', 'node_modules/fbjs/lib/nullthrows.js', 'node_modules/fbjs/lib/performance.js', 'node_modules/fbjs/lib/performanceNow.js', 'node_modules/fbjs/lib/shallowEqual.js', 'node_modules/fbjs/lib/warning.js', 'node_modules/form-data/lib/browser.js', 'node_modules/fuse.js/dist/fuse.js', 'node_modules/get-params/index.js', 'node_modules/global/window.js', 'node_modules/hoist-non-react-statics/index.js', 'node_modules/intl-format-cache/index.js', 'node_modules/intl-format-cache/lib/es5.js', 'node_modules/intl-format-cache/lib/memoizer.js', 'node_modules/intl-messageformat-parser/index.js', 'node_modules/intl-messageformat-parser/lib/parser.js', 'node_modules/intl-messageformat/index.js', 'node_modules/intl-messageformat/lib/compiler.js', 'node_modules/intl-messageformat/lib/core.js', 'node_modules/intl-messageformat/lib/en.js', 'node_modules/intl-messageformat/lib/es5.js', 'node_modules/intl-messageformat/lib/locales.js', 'node_modules/intl-messageformat/lib/main.js', 'node_modules/intl-messageformat/lib/utils.js', 'node_modules/intl-relativeformat/index.js', 'node_modules/intl-relativeformat/lib/core.js', 'node_modules/intl-relativeformat/lib/diff.js', 'node_modules/intl-relativeformat/lib/en.js', 'node_modules/intl-relativeformat/lib/es5.js', 'node_modules/intl-relativeformat/lib/locales.js', 'node_modules/intl-relativeformat/lib/main.js', 'node_modules/intl/index.js', 'node_modules/intl/lib/core.js', 'node_modules/intl/locale-data/complete.js', 'node_modules/invariant/browser.js', 'node_modules/jail-monkey/index.js', 'node_modules/jsan/index.js', 'node_modules/jsan/lib/cycle.js', 'node_modules/jsan/lib/index.js', 'node_modules/jsan/lib/path-getter.js', 'node_modules/jsan/lib/utils.js', 'node_modules/json-stringify-safe/stringify.js', 'node_modules/keymirror/index.js', 'node_modules/linked-list/_source/linked-list.js', 'node_modules/linked-list/index.js', 'node_modules/lodash.assign/index.js', 'node_modules/lodash.forin/index.js', 'node_modules/lodash.get/index.js', 'node_modules/lodash.isempty/index.js', 'node_modules/lodash.isplainobject/index.js', 'node_modules/lodash.pickby/index.js', 'node_modules/lodash.set/index.js', 'node_modules/lodash.unset/index.js', 'node_modules/lodash/_DataView.js', 'node_modules/lodash/_Hash.js', 'node_modules/lodash/_ListCache.js', 'node_modules/lodash/_Map.js', 'node_modules/lodash/_MapCache.js', 'node_modules/lodash/_Promise.js', 'node_modules/lodash/_Set.js', 'node_modules/lodash/_SetCache.js', 'node_modules/lodash/_Stack.js', 'node_modules/lodash/_Symbol.js', 'node_modules/lodash/_Uint8Array.js', 'node_modules/lodash/_WeakMap.js', 'node_modules/lodash/_apply.js', 'node_modules/lodash/_arrayEach.js', 'node_modules/lodash/_arrayFilter.js', 'node_modules/lodash/_arrayIncludes.js', 'node_modules/lodash/_arrayIncludesWith.js', 'node_modules/lodash/_arrayLikeKeys.js', 'node_modules/lodash/_arrayMap.js', 'node_modules/lodash/_arrayPush.js', 'node_modules/lodash/_arraySome.js', 'node_modules/lodash/_assignValue.js', 'node_modules/lodash/_assocIndexOf.js', 'node_modules/lodash/_baseAssign.js', 'node_modules/lodash/_baseAssignIn.js', 'node_modules/lodash/_baseAssignValue.js', 'node_modules/lodash/_baseClone.js', 'node_modules/lodash/_baseCreate.js', 'node_modules/lodash/_baseDifference.js', 'node_modules/lodash/_baseFindIndex.js', 'node_modules/lodash/_baseFlatten.js', 'node_modules/lodash/_baseFor.js', 'node_modules/lodash/_baseForOwn.js', 'node_modules/lodash/_baseGet.js', 'node_modules/lodash/_baseGetAllKeys.js', 'node_modules/lodash/_baseGetTag.js', 'node_modules/lodash/_baseHasIn.js', 'node_modules/lodash/_baseIndexOf.js', 'node_modules/lodash/_baseIsArguments.js', 'node_modules/lodash/_baseIsEqual.js', 'node_modules/lodash/_baseIsEqualDeep.js', 'node_modules/lodash/_baseIsMap.js', 'node_modules/lodash/_baseIsMatch.js', 'node_modules/lodash/_baseIsNaN.js', 'node_modules/lodash/_baseIsNative.js', 'node_modules/lodash/_baseIsSet.js', 'node_modules/lodash/_baseIsTypedArray.js', 'node_modules/lodash/_baseIteratee.js', 'node_modules/lodash/_baseKeys.js', 'node_modules/lodash/_baseKeysIn.js', 'node_modules/lodash/_baseMatches.js', 'node_modules/lodash/_baseMatchesProperty.js', 'node_modules/lodash/_basePick.js', 'node_modules/lodash/_basePickBy.js', 'node_modules/lodash/_baseProperty.js', 'node_modules/lodash/_basePropertyDeep.js', 'node_modules/lodash/_baseRest.js', 'node_modules/lodash/_baseSet.js', 'node_modules/lodash/_baseSetToString.js', 'node_modules/lodash/_baseSlice.js', 'node_modules/lodash/_baseTimes.js', 'node_modules/lodash/_baseToString.js', 'node_modules/lodash/_baseUnary.js', 'node_modules/lodash/_baseUniq.js', 'node_modules/lodash/_baseUnset.js', 'node_modules/lodash/_cacheHas.js', 'node_modules/lodash/_castPath.js', 'node_modules/lodash/_cloneArrayBuffer.js', 'node_modules/lodash/_cloneBuffer.js', 'node_modules/lodash/_cloneDataView.js', 'node_modules/lodash/_cloneRegExp.js', 'node_modules/lodash/_cloneSymbol.js', 'node_modules/lodash/_cloneTypedArray.js', 'node_modules/lodash/_copyArray.js', 'node_modules/lodash/_copyObject.js', 'node_modules/lodash/_copySymbols.js', 'node_modules/lodash/_copySymbolsIn.js', 'node_modules/lodash/_coreJsData.js', 'node_modules/lodash/_createAssigner.js', 'node_modules/lodash/_createBaseFor.js', 'node_modules/lodash/_createFind.js', 'node_modules/lodash/_createSet.js', 'node_modules/lodash/_customOmitClone.js', 'node_modules/lodash/_defineProperty.js', 'node_modules/lodash/_equalArrays.js', 'node_modules/lodash/_equalByTag.js', 'node_modules/lodash/_equalObjects.js', 'node_modules/lodash/_flatRest.js', 'node_modules/lodash/_freeGlobal.js', 'node_modules/lodash/_getAllKeys.js', 'node_modules/lodash/_getAllKeysIn.js', 'node_modules/lodash/_getMapData.js', 'node_modules/lodash/_getMatchData.js', 'node_modules/lodash/_getNative.js', 'node_modules/lodash/_getPrototype.js', 'node_modules/lodash/_getRawTag.js', 'node_modules/lodash/_getSymbols.js', 'node_modules/lodash/_getSymbolsIn.js', 'node_modules/lodash/_getTag.js', 'node_modules/lodash/_getValue.js', 'node_modules/lodash/_hasPath.js', 'node_modules/lodash/_hashClear.js', 'node_modules/lodash/_hashDelete.js', 'node_modules/lodash/_hashGet.js', 'node_modules/lodash/_hashHas.js', 'node_modules/lodash/_hashSet.js', 'node_modules/lodash/_initCloneArray.js', 'node_modules/lodash/_initCloneByTag.js', 'node_modules/lodash/_initCloneObject.js', 'node_modules/lodash/_isFlattenable.js', 'node_modules/lodash/_isIndex.js', 'node_modules/lodash/_isIterateeCall.js', 'node_modules/lodash/_isKey.js', 'node_modules/lodash/_isKeyable.js', 'node_modules/lodash/_isMasked.js', 'node_modules/lodash/_isPrototype.js', 'node_modules/lodash/_isStrictComparable.js', 'node_modules/lodash/_listCacheClear.js', 'node_modules/lodash/_listCacheDelete.js', 'node_modules/lodash/_listCacheGet.js', 'node_modules/lodash/_listCacheHas.js', 'node_modules/lodash/_listCacheSet.js', 'node_modules/lodash/_mapCacheClear.js', 'node_modules/lodash/_mapCacheDelete.js', 'node_modules/lodash/_mapCacheGet.js', 'node_modules/lodash/_mapCacheHas.js', 'node_modules/lodash/_mapCacheSet.js', 'node_modules/lodash/_mapToArray.js', 'node_modules/lodash/_matchesStrictComparable.js', 'node_modules/lodash/_memoizeCapped.js', 'node_modules/lodash/_nativeCreate.js', 'node_modules/lodash/_nativeKeys.js', 'node_modules/lodash/_nativeKeysIn.js', 'node_modules/lodash/_nodeUtil.js', 'node_modules/lodash/_objectToString.js', 'node_modules/lodash/_overArg.js', 'node_modules/lodash/_overRest.js', 'node_modules/lodash/_parent.js', 'node_modules/lodash/_root.js', 'node_modules/lodash/_setCacheAdd.js', 'node_modules/lodash/_setCacheHas.js', 'node_modules/lodash/_setToArray.js', 'node_modules/lodash/_setToString.js', 'node_modules/lodash/_shortOut.js', 'node_modules/lodash/_stackClear.js', 'node_modules/lodash/_stackDelete.js', 'node_modules/lodash/_stackGet.js', 'node_modules/lodash/_stackHas.js', 'node_modules/lodash/_stackSet.js', 'node_modules/lodash/_strictIndexOf.js', 'node_modules/lodash/_stringToPath.js', 'node_modules/lodash/_toKey.js', 'node_modules/lodash/_toSource.js', 'node_modules/lodash/assign.js', 'node_modules/lodash/constant.js', 'node_modules/lodash/difference.js', 'node_modules/lodash/eq.js', 'node_modules/lodash/find.js', 'node_modules/lodash/findIndex.js', 'node_modules/lodash/flatten.js', 'node_modules/lodash/get.js', 'node_modules/lodash/hasIn.js', 'node_modules/lodash/identity.js', 'node_modules/lodash/isArguments.js', 'node_modules/lodash/isArray.js', 'node_modules/lodash/isArrayLike.js', 'node_modules/lodash/isArrayLikeObject.js', 'node_modules/lodash/isBuffer.js', 'node_modules/lodash/isEqual.js', 'node_modules/lodash/isFunction.js', 'node_modules/lodash/isLength.js', 'node_modules/lodash/isMap.js', 'node_modules/lodash/isObject.js', 'node_modules/lodash/isObjectLike.js', 'node_modules/lodash/isPlainObject.js', 'node_modules/lodash/isSet.js', 'node_modules/lodash/isString.js', 'node_modules/lodash/isSymbol.js', 'node_modules/lodash/isTypedArray.js', 'node_modules/lodash/keys.js', 'node_modules/lodash/keysIn.js', 'node_modules/lodash/last.js', 'node_modules/lodash/lodash.js', 'node_modules/lodash/mapValues.js', 'node_modules/lodash/memoize.js', 'node_modules/lodash/noop.js', 'node_modules/lodash/omit.js', 'node_modules/lodash/pick.js', 'node_modules/lodash/property.js', 'node_modules/lodash/stubArray.js', 'node_modules/lodash/stubFalse.js', 'node_modules/lodash/toFinite.js', 'node_modules/lodash/toInteger.js', 'node_modules/lodash/toNumber.js', 'node_modules/lodash/toString.js', 'node_modules/lodash/union.js', 'node_modules/mattermost-redux/action_types/admin.js', 'node_modules/mattermost-redux/action_types/alerts.js', 'node_modules/mattermost-redux/action_types/channels.js', 'node_modules/mattermost-redux/action_types/emojis.js', 'node_modules/mattermost-redux/action_types/errors.js', 'node_modules/mattermost-redux/action_types/files.js', 'node_modules/mattermost-redux/action_types/general.js', 'node_modules/mattermost-redux/action_types/index.js', 'node_modules/mattermost-redux/action_types/integrations.js', 'node_modules/mattermost-redux/action_types/jobs.js', 'node_modules/mattermost-redux/action_types/posts.js', 'node_modules/mattermost-redux/action_types/preferences.js', 'node_modules/mattermost-redux/action_types/roles.js', 'node_modules/mattermost-redux/action_types/search.js', 'node_modules/mattermost-redux/action_types/teams.js', 'node_modules/mattermost-redux/action_types/users.js', 'node_modules/mattermost-redux/actions/channels.js', 'node_modules/mattermost-redux/actions/emojis.js', 'node_modules/mattermost-redux/actions/errors.js', 'node_modules/mattermost-redux/actions/files.js', 'node_modules/mattermost-redux/actions/general.js', 'node_modules/mattermost-redux/actions/helpers.js', 'node_modules/mattermost-redux/actions/integrations.js', 'node_modules/mattermost-redux/actions/posts.js', 'node_modules/mattermost-redux/actions/preferences.js', 'node_modules/mattermost-redux/actions/roles.js', 'node_modules/mattermost-redux/actions/search.js', 'node_modules/mattermost-redux/actions/teams.js', 'node_modules/mattermost-redux/actions/users.js', 'node_modules/mattermost-redux/actions/websocket.js', 'node_modules/mattermost-redux/client/client.js', 'node_modules/mattermost-redux/client/client4.js', 'node_modules/mattermost-redux/client/fetch_etag.js', 'node_modules/mattermost-redux/client/index.js', 'node_modules/mattermost-redux/client/websocket_client.js', 'node_modules/mattermost-redux/constants/alerts.js', 'node_modules/mattermost-redux/constants/emoji.js', 'node_modules/mattermost-redux/constants/files.js', 'node_modules/mattermost-redux/constants/general.js', 'node_modules/mattermost-redux/constants/index.js', 'node_modules/mattermost-redux/constants/permissions.js', 'node_modules/mattermost-redux/constants/plugins.js', 'node_modules/mattermost-redux/constants/posts.js', 'node_modules/mattermost-redux/constants/preferences.js', 'node_modules/mattermost-redux/constants/request_status.js', 'node_modules/mattermost-redux/constants/stats.js', 'node_modules/mattermost-redux/constants/teams.js', 'node_modules/mattermost-redux/constants/websocket.js', 'node_modules/mattermost-redux/node_modules/redux-batched-actions/lib/index.js', 'node_modules/mattermost-redux/node_modules/redux-persist/lib/constants.js', 'node_modules/mattermost-redux/node_modules/redux/lib/applyMiddleware.js', 'node_modules/mattermost-redux/node_modules/redux/lib/bindActionCreators.js', 'node_modules/mattermost-redux/node_modules/redux/lib/combineReducers.js', 'node_modules/mattermost-redux/node_modules/redux/lib/compose.js', 'node_modules/mattermost-redux/node_modules/redux/lib/createStore.js', 'node_modules/mattermost-redux/node_modules/redux/lib/index.js', 'node_modules/mattermost-redux/node_modules/redux/lib/utils/warning.js', 'node_modules/mattermost-redux/reducers/entities/admin.js', 'node_modules/mattermost-redux/reducers/entities/alerts.js', 'node_modules/mattermost-redux/reducers/entities/channels.js', 'node_modules/mattermost-redux/reducers/entities/emojis.js', 'node_modules/mattermost-redux/reducers/entities/files.js', 'node_modules/mattermost-redux/reducers/entities/general.js', 'node_modules/mattermost-redux/reducers/entities/index.js', 'node_modules/mattermost-redux/reducers/entities/integrations.js', 'node_modules/mattermost-redux/reducers/entities/jobs.js', 'node_modules/mattermost-redux/reducers/entities/posts.js', 'node_modules/mattermost-redux/reducers/entities/preferences.js', 'node_modules/mattermost-redux/reducers/entities/roles.js', 'node_modules/mattermost-redux/reducers/entities/search.js', 'node_modules/mattermost-redux/reducers/entities/teams.js', 'node_modules/mattermost-redux/reducers/entities/typing.js', 'node_modules/mattermost-redux/reducers/entities/users.js', 'node_modules/mattermost-redux/reducers/errors/index.js', 'node_modules/mattermost-redux/reducers/index.js', 'node_modules/mattermost-redux/reducers/requests/admin.js', 'node_modules/mattermost-redux/reducers/requests/channels.js', 'node_modules/mattermost-redux/reducers/requests/emojis.js', 'node_modules/mattermost-redux/reducers/requests/files.js', 'node_modules/mattermost-redux/reducers/requests/general.js', 'node_modules/mattermost-redux/reducers/requests/helpers.js', 'node_modules/mattermost-redux/reducers/requests/index.js', 'node_modules/mattermost-redux/reducers/requests/integrations.js', 'node_modules/mattermost-redux/reducers/requests/jobs.js', 'node_modules/mattermost-redux/reducers/requests/posts.js', 'node_modules/mattermost-redux/reducers/requests/preferences.js', 'node_modules/mattermost-redux/reducers/requests/roles.js', 'node_modules/mattermost-redux/reducers/requests/search.js', 'node_modules/mattermost-redux/reducers/requests/teams.js', 'node_modules/mattermost-redux/reducers/requests/users.js', 'node_modules/mattermost-redux/selectors/entities/channels.js', 'node_modules/mattermost-redux/selectors/entities/common.js', 'node_modules/mattermost-redux/selectors/entities/emojis.js', 'node_modules/mattermost-redux/selectors/entities/general.js', 'node_modules/mattermost-redux/selectors/entities/i18n.js', 'node_modules/mattermost-redux/selectors/entities/integrations.js', 'node_modules/mattermost-redux/selectors/entities/posts.js', 'node_modules/mattermost-redux/selectors/entities/preferences.js', 'node_modules/mattermost-redux/selectors/entities/roles.js', 'node_modules/mattermost-redux/selectors/entities/teams.js', 'node_modules/mattermost-redux/selectors/entities/typing.js', 'node_modules/mattermost-redux/selectors/entities/users.js', 'node_modules/mattermost-redux/store/configureStore.dev.js', 'node_modules/mattermost-redux/store/helpers.js', 'node_modules/mattermost-redux/store/index.js', 'node_modules/mattermost-redux/store/initial_state.js', 'node_modules/mattermost-redux/utils/channel_utils.js', 'node_modules/mattermost-redux/utils/deep_freeze.js', 'node_modules/mattermost-redux/utils/delayed_action.js', 'node_modules/mattermost-redux/utils/emoji_utils.js', 'node_modules/mattermost-redux/utils/event_emitter.js', 'node_modules/mattermost-redux/utils/file_utils.js', 'node_modules/mattermost-redux/utils/helpers.js', 'node_modules/mattermost-redux/utils/i18n_utils.js', 'node_modules/mattermost-redux/utils/key_mirror.js', 'node_modules/mattermost-redux/utils/post_utils.js', 'node_modules/mattermost-redux/utils/preference_utils.js', 'node_modules/mattermost-redux/utils/team_utils.js', 'node_modules/mattermost-redux/utils/theme_utils.js', 'node_modules/mattermost-redux/utils/user_utils.js', 'node_modules/mdurl/decode.js', 'node_modules/mdurl/encode.js', 'node_modules/metro/src/lib/bundle-modules/HMRClient.js', 'node_modules/metro/src/lib/bundle-modules/MetroClient.js', 'node_modules/mime-db/db.json', 'node_modules/mime-db/index.js', 'node_modules/object-assign/index.js', 'node_modules/pascalcase/index.js', 'node_modules/path-to-regexp/index.js', 'node_modules/path-to-regexp/node_modules/isarray/index.js', 'node_modules/pegjs/lib/compiler/asts.js', 'node_modules/pegjs/lib/compiler/index.js', 'node_modules/pegjs/lib/compiler/js.js', 'node_modules/pegjs/lib/compiler/opcodes.js', 'node_modules/pegjs/lib/compiler/passes/generate-bytecode.js', 'node_modules/pegjs/lib/compiler/passes/generate-js.js', 'node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js', 'node_modules/pegjs/lib/compiler/passes/report-duplicate-labels.js', 'node_modules/pegjs/lib/compiler/passes/report-duplicate-rules.js', 'node_modules/pegjs/lib/compiler/passes/report-infinite-recursion.js', 'node_modules/pegjs/lib/compiler/passes/report-infinite-repetition.js', 'node_modules/pegjs/lib/compiler/passes/report-undefined-rules.js', 'node_modules/pegjs/lib/compiler/visitor.js', 'node_modules/pegjs/lib/grammar-error.js', 'node_modules/pegjs/lib/parser.js', 'node_modules/pegjs/lib/peg.js', 'node_modules/pegjs/lib/utils/arrays.js', 'node_modules/pegjs/lib/utils/classes.js', 'node_modules/pegjs/lib/utils/objects.js', 'node_modules/promise/setimmediate/core.js', 'node_modules/promise/setimmediate/done.js', 'node_modules/promise/setimmediate/es6-extensions.js', 'node_modules/promise/setimmediate/rejection-tracking.js', 'node_modules/prop-types/checkPropTypes.js', 'node_modules/prop-types/factoryWithTypeCheckers.js', 'node_modules/prop-types/index.js', 'node_modules/prop-types/lib/ReactPropTypesSecret.js', 'node_modules/querystring/decode.js', 'node_modules/querystring/encode.js', 'node_modules/querystring/index.js', 'node_modules/querystringify/index.js', 'node_modules/raven-js/src/configError.js', 'node_modules/raven-js/src/console.js', 'node_modules/raven-js/src/raven.js', 'node_modules/raven-js/src/singleton.js', 'node_modules/raven-js/src/utils.js', 'node_modules/raven-js/vendor/TraceKit/tracekit.js', 'node_modules/raven-js/vendor/json-stringify-safe/stringify.js', 'node_modules/raven-js/vendor/md5/md5.js', 'node_modules/react-deep-force-update/lib/index.js', 'node_modules/react-devtools-core/build/backend.js', 'node_modules/react-intl/lib/index.js', 'node_modules/react-intl/locale-data/en.js', 'node_modules/react-intl/locale-data/index.js', 'node_modules/react-native-bottom-sheet/index.js', 'node_modules/react-native-button/Button.js', 'node_modules/react-native-button/coalesceNonElementChildren.js', 'node_modules/react-native-circular-progress/index.js', 'node_modules/react-native-circular-progress/src/AnimatedCircularProgress.js', 'node_modules/react-native-circular-progress/src/CircularProgress.js', 'node_modules/react-native-device-info/deviceinfo.js', 'node_modules/react-native-document-picker/index.js', 'node_modules/react-native-drawer/index.js', 'node_modules/react-native-drawer/tweener.js', 'node_modules/react-native-fast-image/index.js', 'node_modules/react-native-fetch-blob/android.js', 'node_modules/react-native-fetch-blob/class/RNFetchBlobFile.js', 'node_modules/react-native-fetch-blob/class/RNFetchBlobReadStream.js', 'node_modules/react-native-fetch-blob/class/RNFetchBlobSession.js', 'node_modules/react-native-fetch-blob/class/RNFetchBlobWriteStream.js', 'node_modules/react-native-fetch-blob/class/StatefulPromise.js', 'node_modules/react-native-fetch-blob/fs.js', 'node_modules/react-native-fetch-blob/index.js', 'node_modules/react-native-fetch-blob/ios.js', 'node_modules/react-native-fetch-blob/json-stream.js', 'node_modules/react-native-fetch-blob/lib/oboe-browser.min.js', 'node_modules/react-native-fetch-blob/polyfill/Blob.js', 'node_modules/react-native-fetch-blob/polyfill/Event.js', 'node_modules/react-native-fetch-blob/polyfill/EventTarget.js', 'node_modules/react-native-fetch-blob/polyfill/Fetch.js', 'node_modules/react-native-fetch-blob/polyfill/File.js', 'node_modules/react-native-fetch-blob/polyfill/FileReader.js', 'node_modules/react-native-fetch-blob/polyfill/ProgressEvent.js', 'node_modules/react-native-fetch-blob/polyfill/XMLHttpRequest.js', 'node_modules/react-native-fetch-blob/polyfill/XMLHttpRequestEventTarget.js', 'node_modules/react-native-fetch-blob/polyfill/index.js', 'node_modules/react-native-fetch-blob/utils/log.js', 'node_modules/react-native-fetch-blob/utils/unicode.js', 'node_modules/react-native-fetch-blob/utils/uri.js', 'node_modules/react-native-fetch-blob/utils/uuid.js', 'node_modules/react-native-image-picker/index.js', 'node_modules/react-native-keychain/index.js', 'node_modules/react-native-linear-gradient/index.android.js', 'node_modules/react-native-local-auth/LocalAuth.android.js', 'node_modules/react-native-local-auth/data/errors.js', 'node_modules/react-native-local-auth/error.js', 'node_modules/react-native-local-auth/index.js', 'node_modules/react-native-navigation/src/NativeEventsReceiver.js', 'node_modules/react-native-navigation/src/Navigation.js', 'node_modules/react-native-navigation/src/PropRegistry.js', 'node_modules/react-native-navigation/src/Screen.js', 'node_modules/react-native-navigation/src/ScreenVisibilityListener.js', 'node_modules/react-native-navigation/src/deprecated/indexDeprecated.android.js', 'node_modules/react-native-navigation/src/deprecated/platformSpecificDeprecated.android.js', 'node_modules/react-native-navigation/src/index.js', 'node_modules/react-native-navigation/src/platformSpecific.android.js', 'node_modules/react-native-navigation/src/views/sharedElementTransition.android.js', 'node_modules/react-native-notifications/index.android.js', 'node_modules/react-native-notifications/notification.android.js', 'node_modules/react-native-permissions/index.js', 'node_modules/react-native-permissions/lib/permissions.android.js', 'node_modules/react-native-safe-area-view/index.js', 'node_modules/react-native-safe-area-view/withOrientation.js', 'node_modules/react-native-sentry/index.js', 'node_modules/react-native-sentry/lib/NativeClient.js', 'node_modules/react-native-sentry/lib/RavenClient.js', 'node_modules/react-native-sentry/lib/Sentry.js', 'node_modules/react-native-svg/elements/Circle.js', 'node_modules/react-native-svg/elements/ClipPath.js', 'node_modules/react-native-svg/elements/Defs.js', 'node_modules/react-native-svg/elements/Ellipse.js', 'node_modules/react-native-svg/elements/G.js', 'node_modules/react-native-svg/elements/Image.js', 'node_modules/react-native-svg/elements/Line.js', 'node_modules/react-native-svg/elements/LinearGradient.js', 'node_modules/react-native-svg/elements/Path.js', 'node_modules/react-native-svg/elements/Polygon.js', 'node_modules/react-native-svg/elements/Polyline.js', 'node_modules/react-native-svg/elements/RadialGradient.js', 'node_modules/react-native-svg/elements/Rect.js', 'node_modules/react-native-svg/elements/Shape.js', 'node_modules/react-native-svg/elements/Stop.js', 'node_modules/react-native-svg/elements/Svg.js', 'node_modules/react-native-svg/elements/Symbol.js', 'node_modules/react-native-svg/elements/TSpan.js', 'node_modules/react-native-svg/elements/Text.js', 'node_modules/react-native-svg/elements/TextPath.js', 'node_modules/react-native-svg/elements/Use.js', 'node_modules/react-native-svg/index.js', 'node_modules/react-native-svg/lib/Matrix2D.js', 'node_modules/react-native-svg/lib/PATTERN_UNITS.js', 'node_modules/react-native-svg/lib/SvgTouchableMixin.js', 'node_modules/react-native-svg/lib/attributes.js', 'node_modules/react-native-svg/lib/extract/extractBrush.js', 'node_modules/react-native-svg/lib/extract/extractClipPath.js', 'node_modules/react-native-svg/lib/extract/extractFill.js', 'node_modules/react-native-svg/lib/extract/extractGradient.js', 'node_modules/react-native-svg/lib/extract/extractLengthList.js', 'node_modules/react-native-svg/lib/extract/extractOpacity.js', 'node_modules/react-native-svg/lib/extract/extractPolyPoints.js', 'node_modules/react-native-svg/lib/extract/extractProps.js', 'node_modules/react-native-svg/lib/extract/extractResponder.js', 'node_modules/react-native-svg/lib/extract/extractStroke.js', 'node_modules/react-native-svg/lib/extract/extractText.js', 'node_modules/react-native-svg/lib/extract/extractTransform.js', 'node_modules/react-native-svg/lib/extract/extractViewBox.js', 'node_modules/react-native-svg/lib/extract/patternReg.js', 'node_modules/react-native-svg/lib/percentToFloat.js', 'node_modules/react-native-svg/lib/props.js', 'node_modules/react-native-vector-icons/FontAwesome.js', 'node_modules/react-native-vector-icons/Foundation.js', 'node_modules/react-native-vector-icons/Ionicons.js', 'node_modules/react-native-vector-icons/MaterialIcons.js', 'node_modules/react-native-vector-icons/glyphmaps/FontAwesome.json', 'node_modules/react-native-vector-icons/glyphmaps/Foundation.json', 'node_modules/react-native-vector-icons/glyphmaps/Ionicons.json', 'node_modules/react-native-vector-icons/glyphmaps/MaterialIcons.json', 'node_modules/react-native-vector-icons/lib/create-icon-set.js', 'node_modules/react-native-vector-icons/lib/icon-button.js', 'node_modules/react-native-vector-icons/lib/react-native.js', 'node_modules/react-native-vector-icons/lib/tab-bar-item-ios.js', 'node_modules/react-native-vector-icons/lib/toolbar-android.js', 'node_modules/react-native-video/Video.js', 'node_modules/react-native-video/VideoResizeMode.js', 'node_modules/react-native/local-cli/bundle/assetPathUtils.js', 'node_modules/react-native/node_modules/regenerator-runtime/runtime.js', 'node_modules/react-native/node_modules/whatwg-fetch/fetch.js', 'node_modules/react-navigation/src/NavigationActions.js', 'node_modules/react-navigation/src/PlatformHelpers.native.js', 'node_modules/react-navigation/src/StateUtils.js', 'node_modules/react-navigation/src/addNavigationHelpers.js', 'node_modules/react-navigation/src/createNavigationContainer.js', 'node_modules/react-navigation/src/getChildEventSubscriber.js', 'node_modules/react-navigation/src/navigators/StackNavigator.js', 'node_modules/react-navigation/src/navigators/createNavigator.js', 'node_modules/react-navigation/src/react-navigation.js', 'node_modules/react-navigation/src/routers/KeyGenerator.js', 'node_modules/react-navigation/src/routers/StackRouter.js', 'node_modules/react-navigation/src/routers/createConfigGetter.js', 'node_modules/react-navigation/src/routers/getScreenConfigDeprecated.js', 'node_modules/react-navigation/src/routers/getScreenForRouteName.js', 'node_modules/react-navigation/src/routers/validateRouteConfigMap.js', 'node_modules/react-navigation/src/routers/validateScreenOptions.js', 'node_modules/react-navigation/src/utils/ReactNativeFeatures.js', 'node_modules/react-navigation/src/utils/getSceneIndicesForInterpolationInputRange.js', 'node_modules/react-navigation/src/utils/invariant.js', 'node_modules/react-navigation/src/utils/shallowEqual.js', 'node_modules/react-navigation/src/views/AnimatedValueSubscription.js', 'node_modules/react-navigation/src/views/CardStack/Card.js', 'node_modules/react-navigation/src/views/CardStack/CardStack.js', 'node_modules/react-navigation/src/views/CardStack/CardStackStyleInterpolator.js', 'node_modules/react-navigation/src/views/CardStack/CardStackTransitioner.js', 'node_modules/react-navigation/src/views/CardStack/PointerEventsContainer.js', 'node_modules/react-navigation/src/views/CardStack/TransitionConfigs.js', 'node_modules/react-navigation/src/views/Header/Header.js', 'node_modules/react-navigation/src/views/Header/HeaderBackButton.js', 'node_modules/react-navigation/src/views/Header/HeaderStyleInterpolator.js', 'node_modules/react-navigation/src/views/Header/HeaderTitle.js', 'node_modules/react-navigation/src/views/Header/ModularHeaderBackButton.js', 'node_modules/react-navigation/src/views/SceneView.js', 'node_modules/react-navigation/src/views/ScenesReducer.js', 'node_modules/react-navigation/src/views/TouchableItem.js', 'node_modules/react-navigation/src/views/Transitioner.js', 'node_modules/react-navigation/src/views/assets/back-icon.png', 'node_modules/react-navigation/src/views/withOrientation.js', 'node_modules/react-proxy/modules/bindAutoBindMethods.js', 'node_modules/react-proxy/modules/createClassProxy.js', 'node_modules/react-proxy/modules/createPrototypeProxy.js', 'node_modules/react-proxy/modules/deleteUnknownAutoBindMethods.js', 'node_modules/react-proxy/modules/index.js', 'node_modules/react-proxy/modules/supportsProtoAssignment.js', 'node_modules/react-redux/lib/components/Provider.js', 'node_modules/react-redux/lib/components/connectAdvanced.js', 'node_modules/react-redux/lib/connect/connect.js', 'node_modules/react-redux/lib/connect/mapDispatchToProps.js', 'node_modules/react-redux/lib/connect/mapStateToProps.js', 'node_modules/react-redux/lib/connect/mergeProps.js', 'node_modules/react-redux/lib/connect/selectorFactory.js', 'node_modules/react-redux/lib/connect/verifySubselectors.js', 'node_modules/react-redux/lib/connect/wrapMapToProps.js', 'node_modules/react-redux/lib/index.js', 'node_modules/react-redux/lib/utils/PropTypes.js', 'node_modules/react-redux/lib/utils/Subscription.js', 'node_modules/react-redux/lib/utils/shallowEqual.js', 'node_modules/react-redux/lib/utils/verifyPlainObject.js', 'node_modules/react-redux/lib/utils/warning.js', 'node_modules/react-timer-mixin/TimerMixin.js', 'node_modules/react-transform-hmr/lib/index.js', 'node_modules/react/cjs/react.development.js', 'node_modules/react/index.js', 'node_modules/redux-action-buffer/index.js', 'node_modules/redux-batched-actions/lib/index.js', 'node_modules/redux-devtools-instrument/lib/instrument.js', 'node_modules/redux-offline/lib/actions.js', 'node_modules/redux-offline/lib/config.js', 'node_modules/redux-offline/lib/constants.js', 'node_modules/redux-offline/lib/defaults/batch.js', 'node_modules/redux-offline/lib/defaults/detectNetwork.native.js', 'node_modules/redux-offline/lib/defaults/discard.js', 'node_modules/redux-offline/lib/defaults/effect.js', 'node_modules/redux-offline/lib/defaults/index.js', 'node_modules/redux-offline/lib/defaults/persist.native.js', 'node_modules/redux-offline/lib/defaults/retry.js', 'node_modules/redux-offline/lib/index.js', 'node_modules/redux-offline/lib/middleware.js', 'node_modules/redux-offline/lib/updater.js', 'node_modules/redux-persist-transform-filter/dist/index.js', 'node_modules/redux-persist/lib/autoRehydrate.js', 'node_modules/redux-persist/lib/constants.js', 'node_modules/redux-persist/lib/createPersistor.js', 'node_modules/redux-persist/lib/createTransform.js', 'node_modules/redux-persist/lib/defaults/asyncLocalStorage.js', 'node_modules/redux-persist/lib/getStoredState.js', 'node_modules/redux-persist/lib/index.js', 'node_modules/redux-persist/lib/persistStore.js', 'node_modules/redux-persist/lib/purgeStoredState.js', 'node_modules/redux-persist/lib/utils/isStatePlainEnough.js', 'node_modules/redux-persist/lib/utils/setImmediate.js', 'node_modules/redux-thunk/lib/index.js', 'node_modules/redux/lib/redux.js', 'node_modules/remote-redux-devtools/lib/configureStore.js', 'node_modules/remote-redux-devtools/lib/constants.js', 'node_modules/remote-redux-devtools/lib/devTools.js', 'node_modules/remote-redux-devtools/lib/index.js', 'node_modules/remotedev-serialize/helpers/index.js', 'node_modules/remotedev-serialize/immutable/serialize.js', 'node_modules/remotedev-utils/lib/catchErrors.js', 'node_modules/remotedev-utils/lib/filters.js', 'node_modules/remotedev-utils/lib/index.js', 'node_modules/requires-port/index.js', 'node_modules/reselect/lib/index.js', 'node_modules/rn-host-detect/index.js', 'node_modules/sc-channel/index.js', 'node_modules/sc-emitter/index.js', 'node_modules/sc-emitter/node_modules/component-emitter/index.js', 'node_modules/sc-errors/decycle.js', 'node_modules/sc-errors/index.js', 'node_modules/sc-formatter/index.js', 'node_modules/semver/semver.js', 'node_modules/serialize-error/index.js', 'node_modules/shallow-equals/index.js', 'node_modules/shortid/index.js', 'node_modules/shortid/lib/alphabet.js', 'node_modules/shortid/lib/build.js', 'node_modules/shortid/lib/decode.js', 'node_modules/shortid/lib/encode.js', 'node_modules/shortid/lib/index.js', 'node_modules/shortid/lib/is-valid.js', 'node_modules/shortid/lib/random/random-byte-browser.js', 'node_modules/shortid/lib/random/random-from-seed.js', 'node_modules/shortid/lib/util/cluster-worker-id-browser.js', 'node_modules/simple-swizzle/index.js', 'node_modules/simple-swizzle/node_modules/is-arrayish/index.js', 'node_modules/socketcluster-client/index.js', 'node_modules/socketcluster-client/lib/auth.js', 'node_modules/socketcluster-client/lib/response.js', 'node_modules/socketcluster-client/lib/scsocket.js', 'node_modules/socketcluster-client/lib/scsocketcreator.js', 'node_modules/socketcluster-client/lib/sctransport.js', 'node_modules/socketcluster-client/node_modules/clone/clone.js', 'node_modules/stacktrace-parser/index.js', 'node_modules/stacktrace-parser/lib/stacktrace-parser.js', 'node_modules/string.prototype.repeat/repeat.js', 'node_modules/symbol-observable/lib/index.js', 'node_modules/symbol-observable/lib/ponyfill.js', 'node_modules/tinycolor2/tinycolor.js', 'node_modules/tween-functions/index.js', 'node_modules/type-of/index.js', 'node_modules/url-parse/index.js', 'node_modules/xregexp/lib/addons/build.js', 'node_modules/xregexp/lib/addons/matchrecursive.js', 'node_modules/xregexp/lib/addons/unicode-base.js', 'node_modules/xregexp/lib/addons/unicode-blocks.js', 'node_modules/xregexp/lib/addons/unicode-categories.js', 'node_modules/xregexp/lib/addons/unicode-properties.js', 'node_modules/xregexp/lib/addons/unicode-scripts.js', 'node_modules/xregexp/lib/index.js', 'node_modules/xregexp/lib/xregexp.js', 'node_modules/xregexp/tools/output/blocks.js', 'node_modules/xregexp/tools/output/categories.js', 'node_modules/xregexp/tools/output/properties.js', 'node_modules/xregexp/tools/output/scripts.js', 'node_modules/xss-filters/src/xss-filters.js', 'normalizeColor', 'parseErrorStack', 'pointsDiffer', 'processColor', 'processDecelerationRate', 'processTransform', 'react-native-implementation', 'renderApplication', 'requireNativeComponent', 'resolveAssetSource', 'setupDevtools', 'share_extension/android/actions/index.js', 'share_extension/android/extension.js', 'share_extension/android/extension_channels/extension_channel_item.js', 'share_extension/android/extension_channels/extension_channels.js', 'share_extension/android/extension_channels/index.js', 'share_extension/android/extension_post/channel_button/channel_button.js', 'share_extension/android/extension_post/channel_button/index.js', 'share_extension/android/extension_post/extension_post.js', 'share_extension/android/extension_post/index.js', 'share_extension/android/extension_post/team_button/index.js', 'share_extension/android/extension_post/team_button/team_button.js', 'share_extension/android/extension_teams/extension_teams.js', 'share_extension/android/extension_teams/index.js', 'share_extension/android/extension_teams/team_item/index.js', 'share_extension/android/extension_teams/team_item/team_item.js', 'share_extension/android/index.js', 'share_extension/android/navigation.js', 'share_extension/android/selectors/index.js', 'share_extension/common/icons/channel_type.js', 'share_extension/common/icons/excel.js', 'share_extension/common/icons/generic.js', 'share_extension/common/icons/index.js', 'share_extension/common/icons/pdf.js', 'share_extension/common/icons/ppt.js', 'share_extension/common/icons/zip.js', 'sizesDiffer', 'stringifySafe', 'toIterator', 'verifyPropTypes'];
diff --git a/packager/modulePaths.js b/packager/modulePaths.js
new file mode 100644
index 000000000..a84960fa3
--- /dev/null
+++ b/packager/modulePaths.js
@@ -0,0 +1,1050 @@
+module.exports = ['./node_modules/react-native/Libraries/ART/ARTSerializablePath.js',
+ './node_modules/react-native/Libraries/Animated/src/Animated.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedAddition.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedDiffClamp.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedDivision.js',
+ './node_modules/react-native/Libraries/Animated/src/AnimatedEvent.js',
+ './node_modules/react-native/Libraries/Animated/src/AnimatedImplementation.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedInterpolation.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedModulo.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedMultiplication.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedNode.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedProps.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedStyle.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedTracking.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedTransform.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedValue.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedValueXY.js',
+ './node_modules/react-native/Libraries/Animated/src/nodes/AnimatedWithChildren.js',
+ './node_modules/react-native/Libraries/Animated/src/animations/Animation.js',
+ './node_modules/react-native/Libraries/ReactNative/AppContainer.js',
+ './node_modules/react-native/Libraries/ReactNative/AppRegistry.js',
+ './node_modules/react-native/Libraries/AppState/AppState.js',
+ './node_modules/react-native/Libraries/Image/AssetRegistry.js',
+ './node_modules/react-native/Libraries/Image/AssetSourceResolver.js',
+ './node_modules/react-native/Libraries/Storage/AsyncStorage.js',
+ './node_modules/react-native/Libraries/BatchedBridge/BatchedBridge.js',
+ './node_modules/react-native/Libraries/Blob/Blob.js',
+ './node_modules/react-native/Libraries/Blob/BlobManager.js',
+ './node_modules/react-native/Libraries/Blob/BlobRegistry.js',
+ './node_modules/react-native/Libraries/Components/Touchable/BoundingDimensions.js',
+ './node_modules/react-native/Libraries/BugReporting/BugReporting.js',
+ './node_modules/react-native/Libraries/StyleSheet/ColorPropType.js',
+ './node_modules/react-native/Libraries/Animated/src/animations/DecayAnimation.js',
+ './node_modules/react-native/Libraries/Utilities/DeviceInfo.js',
+ './node_modules/react-native/Libraries/Utilities/Dimensions.js',
+ './node_modules/react-native/Libraries/Animated/src/Easing.js',
+ './node_modules/react-native/Libraries/StyleSheet/EdgeInsetsPropType.js',
+ './node_modules/react-native/Libraries/vendor/emitter/EmitterSubscription.js',
+ './node_modules/react-native/Libraries/vendor/core/ErrorUtils.js',
+ './node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js',
+ './node_modules/react-native/Libraries/vendor/emitter/EventSubscription.js',
+ './node_modules/react-native/Libraries/vendor/emitter/EventSubscriptionVendor.js',
+ './node_modules/react-native/Libraries/Core/ExceptionsManager.js',
+ './node_modules/react-native/Libraries/Network/FormData.js',
+ './node_modules/react-native/Libraries/Interaction/FrameRateLogger.js',
+ './node_modules/react-native/Libraries/Utilities/HMRClient.js',
+ './node_modules/react-native/Libraries/ReactNative/I18nManager.js',
+ './node_modules/react-native/Libraries/Image/ImageBackground.js',
+ './node_modules/react-native/Libraries/Image/ImageResizeMode.js',
+ './node_modules/react-native/Libraries/Image/ImageStylePropTypes.js',
+ './node_modules/react-native/Libraries/Core/InitializeCore.js',
+ './node_modules/react-native/Libraries/JSInspector/InspectorAgent.js',
+ './node_modules/react-native/Libraries/Interaction/InteractionManager.js',
+ './node_modules/react-native/Libraries/JSInspector/JSInspector.js',
+ './node_modules/react-native/Libraries/Core/Timers/JSTimers.js',
+ './node_modules/react-native/Libraries/Components/Keyboard/Keyboard.js',
+ './node_modules/react-native/Libraries/LayoutAnimation/LayoutAnimation.js',
+ './node_modules/react-native/Libraries/StyleSheet/LayoutPropTypes.js',
+ './node_modules/react-native/Libraries/vendor/core/Map.js',
+ './node_modules/react-native/Libraries/Utilities/MatrixMath.js',
+ './node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js',
+ './node_modules/react-native/Libraries/EventEmitter/MissingNativeEventEmitterShim.js',
+ './node_modules/react-native/Libraries/Animated/src/NativeAnimatedHelper.js',
+ './node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js',
+ './node_modules/react-native/Libraries/Renderer/shims/NativeMethodsMixin.js',
+ './node_modules/react-native/Libraries/BatchedBridge/NativeModules.js',
+ './node_modules/react-native/Libraries/Network/NetInfo.js',
+ './node_modules/react-native/Libraries/JSInspector/NetworkAgent.js',
+ './node_modules/react-native/Libraries/Interaction/PanResponder.js',
+ './node_modules/react-native/Libraries/PermissionsAndroid/PermissionsAndroid.js',
+ './node_modules/react-native/Libraries/Utilities/PixelRatio.js',
+ './node_modules/react-native/Libraries/Components/View/PlatformViewPropTypes.js',
+ './node_modules/react-native/Libraries/StyleSheet/PointPropType.js',
+ './node_modules/react-native/Libraries/Utilities/PolyfillFunctions.js',
+ './node_modules/react-native/Libraries/Components/Touchable/PooledClass.js',
+ './node_modules/react-native/Libraries/Components/Touchable/Position.js',
+ './node_modules/react-native/Libraries/Promise.js',
+ './node_modules/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js',
+ './node_modules/react-native/Libraries/EventEmitter/RCTEventEmitter.js',
+ './node_modules/react-native/Libraries/react-native/React.js',
+ './node_modules/react-native/Libraries/Renderer/shims/ReactFeatureFlags.js',
+ './node_modules/react-native/Libraries/Renderer/shims/ReactNative.js',
+ './node_modules/react-native/Libraries/ART/ReactNativeART.js',
+ './node_modules/react-native/Libraries/Renderer/shims/ReactNativeBridgeEventPlugin.js',
+ './node_modules/react-native/Libraries/Renderer/shims/ReactNativeComponentTree.js',
+ './node_modules/react-native/Libraries/Renderer/shims/ReactNativePropRegistry.js',
+ './node_modules/react-native/Libraries/Renderer/ReactNativeRenderer-prod.js',
+ './node_modules/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js',
+ './node_modules/react-native/Libraries/Core/ReactNativeVersion.js',
+ './node_modules/react-native/Libraries/Core/ReactNativeVersionCheck.js',
+ './node_modules/react-native/Libraries/Components/View/ReactNativeViewAttributes.js',
+ './node_modules/react-native/Libraries/Utilities/SceneTracker.js',
+ './node_modules/react-native/Libraries/Components/ScrollResponder.js',
+ './node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js',
+ './node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js',
+ './node_modules/react-native/Libraries/vendor/core/Set.js',
+ './node_modules/react-native/Libraries/Components/View/ShadowPropTypesIOS.js',
+ './node_modules/react-native/Libraries/Animated/src/animations/SpringAnimation.js',
+ './node_modules/react-native/Libraries/Animated/src/SpringConfig.js',
+ './node_modules/react-native/Libraries/StyleSheet/StyleSheet.js',
+ './node_modules/react-native/Libraries/StyleSheet/StyleSheetPropType.js',
+ './node_modules/react-native/Libraries/StyleSheet/StyleSheetValidation.js',
+ './node_modules/react-native/Libraries/Components/Subscribable.js',
+ './node_modules/react-native/Libraries/Performance/Systrace.js',
+ './node_modules/react-native/Libraries/Components/AppleTV/TVEventHandler.js',
+ './node_modules/react-native/Libraries/Components/AppleTV/TVViewPropTypes.js',
+ './node_modules/react-native/Libraries/Interaction/TaskQueue.js',
+ './node_modules/react-native/Libraries/Text/Text.js',
+ './node_modules/react-native/Libraries/Components/TextInput/TextInputState.js',
+ './node_modules/react-native/Libraries/Text/TextPropTypes.js',
+ './node_modules/react-native/Libraries/Text/TextStylePropTypes.js',
+ './node_modules/react-native/Libraries/Animated/src/animations/TimingAnimation.js',
+ './node_modules/react-native/Libraries/Renderer/shims/TouchHistoryMath.js',
+ './node_modules/react-native/Libraries/Components/Touchable/Touchable.js',
+ './node_modules/react-native/Libraries/Components/Touchable/TouchableOpacity.js',
+ './node_modules/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.js',
+ './node_modules/react-native/Libraries/StyleSheet/TransformPropTypes.js',
+ './node_modules/react-native/Libraries/ReactNative/UIManager.js',
+ './node_modules/react-native/Libraries/Components/UnimplementedViews/UnimplementedView.js',
+ './node_modules/react-native/Libraries/Components/View/View.js',
+ './node_modules/react-native/Libraries/Components/View/ViewAccessibility.js',
+ './node_modules/react-native/Libraries/Components/View/ViewContext.js',
+ './node_modules/react-native/Libraries/Components/View/ViewPropTypes.js',
+ './node_modules/react-native/Libraries/Components/View/ViewStylePropTypes.js',
+ './node_modules/react-native/Libraries/WebSocket/WebSocket.js',
+ './node_modules/react-native/Libraries/WebSocket/WebSocketEvent.js',
+ './node_modules/react-native/Libraries/Network/XMLHttpRequest.js',
+ './node_modules/react-native/Libraries/vendor/core/_shouldPolyfillES6Collection.js',
+ './node_modules/app/actions/device/index.js',
+ './node_modules/app/actions/views/announcement.js',
+ './node_modules/app/actions/views/channel.js',
+ './node_modules/app/actions/views/client_upgrade.js',
+ './node_modules/app/actions/views/command.js',
+ './node_modules/app/actions/views/emoji.js',
+ './node_modules/app/actions/views/file_upload.js',
+ './node_modules/app/actions/views/login.js',
+ './node_modules/app/actions/views/more_dms.js',
+ './node_modules/app/actions/views/root.js',
+ './node_modules/app/actions/views/select_server.js',
+ './node_modules/app/actions/views/select_team.js',
+ './node_modules/app/actions/views/thread.js',
+ './node_modules/app/actions/views/typing.js',
+ './node_modules/app/app.js',
+ './node_modules/app/components/announcement_banner/announcement_banner.js',
+ './node_modules/app/components/announcement_banner/index.js',
+ './node_modules/app/components/at_mention/at_mention.js',
+ './node_modules/app/components/at_mention/index.js',
+ './node_modules/app/components/attachment_button.js',
+ './node_modules/app/components/autocomplete/autocomplete.js',
+ './node_modules/app/components/badge.js',
+ './node_modules/app/components/channel_drawer/channel_drawer.js',
+ './node_modules/app/components/channel_drawer/channels_list/channel_item/channel_item.js',
+ './node_modules/app/components/channel_drawer/channels_list/channel_item/index.js',
+ './node_modules/app/components/channel_drawer/channels_list/channels_list.js',
+ './node_modules/app/components/channel_drawer/channels_list/index.js',
+ './node_modules/app/components/channel_drawer/channels_list/list/index.js',
+ './node_modules/app/components/channel_drawer/channels_list/list/list.js',
+ './node_modules/app/components/channel_drawer/channels_list/switch_teams_button/index.js',
+ './node_modules/app/components/channel_drawer/channels_list/switch_teams_button/switch_teams_button.js',
+ './node_modules/app/components/channel_drawer/drawer_swipper/drawer_swiper.js',
+ './node_modules/app/components/channel_drawer/drawer_swipper/index.js',
+ './node_modules/app/components/channel_drawer/index.js',
+ './node_modules/app/components/channel_drawer/teams_list/index.js',
+ './node_modules/app/components/channel_drawer/teams_list/teams_list.js',
+ './node_modules/app/components/channel_drawer/teams_list/teams_list_item/index.js',
+ './node_modules/app/components/channel_drawer/teams_list/teams_list_item/teams_list_item.js',
+ './node_modules/app/components/channel_icon.js',
+ './node_modules/app/components/channel_loader/channel_loader.js',
+ './node_modules/app/components/channel_loader/index.js',
+ './node_modules/app/components/drawer.js',
+ './node_modules/app/components/file_attachment_list/file_attachment_icon.js',
+ './node_modules/app/components/file_attachment_list/file_attachment_image.js',
+ './node_modules/app/components/file_upload_preview/file_upload_item/file_upload_item.js',
+ './node_modules/app/components/file_upload_preview/file_upload_item/index.js',
+ './node_modules/app/components/file_upload_preview/file_upload_preview.js',
+ './node_modules/app/components/file_upload_preview/file_upload_remove.js',
+ './node_modules/app/components/file_upload_preview/file_upload_retry.js',
+ './node_modules/app/components/file_upload_preview/index.js',
+ './node_modules/app/components/flag_icon.js',
+ './node_modules/app/components/formatted_date.js',
+ './node_modules/app/components/formatted_text.js',
+ './node_modules/app/components/formatted_time.js',
+ './node_modules/app/components/layout/keyboard_layout/index.js',
+ './node_modules/app/components/layout/keyboard_layout/keyboard_layout.js',
+ './node_modules/app/components/loading.js',
+ './node_modules/app/components/markdown/index.js',
+ './node_modules/app/components/markdown/markdown.js',
+ './node_modules/app/components/markdown/markdown_block_quote.js',
+ './node_modules/app/components/markdown/markdown_code_block/index.js',
+ './node_modules/app/components/markdown/markdown_code_block/markdown_code_block.js',
+ './node_modules/app/components/markdown/markdown_image/index.js',
+ './node_modules/app/components/markdown/markdown_image/markdown_image.js',
+ './node_modules/app/components/markdown/markdown_link/index.js',
+ './node_modules/app/components/markdown/markdown_link/markdown_link.js',
+ './node_modules/app/components/markdown/markdown_list.js',
+ './node_modules/app/components/markdown/markdown_list_item.js',
+ './node_modules/app/components/markdown/markdown_table/index.js',
+ './node_modules/app/components/markdown/markdown_table/markdown_table.js',
+ './node_modules/app/components/markdown/markdown_table_cell/index.js',
+ './node_modules/app/components/markdown/markdown_table_cell/markdown_table_cell.js',
+ './node_modules/app/components/markdown/markdown_table_image/index.js',
+ './node_modules/app/components/markdown/markdown_table_image/markdown_table_image.js',
+ './node_modules/app/components/markdown/markdown_table_row/index.js',
+ './node_modules/app/components/markdown/markdown_table_row/markdown_table_row.js',
+ './node_modules/app/components/markdown/transform.js',
+ './node_modules/app/components/offline_indicator/index.js',
+ './node_modules/app/components/offline_indicator/offline_indicator.js',
+ './node_modules/app/components/post/index.js',
+ './node_modules/app/components/post/post.js',
+ './node_modules/app/components/post_body/index.js',
+ './node_modules/app/components/post_body/post_body.js',
+ './node_modules/app/components/post_header/index.js',
+ './node_modules/app/components/post_header/post_header.js',
+ './node_modules/app/components/post_list/date_header/date_header.js',
+ './node_modules/app/components/post_list/date_header/index.js',
+ './node_modules/app/components/post_list/index.js',
+ './node_modules/app/components/post_list/new_messages_divider.js',
+ './node_modules/app/components/post_list/post_list.js',
+ './node_modules/app/components/post_list/with_layout.js',
+ './node_modules/app/components/post_profile_picture/index.js',
+ './node_modules/app/components/post_profile_picture/post_profile_picture.js',
+ './node_modules/app/components/post_textbox/index.js',
+ './node_modules/app/components/post_textbox/post_textbox.js',
+ './node_modules/app/components/profile_picture/index.js',
+ './node_modules/app/components/profile_picture/profile_picture.js',
+ './node_modules/app/components/progressive_image/index.js',
+ './node_modules/app/components/progressive_image/progressive_image.js',
+ './node_modules/app/components/root/index.js',
+ './node_modules/app/components/root/root.js',
+ './node_modules/app/components/safe_area_view/index.js',
+ './node_modules/app/components/safe_area_view/safe_area_view.android.js',
+ './node_modules/app/components/settings_drawer/drawer_item.js',
+ './node_modules/app/components/settings_drawer/index.js',
+ './node_modules/app/components/settings_drawer/settings_drawer.js',
+ './node_modules/app/components/settings_drawer/status_label/index.js',
+ './node_modules/app/components/settings_drawer/status_label/status_label.js',
+ './node_modules/app/components/settings_drawer/user_info/index.js',
+ './node_modules/app/components/settings_drawer/user_info/user_info.js',
+ './node_modules/app/components/start/empty_toolbar.js',
+ './node_modules/app/components/status_bar/index.js',
+ './node_modules/app/components/status_bar/status_bar.js',
+ './node_modules/app/components/swiper.js',
+ './node_modules/app/components/user_status/index.js',
+ './node_modules/app/components/user_status/user_status.js',
+ './node_modules/app/components/vector_icon.js',
+ './node_modules/app/constants/autocomplete.js',
+ './node_modules/app/constants/custom_prop_types.js',
+ './node_modules/app/constants/device.js',
+ './node_modules/app/constants/index.js',
+ './node_modules/app/constants/list.js',
+ './node_modules/app/constants/navigation.js',
+ './node_modules/app/constants/permissions.js',
+ './node_modules/app/constants/post_textbox.js',
+ './node_modules/app/constants/view.js',
+ './node_modules/app/i18n/index.js',
+ './node_modules/app/initial_state.js',
+ './node_modules/app/mattermost.js',
+ './node_modules/app/mattermost_bucket/index.js',
+ './node_modules/app/mattermost_managed/index.js',
+ './node_modules/app/mattermost_managed/mattermost-managed.android.js',
+ './node_modules/app/push_notifications/index.js',
+ './node_modules/app/push_notifications/push_notifications.android.js',
+ './node_modules/app/reducers/app/build.js',
+ './node_modules/app/reducers/app/index.js',
+ './node_modules/app/reducers/app/version.js',
+ './node_modules/app/reducers/device/connection.js',
+ './node_modules/app/reducers/device/dimension.js',
+ './node_modules/app/reducers/device/index.js',
+ './node_modules/app/reducers/device/is_tablet.js',
+ './node_modules/app/reducers/device/orientation.js',
+ './node_modules/app/reducers/device/status_bar.js',
+ './node_modules/app/reducers/device/websocket.js',
+ './node_modules/app/reducers/index.js',
+ './node_modules/app/reducers/navigation/index.js',
+ './node_modules/app/reducers/views/announcement.js',
+ './node_modules/app/reducers/views/channel.js',
+ './node_modules/app/reducers/views/client_upgrade.js',
+ './node_modules/app/reducers/views/emoji.js',
+ './node_modules/app/reducers/views/extension.js',
+ './node_modules/app/reducers/views/i18n.js',
+ './node_modules/app/reducers/views/index.js',
+ './node_modules/app/reducers/views/login.js',
+ './node_modules/app/reducers/views/recent_emojis.js',
+ './node_modules/app/reducers/views/root.js',
+ './node_modules/app/reducers/views/search.js',
+ './node_modules/app/reducers/views/select_server.js',
+ './node_modules/app/reducers/views/team.js',
+ './node_modules/app/reducers/views/thread.js',
+ './node_modules/app/screens/channel/channel.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_drawer_button.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_nav_bar.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_search_button/channel_search_button.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_search_button/index.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_title/channel_title.js',
+ './node_modules/app/screens/channel/channel_nav_bar/channel_title/index.js',
+ './node_modules/app/screens/channel/channel_nav_bar/index.js',
+ './node_modules/app/screens/channel/channel_nav_bar/settings_drawer_button.js',
+ './node_modules/app/screens/channel/channel_post_list/channel_post_list.js',
+ './node_modules/app/screens/channel/channel_post_list/index.js',
+ './node_modules/app/screens/channel/index.js',
+ './node_modules/app/screens/entry/entry.js',
+ './node_modules/app/screens/entry/index.js',
+ './node_modules/app/screens/index.js',
+ './node_modules/app/screens/select_server/index.js',
+ './node_modules/app/screens/select_server/select_server.js',
+ './node_modules/app/selectors/autocomplete.js',
+ './node_modules/app/selectors/channel.js',
+ './node_modules/app/selectors/client_upgrade.js',
+ './node_modules/app/selectors/device.js',
+ './node_modules/app/selectors/file.js',
+ './node_modules/app/selectors/i18n.js',
+ './node_modules/app/selectors/post_list.js',
+ './node_modules/app/selectors/views.js',
+ './node_modules/app/store/index.js',
+ './node_modules/app/store/middleware.js',
+ './node_modules/app/store/utils.js',
+ './node_modules/app/styles/index.js',
+ './node_modules/app/telemetry/index.js',
+ './node_modules/app/telemetry/telemetry.android.js',
+ './node_modules/app/utils/avoid_native_bridge.js',
+ './node_modules/app/utils/channels.js',
+ './node_modules/app/utils/client_upgrade.js',
+ './node_modules/app/utils/emojis.js',
+ './node_modules/app/utils/file.js',
+ './node_modules/app/utils/general.js',
+ './node_modules/app/utils/image_cache_manager.js',
+ './node_modules/app/utils/latinise.js',
+ './node_modules/app/utils/list_view.js',
+ './node_modules/app/utils/markdown.js',
+ './node_modules/app/utils/network.js',
+ './node_modules/app/utils/push_notifications.js',
+ './node_modules/app/utils/segment.js',
+ './node_modules/app/utils/sentry/index.js',
+ './node_modules/app/utils/sentry/middleware.js',
+ './node_modules/app/utils/tap.js',
+ './node_modules/app/utils/theme.js',
+ './node_modules/app/utils/time_tracker.js',
+ './node_modules/app/utils/tooltip.js',
+ './node_modules/app/utils/url.js',
+ './node_modules/react-native/Libraries/Utilities/binaryToBase64.js',
+ './node_modules/react-native/Libraries/Network/convertRequestBody.js',
+ './node_modules/react-native/Libraries/Animated/src/createAnimatedComponent.js',
+ './node_modules/react-native/Libraries/Renderer/shims/createReactNativeComponentClass.js',
+ './node_modules/react-native/Libraries/Utilities/createStrictShapeTypeChecker.js',
+ './node_modules/react-native/Libraries/Utilities/differ/deepDiffer.js',
+ './node_modules/react-native/Libraries/Utilities/defineLazyObjectProperty.js',
+ './node_modules/react-native/Libraries/Utilities/deprecatedPropType.js',
+ './node_modules/react-native/Libraries/Utilities/dismissKeyboard.js',
+ './node_modules/react-native/Libraries/Components/Touchable/ensureComponentIsNative.js',
+ './node_modules/react-native/Libraries/Components/Touchable/ensurePositiveDelayProps.js',
+ './node_modules/react-native/Libraries/Network/fetch.js',
+ './node_modules/react-native/Libraries/StyleSheet/flattenStyle.js',
+ './node_modules/react-native/Libraries/vendor/core/guid.js',
+ './node_modules/index.js',
+ './node_modules/react-native/Libraries/Utilities/infoLog.js',
+ './node_modules/react-native/Libraries/Utilities/differ/insetsDiffer.js',
+ './node_modules/react-native/Libraries/Utilities/logError.js',
+ './node_modules/react-native/Libraries/Utilities/differ/matricesDiffer.js',
+ './node_modules/react-native/Libraries/vendor/core/merge.js',
+ './node_modules/react-native/Libraries/Utilities/mergeFast.js',
+ './node_modules/react-native/Libraries/vendor/core/mergeHelpers.js',
+ './node_modules/react-native/Libraries/vendor/core/mergeInto.js',
+ './node_modules/node_modules/analytics-react-native/lib/helpers/assert.js',
+ './node_modules/node_modules/analytics-react-native/lib/helpers/fetch-retry.js',
+ './node_modules/node_modules/analytics-react-native/lib/helpers/parse-response.js',
+ './node_modules/node_modules/analytics-react-native/lib/helpers/uid.js',
+ './node_modules/node_modules/analytics-react-native/lib/helpers/validate.js',
+ './node_modules/node_modules/analytics-react-native/lib/index.js',
+ './node_modules/node_modules/art/core/class.js',
+ './node_modules/node_modules/art/core/color.js',
+ './node_modules/node_modules/art/core/path.js',
+ './node_modules/node_modules/art/core/transform.js',
+ './node_modules/node_modules/art/metrics/path.js',
+ './node_modules/node_modules/base-64/base64.js',
+ './node_modules/node_modules/base64-js/index.js',
+ './node_modules/node_modules/clamp/index.js',
+ './node_modules/node_modules/color-convert/conversions.js',
+ './node_modules/node_modules/color-convert/index.js',
+ './node_modules/node_modules/color-convert/route.js',
+ './node_modules/node_modules/color-name/index.js',
+ './node_modules/node_modules/color-string/index.js',
+ './node_modules/node_modules/color/index.js',
+ './node_modules/node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js',
+ './node_modules/node_modules/commonmark/lib/blocks.js',
+ './node_modules/node_modules/commonmark/lib/common.js',
+ './node_modules/node_modules/commonmark/lib/from-code-point.js',
+ './node_modules/node_modules/commonmark/lib/index.js',
+ './node_modules/node_modules/commonmark/lib/inlines.js',
+ './node_modules/node_modules/commonmark/lib/node.js',
+ './node_modules/node_modules/commonmark/lib/normalize-reference.js',
+ './node_modules/node_modules/commonmark/lib/render/html.js',
+ './node_modules/node_modules/commonmark/lib/render/renderer.js',
+ './node_modules/node_modules/commonmark/lib/render/xml.js',
+ './node_modules/node_modules/create-react-class/factory.js',
+ './node_modules/node_modules/create-react-class/index.js',
+ './node_modules/node_modules/entities/index.js',
+ './node_modules/node_modules/entities/lib/decode.js',
+ './node_modules/node_modules/entities/lib/decode_codepoint.js',
+ './node_modules/node_modules/entities/lib/encode.js',
+ './node_modules/node_modules/event-target-shim/lib/commons.js',
+ './node_modules/node_modules/event-target-shim/lib/custom-event-target.js',
+ './node_modules/node_modules/event-target-shim/lib/event-target.js',
+ './node_modules/node_modules/event-target-shim/lib/event-wrapper.js',
+ './node_modules/node_modules/eventemitter3/index.js',
+ './node_modules/node_modules/fbjs/lib/ExecutionEnvironment.js',
+ './node_modules/node_modules/fbjs/lib/Promise.native.js',
+ './node_modules/node_modules/fbjs/lib/TouchEventUtils.js',
+ './node_modules/node_modules/fbjs/lib/emptyFunction.js',
+ './node_modules/node_modules/fbjs/lib/emptyObject.js',
+ './node_modules/node_modules/fbjs/lib/invariant.js',
+ './node_modules/node_modules/fbjs/lib/isNode.js',
+ './node_modules/node_modules/fbjs/lib/keyMirror.js',
+ './node_modules/node_modules/fbjs/lib/nullthrows.js',
+ './node_modules/node_modules/fbjs/lib/performance.js',
+ './node_modules/node_modules/fbjs/lib/performanceNow.js',
+ './node_modules/node_modules/fbjs/lib/shallowEqual.js',
+ './node_modules/node_modules/fbjs/lib/warning.js',
+ './node_modules/node_modules/form-data/lib/browser.js',
+ './node_modules/node_modules/fuse.js/dist/fuse.js',
+ './node_modules/node_modules/get-params/index.js',
+ './node_modules/node_modules/global/window.js',
+ './node_modules/node_modules/hoist-non-react-statics/index.js',
+ './node_modules/node_modules/intl-format-cache/index.js',
+ './node_modules/node_modules/intl-format-cache/lib/es5.js',
+ './node_modules/node_modules/intl-format-cache/lib/memoizer.js',
+ './node_modules/node_modules/intl-messageformat-parser/index.js',
+ './node_modules/node_modules/intl-messageformat-parser/lib/parser.js',
+ './node_modules/node_modules/intl-messageformat/index.js',
+ './node_modules/node_modules/intl-messageformat/lib/compiler.js',
+ './node_modules/node_modules/intl-messageformat/lib/core.js',
+ './node_modules/node_modules/intl-messageformat/lib/en.js',
+ './node_modules/node_modules/intl-messageformat/lib/es5.js',
+ './node_modules/node_modules/intl-messageformat/lib/locales.js',
+ './node_modules/node_modules/intl-messageformat/lib/main.js',
+ './node_modules/node_modules/intl-messageformat/lib/utils.js',
+ './node_modules/node_modules/intl-relativeformat/index.js',
+ './node_modules/node_modules/intl-relativeformat/lib/core.js',
+ './node_modules/node_modules/intl-relativeformat/lib/diff.js',
+ './node_modules/node_modules/intl-relativeformat/lib/en.js',
+ './node_modules/node_modules/intl-relativeformat/lib/es5.js',
+ './node_modules/node_modules/intl-relativeformat/lib/locales.js',
+ './node_modules/node_modules/intl-relativeformat/lib/main.js',
+ './node_modules/node_modules/intl/index.js',
+ './node_modules/node_modules/intl/lib/core.js',
+ './node_modules/node_modules/intl/locale-data/complete.js',
+ './node_modules/node_modules/invariant/browser.js',
+ './node_modules/node_modules/jail-monkey/index.js',
+ './node_modules/node_modules/jsan/index.js',
+ './node_modules/node_modules/jsan/lib/cycle.js',
+ './node_modules/node_modules/jsan/lib/index.js',
+ './node_modules/node_modules/jsan/lib/path-getter.js',
+ './node_modules/node_modules/jsan/lib/utils.js',
+ './node_modules/node_modules/json-stringify-safe/stringify.js',
+ './node_modules/node_modules/keymirror/index.js',
+ './node_modules/node_modules/linked-list/_source/linked-list.js',
+ './node_modules/node_modules/linked-list/index.js',
+ './node_modules/node_modules/lodash.assign/index.js',
+ './node_modules/node_modules/lodash.forin/index.js',
+ './node_modules/node_modules/lodash.get/index.js',
+ './node_modules/node_modules/lodash.isempty/index.js',
+ './node_modules/node_modules/lodash.isplainobject/index.js',
+ './node_modules/node_modules/lodash.pickby/index.js',
+ './node_modules/node_modules/lodash.set/index.js',
+ './node_modules/node_modules/lodash.unset/index.js',
+ './node_modules/node_modules/lodash/_DataView.js',
+ './node_modules/node_modules/lodash/_Hash.js',
+ './node_modules/node_modules/lodash/_ListCache.js',
+ './node_modules/node_modules/lodash/_Map.js',
+ './node_modules/node_modules/lodash/_MapCache.js',
+ './node_modules/node_modules/lodash/_Promise.js',
+ './node_modules/node_modules/lodash/_Set.js',
+ './node_modules/node_modules/lodash/_SetCache.js',
+ './node_modules/node_modules/lodash/_Stack.js',
+ './node_modules/node_modules/lodash/_Symbol.js',
+ './node_modules/node_modules/lodash/_Uint8Array.js',
+ './node_modules/node_modules/lodash/_WeakMap.js',
+ './node_modules/node_modules/lodash/_apply.js',
+ './node_modules/node_modules/lodash/_arrayEach.js',
+ './node_modules/node_modules/lodash/_arrayFilter.js',
+ './node_modules/node_modules/lodash/_arrayIncludes.js',
+ './node_modules/node_modules/lodash/_arrayIncludesWith.js',
+ './node_modules/node_modules/lodash/_arrayLikeKeys.js',
+ './node_modules/node_modules/lodash/_arrayMap.js',
+ './node_modules/node_modules/lodash/_arrayPush.js',
+ './node_modules/node_modules/lodash/_arraySome.js',
+ './node_modules/node_modules/lodash/_assignValue.js',
+ './node_modules/node_modules/lodash/_assocIndexOf.js',
+ './node_modules/node_modules/lodash/_baseAssign.js',
+ './node_modules/node_modules/lodash/_baseAssignIn.js',
+ './node_modules/node_modules/lodash/_baseAssignValue.js',
+ './node_modules/node_modules/lodash/_baseClone.js',
+ './node_modules/node_modules/lodash/_baseCreate.js',
+ './node_modules/node_modules/lodash/_baseDifference.js',
+ './node_modules/node_modules/lodash/_baseFindIndex.js',
+ './node_modules/node_modules/lodash/_baseFlatten.js',
+ './node_modules/node_modules/lodash/_baseFor.js',
+ './node_modules/node_modules/lodash/_baseForOwn.js',
+ './node_modules/node_modules/lodash/_baseGet.js',
+ './node_modules/node_modules/lodash/_baseGetAllKeys.js',
+ './node_modules/node_modules/lodash/_baseGetTag.js',
+ './node_modules/node_modules/lodash/_baseHasIn.js',
+ './node_modules/node_modules/lodash/_baseIndexOf.js',
+ './node_modules/node_modules/lodash/_baseIsArguments.js',
+ './node_modules/node_modules/lodash/_baseIsEqual.js',
+ './node_modules/node_modules/lodash/_baseIsEqualDeep.js',
+ './node_modules/node_modules/lodash/_baseIsMap.js',
+ './node_modules/node_modules/lodash/_baseIsMatch.js',
+ './node_modules/node_modules/lodash/_baseIsNaN.js',
+ './node_modules/node_modules/lodash/_baseIsNative.js',
+ './node_modules/node_modules/lodash/_baseIsSet.js',
+ './node_modules/node_modules/lodash/_baseIsTypedArray.js',
+ './node_modules/node_modules/lodash/_baseIteratee.js',
+ './node_modules/node_modules/lodash/_baseKeys.js',
+ './node_modules/node_modules/lodash/_baseKeysIn.js',
+ './node_modules/node_modules/lodash/_baseMatches.js',
+ './node_modules/node_modules/lodash/_baseMatchesProperty.js',
+ './node_modules/node_modules/lodash/_basePick.js',
+ './node_modules/node_modules/lodash/_basePickBy.js',
+ './node_modules/node_modules/lodash/_baseProperty.js',
+ './node_modules/node_modules/lodash/_basePropertyDeep.js',
+ './node_modules/node_modules/lodash/_baseRest.js',
+ './node_modules/node_modules/lodash/_baseSet.js',
+ './node_modules/node_modules/lodash/_baseSetToString.js',
+ './node_modules/node_modules/lodash/_baseSlice.js',
+ './node_modules/node_modules/lodash/_baseTimes.js',
+ './node_modules/node_modules/lodash/_baseToString.js',
+ './node_modules/node_modules/lodash/_baseUnary.js',
+ './node_modules/node_modules/lodash/_baseUniq.js',
+ './node_modules/node_modules/lodash/_baseUnset.js',
+ './node_modules/node_modules/lodash/_cacheHas.js',
+ './node_modules/node_modules/lodash/_castPath.js',
+ './node_modules/node_modules/lodash/_cloneArrayBuffer.js',
+ './node_modules/node_modules/lodash/_cloneBuffer.js',
+ './node_modules/node_modules/lodash/_cloneDataView.js',
+ './node_modules/node_modules/lodash/_cloneRegExp.js',
+ './node_modules/node_modules/lodash/_cloneSymbol.js',
+ './node_modules/node_modules/lodash/_cloneTypedArray.js',
+ './node_modules/node_modules/lodash/_copyArray.js',
+ './node_modules/node_modules/lodash/_copyObject.js',
+ './node_modules/node_modules/lodash/_copySymbols.js',
+ './node_modules/node_modules/lodash/_copySymbolsIn.js',
+ './node_modules/node_modules/lodash/_coreJsData.js',
+ './node_modules/node_modules/lodash/_createAssigner.js',
+ './node_modules/node_modules/lodash/_createBaseFor.js',
+ './node_modules/node_modules/lodash/_createFind.js',
+ './node_modules/node_modules/lodash/_createSet.js',
+ './node_modules/node_modules/lodash/_customOmitClone.js',
+ './node_modules/node_modules/lodash/_defineProperty.js',
+ './node_modules/node_modules/lodash/_equalArrays.js',
+ './node_modules/node_modules/lodash/_equalByTag.js',
+ './node_modules/node_modules/lodash/_equalObjects.js',
+ './node_modules/node_modules/lodash/_flatRest.js',
+ './node_modules/node_modules/lodash/_freeGlobal.js',
+ './node_modules/node_modules/lodash/_getAllKeys.js',
+ './node_modules/node_modules/lodash/_getAllKeysIn.js',
+ './node_modules/node_modules/lodash/_getMapData.js',
+ './node_modules/node_modules/lodash/_getMatchData.js',
+ './node_modules/node_modules/lodash/_getNative.js',
+ './node_modules/node_modules/lodash/_getPrototype.js',
+ './node_modules/node_modules/lodash/_getRawTag.js',
+ './node_modules/node_modules/lodash/_getSymbols.js',
+ './node_modules/node_modules/lodash/_getSymbolsIn.js',
+ './node_modules/node_modules/lodash/_getTag.js',
+ './node_modules/node_modules/lodash/_getValue.js',
+ './node_modules/node_modules/lodash/_hasPath.js',
+ './node_modules/node_modules/lodash/_hashClear.js',
+ './node_modules/node_modules/lodash/_hashDelete.js',
+ './node_modules/node_modules/lodash/_hashGet.js',
+ './node_modules/node_modules/lodash/_hashHas.js',
+ './node_modules/node_modules/lodash/_hashSet.js',
+ './node_modules/node_modules/lodash/_initCloneArray.js',
+ './node_modules/node_modules/lodash/_initCloneByTag.js',
+ './node_modules/node_modules/lodash/_initCloneObject.js',
+ './node_modules/node_modules/lodash/_isFlattenable.js',
+ './node_modules/node_modules/lodash/_isIndex.js',
+ './node_modules/node_modules/lodash/_isIterateeCall.js',
+ './node_modules/node_modules/lodash/_isKey.js',
+ './node_modules/node_modules/lodash/_isKeyable.js',
+ './node_modules/node_modules/lodash/_isMasked.js',
+ './node_modules/node_modules/lodash/_isPrototype.js',
+ './node_modules/node_modules/lodash/_isStrictComparable.js',
+ './node_modules/node_modules/lodash/_listCacheClear.js',
+ './node_modules/node_modules/lodash/_listCacheDelete.js',
+ './node_modules/node_modules/lodash/_listCacheGet.js',
+ './node_modules/node_modules/lodash/_listCacheHas.js',
+ './node_modules/node_modules/lodash/_listCacheSet.js',
+ './node_modules/node_modules/lodash/_mapCacheClear.js',
+ './node_modules/node_modules/lodash/_mapCacheDelete.js',
+ './node_modules/node_modules/lodash/_mapCacheGet.js',
+ './node_modules/node_modules/lodash/_mapCacheHas.js',
+ './node_modules/node_modules/lodash/_mapCacheSet.js',
+ './node_modules/node_modules/lodash/_mapToArray.js',
+ './node_modules/node_modules/lodash/_matchesStrictComparable.js',
+ './node_modules/node_modules/lodash/_memoizeCapped.js',
+ './node_modules/node_modules/lodash/_nativeCreate.js',
+ './node_modules/node_modules/lodash/_nativeKeys.js',
+ './node_modules/node_modules/lodash/_nativeKeysIn.js',
+ './node_modules/node_modules/lodash/_nodeUtil.js',
+ './node_modules/node_modules/lodash/_objectToString.js',
+ './node_modules/node_modules/lodash/_overArg.js',
+ './node_modules/node_modules/lodash/_overRest.js',
+ './node_modules/node_modules/lodash/_parent.js',
+ './node_modules/node_modules/lodash/_root.js',
+ './node_modules/node_modules/lodash/_setCacheAdd.js',
+ './node_modules/node_modules/lodash/_setCacheHas.js',
+ './node_modules/node_modules/lodash/_setToArray.js',
+ './node_modules/node_modules/lodash/_setToString.js',
+ './node_modules/node_modules/lodash/_shortOut.js',
+ './node_modules/node_modules/lodash/_stackClear.js',
+ './node_modules/node_modules/lodash/_stackDelete.js',
+ './node_modules/node_modules/lodash/_stackGet.js',
+ './node_modules/node_modules/lodash/_stackHas.js',
+ './node_modules/node_modules/lodash/_stackSet.js',
+ './node_modules/node_modules/lodash/_strictIndexOf.js',
+ './node_modules/node_modules/lodash/_stringToPath.js',
+ './node_modules/node_modules/lodash/_toKey.js',
+ './node_modules/node_modules/lodash/_toSource.js',
+ './node_modules/node_modules/lodash/assign.js',
+ './node_modules/node_modules/lodash/constant.js',
+ './node_modules/node_modules/lodash/difference.js',
+ './node_modules/node_modules/lodash/eq.js',
+ './node_modules/node_modules/lodash/find.js',
+ './node_modules/node_modules/lodash/findIndex.js',
+ './node_modules/node_modules/lodash/flatten.js',
+ './node_modules/node_modules/lodash/get.js',
+ './node_modules/node_modules/lodash/hasIn.js',
+ './node_modules/node_modules/lodash/identity.js',
+ './node_modules/node_modules/lodash/isArguments.js',
+ './node_modules/node_modules/lodash/isArray.js',
+ './node_modules/node_modules/lodash/isArrayLike.js',
+ './node_modules/node_modules/lodash/isArrayLikeObject.js',
+ './node_modules/node_modules/lodash/isBuffer.js',
+ './node_modules/node_modules/lodash/isEqual.js',
+ './node_modules/node_modules/lodash/isFunction.js',
+ './node_modules/node_modules/lodash/isLength.js',
+ './node_modules/node_modules/lodash/isMap.js',
+ './node_modules/node_modules/lodash/isObject.js',
+ './node_modules/node_modules/lodash/isObjectLike.js',
+ './node_modules/node_modules/lodash/isPlainObject.js',
+ './node_modules/node_modules/lodash/isSet.js',
+ './node_modules/node_modules/lodash/isString.js',
+ './node_modules/node_modules/lodash/isSymbol.js',
+ './node_modules/node_modules/lodash/isTypedArray.js',
+ './node_modules/node_modules/lodash/keys.js',
+ './node_modules/node_modules/lodash/keysIn.js',
+ './node_modules/node_modules/lodash/last.js',
+ './node_modules/node_modules/lodash/lodash.js',
+ './node_modules/node_modules/lodash/mapValues.js',
+ './node_modules/node_modules/lodash/memoize.js',
+ './node_modules/node_modules/lodash/noop.js',
+ './node_modules/node_modules/lodash/omit.js',
+ './node_modules/node_modules/lodash/pick.js',
+ './node_modules/node_modules/lodash/property.js',
+ './node_modules/node_modules/lodash/stubArray.js',
+ './node_modules/node_modules/lodash/stubFalse.js',
+ './node_modules/node_modules/lodash/toFinite.js',
+ './node_modules/node_modules/lodash/toInteger.js',
+ './node_modules/node_modules/lodash/toNumber.js',
+ './node_modules/node_modules/lodash/toString.js',
+ './node_modules/node_modules/lodash/union.js',
+ './node_modules/node_modules/mattermost-redux/action_types/admin.js',
+ './node_modules/node_modules/mattermost-redux/action_types/alerts.js',
+ './node_modules/node_modules/mattermost-redux/action_types/channels.js',
+ './node_modules/node_modules/mattermost-redux/action_types/emojis.js',
+ './node_modules/node_modules/mattermost-redux/action_types/errors.js',
+ './node_modules/node_modules/mattermost-redux/action_types/files.js',
+ './node_modules/node_modules/mattermost-redux/action_types/general.js',
+ './node_modules/node_modules/mattermost-redux/action_types/index.js',
+ './node_modules/node_modules/mattermost-redux/action_types/integrations.js',
+ './node_modules/node_modules/mattermost-redux/action_types/jobs.js',
+ './node_modules/node_modules/mattermost-redux/action_types/posts.js',
+ './node_modules/node_modules/mattermost-redux/action_types/preferences.js',
+ './node_modules/node_modules/mattermost-redux/action_types/roles.js',
+ './node_modules/node_modules/mattermost-redux/action_types/search.js',
+ './node_modules/node_modules/mattermost-redux/action_types/teams.js',
+ './node_modules/node_modules/mattermost-redux/action_types/users.js',
+ './node_modules/node_modules/mattermost-redux/actions/channels.js',
+ './node_modules/node_modules/mattermost-redux/actions/emojis.js',
+ './node_modules/node_modules/mattermost-redux/actions/errors.js',
+ './node_modules/node_modules/mattermost-redux/actions/files.js',
+ './node_modules/node_modules/mattermost-redux/actions/general.js',
+ './node_modules/node_modules/mattermost-redux/actions/helpers.js',
+ './node_modules/node_modules/mattermost-redux/actions/integrations.js',
+ './node_modules/node_modules/mattermost-redux/actions/posts.js',
+ './node_modules/node_modules/mattermost-redux/actions/preferences.js',
+ './node_modules/node_modules/mattermost-redux/actions/roles.js',
+ './node_modules/node_modules/mattermost-redux/actions/search.js',
+ './node_modules/node_modules/mattermost-redux/actions/teams.js',
+ './node_modules/node_modules/mattermost-redux/actions/users.js',
+ './node_modules/node_modules/mattermost-redux/actions/websocket.js',
+ './node_modules/node_modules/mattermost-redux/client/client.js',
+ './node_modules/node_modules/mattermost-redux/client/client4.js',
+ './node_modules/node_modules/mattermost-redux/client/fetch_etag.js',
+ './node_modules/node_modules/mattermost-redux/client/index.js',
+ './node_modules/node_modules/mattermost-redux/client/websocket_client.js',
+ './node_modules/node_modules/mattermost-redux/constants/alerts.js',
+ './node_modules/node_modules/mattermost-redux/constants/emoji.js',
+ './node_modules/node_modules/mattermost-redux/constants/files.js',
+ './node_modules/node_modules/mattermost-redux/constants/general.js',
+ './node_modules/node_modules/mattermost-redux/constants/index.js',
+ './node_modules/node_modules/mattermost-redux/constants/permissions.js',
+ './node_modules/node_modules/mattermost-redux/constants/plugins.js',
+ './node_modules/node_modules/mattermost-redux/constants/posts.js',
+ './node_modules/node_modules/mattermost-redux/constants/preferences.js',
+ './node_modules/node_modules/mattermost-redux/constants/request_status.js',
+ './node_modules/node_modules/mattermost-redux/constants/stats.js',
+ './node_modules/node_modules/mattermost-redux/constants/teams.js',
+ './node_modules/node_modules/mattermost-redux/constants/websocket.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux-batched-actions/lib/index.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux-persist/lib/constants.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/applyMiddleware.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/bindActionCreators.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/combineReducers.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/compose.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/createStore.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/index.js',
+ './node_modules/node_modules/mattermost-redux/node_modules/redux/lib/utils/warning.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/admin.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/alerts.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/channels.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/emojis.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/files.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/general.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/index.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/integrations.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/jobs.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/posts.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/preferences.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/roles.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/search.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/teams.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/typing.js',
+ './node_modules/node_modules/mattermost-redux/reducers/entities/users.js',
+ './node_modules/node_modules/mattermost-redux/reducers/errors/index.js',
+ './node_modules/node_modules/mattermost-redux/reducers/index.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/admin.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/channels.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/emojis.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/files.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/general.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/helpers.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/index.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/integrations.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/jobs.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/posts.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/preferences.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/roles.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/search.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/teams.js',
+ './node_modules/node_modules/mattermost-redux/reducers/requests/users.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/channels.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/common.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/emojis.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/general.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/i18n.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/integrations.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/posts.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/preferences.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/roles.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/teams.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/typing.js',
+ './node_modules/node_modules/mattermost-redux/selectors/entities/users.js',
+ './node_modules/node_modules/mattermost-redux/store/configureStore.prod.js',
+ './node_modules/node_modules/mattermost-redux/store/helpers.js',
+ './node_modules/node_modules/mattermost-redux/store/index.js',
+ './node_modules/node_modules/mattermost-redux/store/initial_state.js',
+ './node_modules/node_modules/mattermost-redux/utils/channel_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/deep_freeze.js',
+ './node_modules/node_modules/mattermost-redux/utils/delayed_action.js',
+ './node_modules/node_modules/mattermost-redux/utils/emoji_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/event_emitter.js',
+ './node_modules/node_modules/mattermost-redux/utils/file_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/helpers.js',
+ './node_modules/node_modules/mattermost-redux/utils/i18n_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/key_mirror.js',
+ './node_modules/node_modules/mattermost-redux/utils/post_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/preference_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/team_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/theme_utils.js',
+ './node_modules/node_modules/mattermost-redux/utils/user_utils.js',
+ './node_modules/node_modules/mdurl/decode.js',
+ './node_modules/node_modules/mdurl/encode.js',
+ './node_modules/node_modules/metro/src/lib/bundle-modules/HMRClient.js',
+ './node_modules/node_modules/metro/src/lib/bundle-modules/MetroClient.js',
+ './node_modules/node_modules/mime-db/index.js',
+ './node_modules/node_modules/object-assign/index.js',
+ './node_modules/node_modules/pascalcase/index.js',
+ './node_modules/node_modules/path-to-regexp/index.js',
+ './node_modules/node_modules/path-to-regexp/node_modules/isarray/index.js',
+ './node_modules/node_modules/pegjs/lib/compiler/asts.js',
+ './node_modules/node_modules/pegjs/lib/compiler/index.js',
+ './node_modules/node_modules/pegjs/lib/compiler/js.js',
+ './node_modules/node_modules/pegjs/lib/compiler/opcodes.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/generate-bytecode.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/generate-js.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/remove-proxy-rules.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/report-duplicate-labels.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/report-duplicate-rules.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/report-infinite-recursion.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/report-infinite-repetition.js',
+ './node_modules/node_modules/pegjs/lib/compiler/passes/report-undefined-rules.js',
+ './node_modules/node_modules/pegjs/lib/compiler/visitor.js',
+ './node_modules/node_modules/pegjs/lib/grammar-error.js',
+ './node_modules/node_modules/pegjs/lib/parser.js',
+ './node_modules/node_modules/pegjs/lib/peg.js',
+ './node_modules/node_modules/pegjs/lib/utils/arrays.js',
+ './node_modules/node_modules/pegjs/lib/utils/classes.js',
+ './node_modules/node_modules/pegjs/lib/utils/objects.js',
+ './node_modules/node_modules/promise/setimmediate/core.js',
+ './node_modules/node_modules/promise/setimmediate/done.js',
+ './node_modules/node_modules/promise/setimmediate/es6-extensions.js',
+ './node_modules/node_modules/promise/setimmediate/rejection-tracking.js',
+ './node_modules/node_modules/prop-types/checkPropTypes.js',
+ './node_modules/node_modules/prop-types/factoryWithTypeCheckers.js',
+ './node_modules/node_modules/prop-types/index.js',
+ './node_modules/node_modules/prop-types/lib/ReactPropTypesSecret.js',
+ './node_modules/node_modules/querystring/decode.js',
+ './node_modules/node_modules/querystring/encode.js',
+ './node_modules/node_modules/querystring/index.js',
+ './node_modules/node_modules/querystringify/index.js',
+ './node_modules/node_modules/raven-js/src/configError.js',
+ './node_modules/node_modules/raven-js/src/console.js',
+ './node_modules/node_modules/raven-js/src/raven.js',
+ './node_modules/node_modules/raven-js/src/singleton.js',
+ './node_modules/node_modules/raven-js/src/utils.js',
+ './node_modules/node_modules/raven-js/vendor/TraceKit/tracekit.js',
+ './node_modules/node_modules/raven-js/vendor/json-stringify-safe/stringify.js',
+ './node_modules/node_modules/raven-js/vendor/md5/md5.js',
+ './node_modules/node_modules/react-deep-force-update/lib/index.js',
+ './node_modules/node_modules/react-intl/lib/index.js',
+ './node_modules/node_modules/react-intl/locale-data/en.js',
+ './node_modules/node_modules/react-intl/locale-data/index.js',
+ './node_modules/node_modules/react-native-bottom-sheet/index.js',
+ './node_modules/node_modules/react-native-button/Button.js',
+ './node_modules/node_modules/react-native-button/coalesceNonElementChildren.js',
+ './node_modules/node_modules/react-native-device-info/deviceinfo.js',
+ './node_modules/node_modules/react-native-document-picker/index.js',
+ './node_modules/node_modules/react-native-drawer/index.js',
+ './node_modules/node_modules/react-native-drawer/tweener.js',
+ './node_modules/node_modules/react-native-fast-image/index.js',
+ './node_modules/node_modules/react-native-fetch-blob/android.js',
+ './node_modules/node_modules/react-native-fetch-blob/class/RNFetchBlobFile.js',
+ './node_modules/node_modules/react-native-fetch-blob/class/RNFetchBlobReadStream.js',
+ './node_modules/node_modules/react-native-fetch-blob/class/RNFetchBlobSession.js',
+ './node_modules/node_modules/react-native-fetch-blob/class/RNFetchBlobWriteStream.js',
+ './node_modules/node_modules/react-native-fetch-blob/class/StatefulPromise.js',
+ './node_modules/node_modules/react-native-fetch-blob/fs.js',
+ './node_modules/node_modules/react-native-fetch-blob/index.js',
+ './node_modules/node_modules/react-native-fetch-blob/ios.js',
+ './node_modules/node_modules/react-native-fetch-blob/json-stream.js',
+ './node_modules/node_modules/react-native-fetch-blob/lib/oboe-browser.min.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/Blob.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/Event.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/EventTarget.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/Fetch.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/File.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/FileReader.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/ProgressEvent.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/XMLHttpRequest.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/XMLHttpRequestEventTarget.js',
+ './node_modules/node_modules/react-native-fetch-blob/polyfill/index.js',
+ './node_modules/node_modules/react-native-fetch-blob/utils/log.js',
+ './node_modules/node_modules/react-native-fetch-blob/utils/unicode.js',
+ './node_modules/node_modules/react-native-fetch-blob/utils/uri.js',
+ './node_modules/node_modules/react-native-fetch-blob/utils/uuid.js',
+ './node_modules/node_modules/react-native-image-picker/index.js',
+ './node_modules/node_modules/react-native-keychain/index.js',
+ './node_modules/node_modules/react-native-linear-gradient/index.android.js',
+ './node_modules/node_modules/react-native-local-auth/LocalAuth.android.js',
+ './node_modules/node_modules/react-native-local-auth/data/errors.js',
+ './node_modules/node_modules/react-native-local-auth/error.js',
+ './node_modules/node_modules/react-native-local-auth/index.js',
+ './node_modules/node_modules/react-native-navigation/src/NativeEventsReceiver.js',
+ './node_modules/node_modules/react-native-navigation/src/Navigation.js',
+ './node_modules/node_modules/react-native-navigation/src/PropRegistry.js',
+ './node_modules/node_modules/react-native-navigation/src/Screen.js',
+ './node_modules/node_modules/react-native-navigation/src/ScreenVisibilityListener.js',
+ './node_modules/node_modules/react-native-navigation/src/deprecated/indexDeprecated.android.js',
+ './node_modules/node_modules/react-native-navigation/src/deprecated/platformSpecificDeprecated.android.js',
+ './node_modules/node_modules/react-native-navigation/src/index.js',
+ './node_modules/node_modules/react-native-navigation/src/platformSpecific.android.js',
+ './node_modules/node_modules/react-native-navigation/src/views/sharedElementTransition.android.js',
+ './node_modules/node_modules/react-native-notifications/index.android.js',
+ './node_modules/node_modules/react-native-notifications/notification.android.js',
+ './node_modules/node_modules/react-native-permissions/index.js',
+ './node_modules/node_modules/react-native-permissions/lib/permissions.android.js',
+ './node_modules/node_modules/react-native-safe-area-view/index.js',
+ './node_modules/node_modules/react-native-safe-area-view/withOrientation.js',
+ './node_modules/node_modules/react-native-sentry/index.js',
+ './node_modules/node_modules/react-native-sentry/lib/NativeClient.js',
+ './node_modules/node_modules/react-native-sentry/lib/RavenClient.js',
+ './node_modules/node_modules/react-native-sentry/lib/Sentry.js',
+ './node_modules/node_modules/react-native-vector-icons/FontAwesome.js',
+ './node_modules/node_modules/react-native-vector-icons/Foundation.js',
+ './node_modules/node_modules/react-native-vector-icons/Ionicons.js',
+ './node_modules/node_modules/react-native-vector-icons/MaterialIcons.js',
+ './node_modules/node_modules/react-native-vector-icons/lib/create-icon-set.js',
+ './node_modules/node_modules/react-native-vector-icons/lib/icon-button.js',
+ './node_modules/node_modules/react-native-vector-icons/lib/react-native.js',
+ './node_modules/node_modules/react-native-vector-icons/lib/tab-bar-item-ios.js',
+ './node_modules/node_modules/react-native-vector-icons/lib/toolbar-android.js',
+ './node_modules/node_modules/react-native/node_modules/whatwg-fetch/fetch.js',
+ './node_modules/node_modules/react-navigation/src/NavigationActions.js',
+ './node_modules/node_modules/react-navigation/src/PlatformHelpers.native.js',
+ './node_modules/node_modules/react-navigation/src/StateUtils.js',
+ './node_modules/node_modules/react-navigation/src/addNavigationHelpers.js',
+ './node_modules/node_modules/react-navigation/src/createNavigationContainer.js',
+ './node_modules/node_modules/react-navigation/src/getChildEventSubscriber.js',
+ './node_modules/node_modules/react-navigation/src/navigators/StackNavigator.js',
+ './node_modules/node_modules/react-navigation/src/navigators/createNavigator.js',
+ './node_modules/node_modules/react-navigation/src/react-navigation.js',
+ './node_modules/node_modules/react-navigation/src/routers/KeyGenerator.js',
+ './node_modules/node_modules/react-navigation/src/routers/StackRouter.js',
+ './node_modules/node_modules/react-navigation/src/routers/createConfigGetter.js',
+ './node_modules/node_modules/react-navigation/src/routers/getScreenConfigDeprecated.js',
+ './node_modules/node_modules/react-navigation/src/routers/getScreenForRouteName.js',
+ './node_modules/node_modules/react-navigation/src/routers/validateRouteConfigMap.js',
+ './node_modules/node_modules/react-navigation/src/routers/validateScreenOptions.js',
+ './node_modules/node_modules/react-navigation/src/utils/ReactNativeFeatures.js',
+ './node_modules/node_modules/react-navigation/src/utils/getSceneIndicesForInterpolationInputRange.js',
+ './node_modules/node_modules/react-navigation/src/utils/invariant.js',
+ './node_modules/node_modules/react-navigation/src/utils/shallowEqual.js',
+ './node_modules/node_modules/react-navigation/src/views/AnimatedValueSubscription.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/Card.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/CardStack.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/CardStackStyleInterpolator.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/CardStackTransitioner.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/PointerEventsContainer.js',
+ './node_modules/node_modules/react-navigation/src/views/CardStack/TransitionConfigs.js',
+ './node_modules/node_modules/react-navigation/src/views/Header/Header.js',
+ './node_modules/node_modules/react-navigation/src/views/Header/HeaderBackButton.js',
+ './node_modules/node_modules/react-navigation/src/views/Header/HeaderStyleInterpolator.js',
+ './node_modules/node_modules/react-navigation/src/views/Header/HeaderTitle.js',
+ './node_modules/node_modules/react-navigation/src/views/Header/ModularHeaderBackButton.js',
+ './node_modules/node_modules/react-navigation/src/views/SceneView.js',
+ './node_modules/node_modules/react-navigation/src/views/ScenesReducer.js',
+ './node_modules/node_modules/react-navigation/src/views/TouchableItem.js',
+ './node_modules/node_modules/react-navigation/src/views/Transitioner.js',
+ './node_modules/node_modules/react-navigation/src/views/withOrientation.js',
+ './node_modules/node_modules/react-proxy/modules/bindAutoBindMethods.js',
+ './node_modules/node_modules/react-proxy/modules/createClassProxy.js',
+ './node_modules/node_modules/react-proxy/modules/createPrototypeProxy.js',
+ './node_modules/node_modules/react-proxy/modules/deleteUnknownAutoBindMethods.js',
+ './node_modules/node_modules/react-proxy/modules/index.js',
+ './node_modules/node_modules/react-proxy/modules/supportsProtoAssignment.js',
+ './node_modules/node_modules/react-redux/lib/components/Provider.js',
+ './node_modules/node_modules/react-redux/lib/components/connectAdvanced.js',
+ './node_modules/node_modules/react-redux/lib/connect/connect.js',
+ './node_modules/node_modules/react-redux/lib/connect/mapDispatchToProps.js',
+ './node_modules/node_modules/react-redux/lib/connect/mapStateToProps.js',
+ './node_modules/node_modules/react-redux/lib/connect/mergeProps.js',
+ './node_modules/node_modules/react-redux/lib/connect/selectorFactory.js',
+ './node_modules/node_modules/react-redux/lib/connect/verifySubselectors.js',
+ './node_modules/node_modules/react-redux/lib/connect/wrapMapToProps.js',
+ './node_modules/node_modules/react-redux/lib/index.js',
+ './node_modules/node_modules/react-redux/lib/utils/PropTypes.js',
+ './node_modules/node_modules/react-redux/lib/utils/Subscription.js',
+ './node_modules/node_modules/react-redux/lib/utils/shallowEqual.js',
+ './node_modules/node_modules/react-redux/lib/utils/verifyPlainObject.js',
+ './node_modules/node_modules/react-redux/lib/utils/warning.js',
+ './node_modules/node_modules/react-timer-mixin/TimerMixin.js',
+ './node_modules/node_modules/react-transform-hmr/lib/index.js',
+ './node_modules/node_modules/react/cjs/react.production.min.js',
+ './node_modules/node_modules/react/index.js',
+ './node_modules/node_modules/redux-action-buffer/index.js',
+ './node_modules/node_modules/redux-batched-actions/lib/index.js',
+ './node_modules/node_modules/redux-offline/lib/actions.js',
+ './node_modules/node_modules/redux-offline/lib/config.js',
+ './node_modules/node_modules/redux-offline/lib/constants.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/batch.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/detectNetwork.native.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/discard.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/effect.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/index.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/persist.native.js',
+ './node_modules/node_modules/redux-offline/lib/defaults/retry.js',
+ './node_modules/node_modules/redux-offline/lib/index.js',
+ './node_modules/node_modules/redux-offline/lib/middleware.js',
+ './node_modules/node_modules/redux-offline/lib/updater.js',
+ './node_modules/node_modules/redux-persist-transform-filter/dist/index.js',
+ './node_modules/node_modules/redux-persist/lib/autoRehydrate.js',
+ './node_modules/node_modules/redux-persist/lib/constants.js',
+ './node_modules/node_modules/redux-persist/lib/createPersistor.js',
+ './node_modules/node_modules/redux-persist/lib/createTransform.js',
+ './node_modules/node_modules/redux-persist/lib/defaults/asyncLocalStorage.js',
+ './node_modules/node_modules/redux-persist/lib/getStoredState.js',
+ './node_modules/node_modules/redux-persist/lib/index.js',
+ './node_modules/node_modules/redux-persist/lib/persistStore.js',
+ './node_modules/node_modules/redux-persist/lib/purgeStoredState.js',
+ './node_modules/node_modules/redux-persist/lib/utils/isStatePlainEnough.js',
+ './node_modules/node_modules/redux-persist/lib/utils/setImmediate.js',
+ './node_modules/node_modules/redux-thunk/lib/index.js',
+ './node_modules/node_modules/redux/lib/redux.js',
+ './node_modules/node_modules/requires-port/index.js',
+ './node_modules/node_modules/reselect/lib/index.js',
+ './node_modules/node_modules/rn-host-detect/index.js',
+ './node_modules/node_modules/sc-channel/index.js',
+ './node_modules/node_modules/sc-emitter/index.js',
+ './node_modules/node_modules/sc-emitter/node_modules/component-emitter/index.js',
+ './node_modules/node_modules/sc-errors/decycle.js',
+ './node_modules/node_modules/sc-errors/index.js',
+ './node_modules/node_modules/sc-formatter/index.js',
+ './node_modules/node_modules/semver/semver.js',
+ './node_modules/node_modules/serialize-error/index.js',
+ './node_modules/node_modules/shallow-equals/index.js',
+ './node_modules/node_modules/shortid/index.js',
+ './node_modules/node_modules/shortid/lib/alphabet.js',
+ './node_modules/node_modules/shortid/lib/build.js',
+ './node_modules/node_modules/shortid/lib/decode.js',
+ './node_modules/node_modules/shortid/lib/encode.js',
+ './node_modules/node_modules/shortid/lib/index.js',
+ './node_modules/node_modules/shortid/lib/is-valid.js',
+ './node_modules/node_modules/shortid/lib/random/random-byte-browser.js',
+ './node_modules/node_modules/shortid/lib/random/random-from-seed.js',
+ './node_modules/node_modules/shortid/lib/util/cluster-worker-id-browser.js',
+ './node_modules/node_modules/simple-swizzle/index.js',
+ './node_modules/node_modules/simple-swizzle/node_modules/is-arrayish/index.js',
+ './node_modules/node_modules/string.prototype.repeat/repeat.js',
+ './node_modules/node_modules/symbol-observable/lib/index.js',
+ './node_modules/node_modules/symbol-observable/lib/ponyfill.js',
+ './node_modules/node_modules/tinycolor2/tinycolor.js',
+ './node_modules/node_modules/tween-functions/index.js',
+ './node_modules/node_modules/type-of/index.js',
+ './node_modules/node_modules/xregexp/lib/addons/build.js',
+ './node_modules/node_modules/xregexp/lib/addons/matchrecursive.js',
+ './node_modules/node_modules/xregexp/lib/addons/unicode-base.js',
+ './node_modules/node_modules/xregexp/lib/addons/unicode-blocks.js',
+ './node_modules/node_modules/xregexp/lib/addons/unicode-categories.js',
+ './node_modules/node_modules/xregexp/lib/addons/unicode-properties.js',
+ './node_modules/node_modules/xregexp/lib/addons/unicode-scripts.js',
+ './node_modules/node_modules/xregexp/lib/index.js',
+ './node_modules/node_modules/xregexp/lib/xregexp.js',
+ './node_modules/node_modules/xregexp/tools/output/blocks.js',
+ './node_modules/node_modules/xregexp/tools/output/categories.js',
+ './node_modules/node_modules/xregexp/tools/output/properties.js',
+ './node_modules/node_modules/xregexp/tools/output/scripts.js',
+ './node_modules/node_modules/xss-filters/src/xss-filters.js',
+ './node_modules/react-native/Libraries/StyleSheet/normalizeColor.js',
+ './node_modules/react-native/Libraries/Utilities/differ/pointsDiffer.js',
+ './node_modules/react-native/Libraries/StyleSheet/processColor.js',
+ './node_modules/react-native/Libraries/Components/ScrollView/processDecelerationRate.js',
+ './node_modules/react-native/Libraries/StyleSheet/processTransform.js',
+ './node_modules/react-native/Libraries/react-native/react-native-implementation.js',
+ './node_modules/react-native/Libraries/ReactNative/renderApplication.js',
+ './node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js',
+ './node_modules/react-native/Libraries/Image/resolveAssetSource.js',
+ './node_modules/react-native/Libraries/Utilities/differ/sizesDiffer.js',
+ './node_modules/react-native/Libraries/Utilities/stringifySafe.js',
+ './node_modules/react-native/Libraries/vendor/core/toIterator.js',
+ './node_modules/react-native/Libraries/ReactNative/verifyPropTypes.js'];