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'];