2
0
mirror of synced 2025-01-17 01:40:55 +00:00
This commit is contained in:
Salakar 2018-03-24 02:02:59 +00:00
parent e0d62f3945
commit 9eeddcab6e
15 changed files with 447 additions and 85 deletions

View File

@ -87,9 +87,13 @@ dependencies {
transitive = false transitive = false
} }
implementation(project(':react-native-restart')) {
transitive = false
}
compile fileTree(dir: "libs", include: ["*.jar"]) compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.google.android.gms:play-services-base:$firebaseVersion" compile "com.google.android.gms:play-services-base:$firebaseVersion"
// compile "com.google.firebase:firebase-ads:$firebaseVersion" compile "com.google.firebase:firebase-ads:$firebaseVersion"
compile "com.google.firebase:firebase-auth:$firebaseVersion" compile "com.google.firebase:firebase-auth:$firebaseVersion"
compile "com.google.firebase:firebase-config:$firebaseVersion" compile "com.google.firebase:firebase-config:$firebaseVersion"
compile "com.google.firebase:firebase-core:$firebaseVersion" compile "com.google.firebase:firebase-core:$firebaseVersion"

View File

@ -31,7 +31,7 @@ public class MainActivity extends ReactActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// checkWindowPerms(); checkWindowPerms();
} }
public void checkWindowPerms() { public void checkWindowPerms() {

View File

@ -9,7 +9,8 @@ import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader; import com.facebook.soloader.SoLoader;
import io.invertase.firebase.RNFirebasePackage; import io.invertase.firebase.RNFirebasePackage;
//import io.invertase.firebase.admob.RNFirebaseAdMobPackage; import com.avishayil.rnrestart.ReactNativeRestartPackage;
import io.invertase.firebase.admob.RNFirebaseAdMobPackage;
import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage;
import io.invertase.firebase.auth.RNFirebaseAuthPackage; import io.invertase.firebase.auth.RNFirebaseAuthPackage;
import io.invertase.firebase.config.RNFirebaseRemoteConfigPackage; import io.invertase.firebase.config.RNFirebaseRemoteConfigPackage;
@ -25,6 +26,7 @@ import io.invertase.firebase.notifications.RNFirebaseNotificationsPackage;
import io.invertase.firebase.perf.RNFirebasePerformancePackage; import io.invertase.firebase.perf.RNFirebasePerformancePackage;
import io.invertase.firebase.storage.RNFirebaseStoragePackage; import io.invertase.firebase.storage.RNFirebaseStoragePackage;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -39,8 +41,9 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() { protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList( return Arrays.<ReactPackage>asList(
new MainReactPackage(), new MainReactPackage(),
new ReactNativeRestartPackage(),
new RNFirebasePackage(), new RNFirebasePackage(),
// new RNFirebaseAdMobPackage(), new RNFirebaseAdMobPackage(),
new RNFirebaseAnalyticsPackage(), new RNFirebaseAnalyticsPackage(),
new RNFirebaseAuthPackage(), new RNFirebaseAuthPackage(),
new RNFirebaseRemoteConfigPackage(), new RNFirebaseRemoteConfigPackage(),
@ -67,6 +70,7 @@ public class MainApplication extends Application implements ReactApplication {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
getReactNativeHost().getReactInstanceManager().getDevSupportManager().getDevSettings().setRemoteJSDebugEnabled(true);
SoLoader.init(this, /* native exopackage */ false); SoLoader.init(this, /* native exopackage */ false);
} }

View File

@ -1,7 +1,11 @@
rootProject.name = 'RNFTests' rootProject.name = 'RNFTests'
include ':react-native-firebase' include ':react-native-firebase'
project(':react-native-firebase').projectDir = new File(rootProject.projectDir, './../../android') project(':react-native-firebase').projectDir = new File(rootProject.projectDir, './../../android')
include ':react-native-restart'
project(':react-native-restart').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-restart/android')
include ':app' include ':app'
include ':detox' include ':detox'

View File

@ -4,26 +4,20 @@
* @flow * @flow
*/ */
import React, { Component } from 'react'; // must import before all else
import rnModule, { AppRegistry, Text, View } from 'react-native'; import Bridge from './bridge/env/rn';
import testModule from './firebase'; import React, { Component } from 'react';
import { AppRegistry, Text, View } from 'react-native';
import firebase from './firebase';
class Root extends Component { class Root extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = {}; this.state = {};
} Bridge.provideRoot(this);
Bridge.provideModule(firebase);
componentDidMount() {
if (global.__initializeEnvironment) {
console.log('Initializing environment...');
global.__initializeEnvironment({
root: this,
rnModule,
testModule,
});
}
} }
render() { render() {

61
tests-new/bridge/env/node/index.js vendored Normal file
View File

@ -0,0 +1,61 @@
const detox = require('detox');
const vm = require('./vm');
const ws = require('./ws');
const detoxOriginalInit = detox.init.bind(detox);
const detoxOriginalCleanup = detox.cleanup.bind(detox);
let detoxOriginalReloadReactNative = null;
let bridgeReady = false;
process.on('rn-ready', () => {
// console.log('READY', true);
bridgeReady = true;
});
function onceBridgeReady() {
if (bridgeReady) return Promise.resolve();
return new Promise(resolve => {
process.once('rn-ready', resolve);
});
}
detox.init = async (...args) => {
bridgeReady = false;
console.log('detox.init.start');
return detoxOriginalInit(...args).then(() => {
console.log('detox.init.complete');
detoxOriginalReloadReactNative = device.reloadReactNative.bind(device);
device.reloadReactNative = async () => {
console.log('reloadReactNative.start');
bridgeReady = false;
// return device.launchApp({ newInstance: true }).then(() => {
global.bridge.reload();
return onceBridgeReady();
};
return onceBridgeReady();
});
};
detox.cleanup = async (...args) => {
console.log('detox.cleanup');
return detoxOriginalCleanup(...args).then(() => {
console.log('detox.cleanup.end');
ws.close();
process.exit();
});
};
global.bridge = {
_ws: null,
rootSetState(state) {
// todo
return Promise.resolve();
},
};

158
tests-new/bridge/env/node/vm.js vendored Normal file
View File

@ -0,0 +1,158 @@
const url = require('url');
const http = require('http');
const invariant = require('assert');
const { createContext, Script } = require('vm');
const ws = require('./ws');
let currentContext = null;
let scriptCached = null;
// this is a dummy file path - without a file name the source map is not used in the vm
const TEMP_BUNDLE_PATH = '/tmp/bridge/react-native.js';
/**
*
* @param replyId
* @param result
*/
function sendResult(replyID, result) {
ws.send(
JSON.stringify({
replyID,
result,
})
);
}
/**
*
* @param message
*/
function sendError(message) {
console.error(message);
}
/**
*
* @param src
* @param callback
*/
function getScript(src, callback) {
if (scriptCached) return callback(null, scriptCached);
return http
.get(src, res => {
let buff = '';
res.setEncoding('utf8');
res.on('data', chunk => {
buff += chunk;
});
res.on('end', () => {
scriptCached = new Script(buff, {
// lineOffset: -1,
// columnOffset: -1,
timeout: 120000,
displayErrors: true,
produceCachedData: true,
filename: TEMP_BUNDLE_PATH,
});
callback(null, scriptCached);
});
})
.on('error', err => {
callback(err);
});
}
process.on('ws-message', request => {
// console.log(request.method);
switch (request.method) {
case 'prepareJSRuntime':
currentContext = undefined;
currentContext = createContext({
console,
__bridgeNode: {
ready() {
process.emit('rn-ready');
},
provideReactNativeModule(rnModule) {
global.bridge.rn = undefined;
global.bridge.rn = rnModule;
},
provideModule(moduleExports) {
global.bridge.module = undefined;
global.bridge.module = moduleExports;
},
provideReload(reloadFn) {
global.bridge.reload = undefined;
global.bridge.reload = reloadFn;
},
provideRoot(rootComponent) {
global.bridge.root = undefined;
global.bridge.root = rootComponent;
},
},
});
sendResult(request.id);
return;
case 'executeApplicationScript':
// Modify the URL to make sure we get the inline source map.
const parsedUrl = url.parse(request.url, /* parseQueryString */ true);
invariant(parsedUrl.query);
parsedUrl.query.inlineSourceMap = true;
delete parsedUrl.search;
// $FlowIssue url.format() does not accept what url.parse() returns.
const scriptUrl = url.format(parsedUrl);
getScript(scriptUrl, (err, script) => {
if (err != null) {
sendError(`Failed to get script from packager: ${err.message}`);
return;
}
if (currentContext == null) {
sendError('JS runtime not prepared');
return;
}
if (request.inject) {
for (const name in request.inject) {
currentContext[name] = JSON.parse(request.inject[name]);
}
}
try {
script.runInContext(currentContext, TEMP_BUNDLE_PATH);
} catch (e) {
sendError(`Failed to exec script: ${e.message}`);
}
sendResult(request.id);
});
return;
default:
let returnValue = [[], [], [], 0];
try {
if (
currentContext != null &&
typeof currentContext.__fbBatchedBridge === 'object'
) {
returnValue = currentContext.__fbBatchedBridge[request.method].apply(
null,
request.arguments
);
}
} catch (e) {
sendError(
`Failed while making a call ${request.method}:::${e.message}`
);
} finally {
sendResult(request.id, JSON.stringify(returnValue));
}
}
});

12
tests-new/bridge/env/node/ws.js vendored Normal file
View File

@ -0,0 +1,12 @@
const WebSocket = require('ws');
const ws = new WebSocket(
// todo read url from somewhere
'ws://' + 'localhost:8081' + '/debugger-proxy?role=debugger&name=Chrome'
);
ws.onmessage = message => process.emit('ws-message', JSON.parse(message.data));
ws.onopen = () => console.log('WS open');
ws.onclose = event => (!event.wasClean ? console.log('WS close', event) : '');
module.exports = ws;

28
tests-new/bridge/env/rn.js vendored Normal file
View File

@ -0,0 +1,28 @@
import reactNative, { Platform, NativeModules } from 'react-native';
import RNRestart from 'react-native-restart'; // Import package from node modules
const bridgeNode = global.__bridgeNode;
// https://github.com/ptmt/react-native-macos/blob/master/React/Modules/RCTDevSettings.mm
if (Platform.OS === 'ios' && !bridgeNode) {
NativeModules.RCTDevSettings.setIsDebuggingRemotely(true);
}
if (bridgeNode) {
bridgeNode.provideReactNativeModule(reactNative);
bridgeNode.provideReload(RNRestart.Restart);
}
export default {
provideModule(moduleExports) {
if (bridgeNode) {
bridgeNode.provideModule(moduleExports);
bridgeNode.ready();
}
},
provideRoot(rootComponent) {
if (bridgeNode) {
bridgeNode.provideRoot(rootComponent);
}
},
};

60
tests-new/e2e/bridge.spec.js Executable file
View File

@ -0,0 +1,60 @@
// describe('Example', () => {
// beforeEach(async () => {
// await device.reloadReactNative();
// });
//
// it('should have welcome screen', async () => {
// await expect(element(by.id('welcome'))).toBeVisible();
// });
//
// it('should show hello screen after tap', async () => {
// await element(by.id('hello_button')).tap();
// await expect(element(by.text('Hello!!!'))).toBeVisible();
// });
//
// it('should show world screen after tap', async () => {
// await element(by.id('world_button')).tap();
// await expect(element(by.text('World!!!'))).toBeVisible();
// });
// });
describe('should work inside node', () => {
beforeEach(async () => {
await device.reloadReactNative();
});
it('should provide bridge global', () => {
const firebase = bridge.module;
return Promise.resolve();
});
it('should require 2', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 3', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 4', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 5', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
});

View File

@ -25,7 +25,36 @@ describe('should work inside node', () => {
it('should require', () => { it('should require', () => {
const firebase = bridge.module; const firebase = bridge.module;
return Promise.resolve();
});
it('should require 2', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule; // const { Platform } = bridge.rnModule;
should.equal(firebase.auth.nativeModuleExists, true); // should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 3', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 4', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
});
it('should require 5', () => {
const firebase = bridge.module;
// const { Platform } = bridge.rnModule;
// should.equal(firebase.auth.nativeModuleExists, true);
return Promise.resolve();
}); });
}); });

View File

@ -1,5 +1,4 @@
--delay
--recursive --recursive
--timeout 120000 --timeout 120000
--bail --bail
--require bridge --require ./bridge/env/node

View File

@ -1,5 +1,5 @@
{ {
"name": "example", "name": "rnfirebase-tests",
"version": "7.2.0", "version": "7.2.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
@ -337,8 +337,7 @@
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
"dev": true
}, },
"arch": { "arch": {
"version": "2.1.0", "version": "2.1.0",
@ -520,6 +519,11 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
},
"asynckit": { "asynckit": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@ -1458,8 +1462,7 @@
"bluebird": { "bluebird": {
"version": "3.5.1", "version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
"dev": true
}, },
"body-parser": { "body-parser": {
"version": "1.13.3", "version": "1.13.3",
@ -1544,8 +1547,7 @@
"browser-stdout": { "browser-stdout": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
"integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8="
"dev": true
}, },
"bser": { "bser": {
"version": "2.0.0", "version": "2.0.0",
@ -1639,7 +1641,6 @@
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz",
"integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=", "integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=",
"dev": true,
"requires": { "requires": {
"cross-spawn": "4.0.2", "cross-spawn": "4.0.2",
"node-version": "1.1.3", "node-version": "1.1.3",
@ -1650,7 +1651,6 @@
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
"integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
"dev": true,
"requires": { "requires": {
"lru-cache": "4.1.2", "lru-cache": "4.1.2",
"which": "1.3.0" "which": "1.3.0"
@ -2052,8 +2052,7 @@
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
"dev": true
}, },
"contains-path": { "contains-path": {
"version": "0.1.0", "version": "0.1.0",
@ -2304,7 +2303,6 @@
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/detox/-/detox-7.2.0.tgz", "resolved": "https://registry.npmjs.org/detox/-/detox-7.2.0.tgz",
"integrity": "sha512-hj+GgnXJWmNit0lzeDY1KjZZv3nvNWsB3V6oGIvwCe3Jdl2JXqg6Qn2USa137loTpuvdR77Zgl5m3u1iG1Am/Q==", "integrity": "sha512-hj+GgnXJWmNit0lzeDY1KjZZv3nvNWsB3V6oGIvwCe3Jdl2JXqg6Qn2USa137loTpuvdR77Zgl5m3u1iG1Am/Q==",
"dev": true,
"requires": { "requires": {
"child-process-promise": "2.2.1", "child-process-promise": "2.2.1",
"commander": "2.15.1", "commander": "2.15.1",
@ -2324,7 +2322,6 @@
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"dev": true,
"requires": { "requires": {
"graceful-fs": "4.1.11", "graceful-fs": "4.1.11",
"jsonfile": "4.0.0", "jsonfile": "4.0.0",
@ -2335,7 +2332,6 @@
"version": "2.7.4", "version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": { "requires": {
"aproba": "1.2.0", "aproba": "1.2.0",
"console-control-strings": "1.1.0", "console-control-strings": "1.1.0",
@ -2351,7 +2347,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "1.0.1" "number-is-nan": "1.0.1"
} }
@ -2360,7 +2355,6 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": { "requires": {
"graceful-fs": "4.1.11" "graceful-fs": "4.1.11"
} }
@ -2369,7 +2363,6 @@
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"requires": { "requires": {
"are-we-there-yet": "1.1.4", "are-we-there-yet": "1.1.4",
"console-control-strings": "1.1.0", "console-control-strings": "1.1.0",
@ -2381,12 +2374,20 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": { "requires": {
"code-point-at": "1.1.0", "code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0", "is-fullwidth-code-point": "1.0.0",
"strip-ansi": "3.0.1" "strip-ansi": "3.0.1"
} }
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
}
} }
} }
}, },
@ -2394,7 +2395,6 @@
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/detox-server/-/detox-server-7.0.0.tgz", "resolved": "https://registry.npmjs.org/detox-server/-/detox-server-7.0.0.tgz",
"integrity": "sha512-zs9ZP/MgeEmaZD/+MCl5PVcYHRjUtFBkBx3xQRPcsjJ/PmpCKy/BvygjLO6tRsR/2SC9UYay6W+BdguEYeft8g==", "integrity": "sha512-zs9ZP/MgeEmaZD/+MCl5PVcYHRjUtFBkBx3xQRPcsjJ/PmpCKy/BvygjLO6tRsR/2SC9UYay6W+BdguEYeft8g==",
"dev": true,
"requires": { "requires": {
"lodash": "4.17.5", "lodash": "4.17.5",
"npmlog": "4.1.2", "npmlog": "4.1.2",
@ -2405,7 +2405,6 @@
"version": "2.7.4", "version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"dev": true,
"requires": { "requires": {
"aproba": "1.2.0", "aproba": "1.2.0",
"console-control-strings": "1.1.0", "console-control-strings": "1.1.0",
@ -2421,7 +2420,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "1.0.1" "number-is-nan": "1.0.1"
} }
@ -2430,7 +2428,6 @@
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"requires": { "requires": {
"are-we-there-yet": "1.1.4", "are-we-there-yet": "1.1.4",
"console-control-strings": "1.1.0", "console-control-strings": "1.1.0",
@ -2442,20 +2439,27 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": { "requires": {
"code-point-at": "1.1.0", "code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0", "is-fullwidth-code-point": "1.0.0",
"strip-ansi": "3.0.1" "strip-ansi": "3.0.1"
} }
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
}
} }
} }
}, },
"diff": { "diff": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
"integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww=="
"dev": true
}, },
"doctrine": { "doctrine": {
"version": "2.1.0", "version": "2.1.0",
@ -4214,7 +4218,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz", "resolved": "https://registry.npmjs.org/get-port/-/get-port-2.1.0.tgz",
"integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=", "integrity": "sha1-h4P53OvR7qSVozThpqJR54iHqxo=",
"dev": true,
"requires": { "requires": {
"pinkie-promise": "2.0.1" "pinkie-promise": "2.0.1"
} }
@ -4311,8 +4314,7 @@
"growl": { "growl": {
"version": "1.10.3", "version": "1.10.3",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz",
"integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q=="
"dev": true
}, },
"growly": { "growly": {
"version": "1.3.0", "version": "1.3.0",
@ -4482,8 +4484,7 @@
"he": { "he": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
"dev": true
}, },
"hoek": { "hoek": {
"version": "4.2.1", "version": "4.2.1",
@ -4561,8 +4562,7 @@
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
"dev": true
}, },
"inquirer": { "inquirer": {
"version": "3.3.0", "version": "3.3.0",
@ -5554,6 +5554,15 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
}
} }
} }
}, },
@ -5675,7 +5684,6 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz",
"integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==",
"dev": true,
"requires": { "requires": {
"browser-stdout": "1.3.0", "browser-stdout": "1.3.0",
"commander": "2.11.0", "commander": "2.11.0",
@ -5692,14 +5700,12 @@
"commander": { "commander": {
"version": "2.11.0", "version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
"dev": true
}, },
"debug": { "debug": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
} }
@ -5707,14 +5713,12 @@
"has-flag": { "has-flag": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
"dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==",
"dev": true,
"requires": { "requires": {
"has-flag": "2.0.0" "has-flag": "2.0.0"
} }
@ -5862,8 +5866,7 @@
"node-version": { "node-version": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz",
"integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg=="
"dev": true
}, },
"normalize-package-data": { "normalize-package-data": {
"version": "2.4.0", "version": "2.4.0",
@ -6273,14 +6276,12 @@
"pinkie": { "pinkie": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
"dev": true
}, },
"pinkie-promise": { "pinkie-promise": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": { "requires": {
"pinkie": "2.0.4" "pinkie": "2.0.4"
} }
@ -6392,8 +6393,7 @@
"promise-polyfill": { "promise-polyfill": {
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz",
"integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc="
"dev": true
}, },
"prop-types": { "prop-types": {
"version": "15.6.1", "version": "15.6.1",
@ -6605,8 +6605,22 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz",
"integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk=" "integrity": "sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk="
},
"ws": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
"requires": {
"options": "0.0.6",
"ultron": "1.0.2"
} }
} }
}
},
"react-native-restart": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/react-native-restart/-/react-native-restart-0.0.6.tgz",
"integrity": "sha512-ysKvNOjCeCS8A4ouQkJ8DZRYH4wgPdPEJqqqSGFuNzK4eAi3VPOeneQ3w0HHYeOui5fc6fV9y9ClOB9LcKbKpQ=="
}, },
"react-proxy": { "react-proxy": {
"version": "1.1.8", "version": "1.1.8",
@ -7430,7 +7444,6 @@
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/shell-utils/-/shell-utils-1.0.9.tgz", "resolved": "https://registry.npmjs.org/shell-utils/-/shell-utils-1.0.9.tgz",
"integrity": "sha512-JbTHnKpMyj9TUUbL+Us2Rx2iVHFvH5QyQoke9SN1L0pueiZeO2Gzlzopmloi7oqObL4qtvdSuZPE3UfdIzmlag==", "integrity": "sha512-JbTHnKpMyj9TUUbL+Us2Rx2iVHFvH5QyQoke9SN1L0pueiZeO2Gzlzopmloi7oqObL4qtvdSuZPE3UfdIzmlag==",
"dev": true,
"requires": { "requires": {
"lodash": "4.17.5" "lodash": "4.17.5"
} }
@ -7906,14 +7919,12 @@
"tail": { "tail": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/tail/-/tail-1.2.3.tgz", "resolved": "https://registry.npmjs.org/tail/-/tail-1.2.3.tgz",
"integrity": "sha1-sI1vp5+5KIaWMaNBpRwUSXwcQlU=", "integrity": "sha1-sI1vp5+5KIaWMaNBpRwUSXwcQlU="
"dev": true
}, },
"telnet-client": { "telnet-client": {
"version": "0.15.3", "version": "0.15.3",
"resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-0.15.3.tgz", "resolved": "https://registry.npmjs.org/telnet-client/-/telnet-client-0.15.3.tgz",
"integrity": "sha512-GSfdzQV0BKIYsmeXq7bJFJ2wHeJud6icaIxCUf6QCGQUD6R0BBGbT1+yLDhq67JRdgRpwyPwUbV7JxFeRrZomQ==", "integrity": "sha512-GSfdzQV0BKIYsmeXq7bJFJ2wHeJud6icaIxCUf6QCGQUD6R0BBGbT1+yLDhq67JRdgRpwyPwUbV7JxFeRrZomQ==",
"dev": true,
"requires": { "requires": {
"bluebird": "3.5.1" "bluebird": "3.5.1"
} }
@ -8522,8 +8533,7 @@
"universalify": { "universalify": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
"integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc="
"dev": true
}, },
"unpipe": { "unpipe": {
"version": "1.0.0", "version": "1.0.0",
@ -8704,7 +8714,6 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
"integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
"dev": true,
"requires": { "requires": {
"string-width": "1.0.2" "string-width": "1.0.2"
}, },
@ -8713,7 +8722,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": { "requires": {
"number-is-nan": "1.0.1" "number-is-nan": "1.0.1"
} }
@ -8722,7 +8730,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": { "requires": {
"code-point-at": "1.1.0", "code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0", "is-fullwidth-code-point": "1.0.0",
@ -8798,12 +8805,11 @@
} }
}, },
"ws": { "ws": {
"version": "1.1.5", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.0.tgz",
"integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "integrity": "sha512-7KU/qkUXtJW9aa5WRKlo0puE1ejEoAgDb0D/Pt+lWpTkKF7Kp+MqFOtwNFwnuiYeeDpFjp0qyMniE84OjKIEqQ==",
"requires": { "requires": {
"options": "0.0.6", "async-limiter": "1.0.0"
"ultron": "1.0.2"
} }
}, },
"xcode": { "xcode": {

View File

@ -3,7 +3,8 @@
"version": "7.2.0", "version": "7.2.0",
"private": true, "private": true,
"scripts": { "scripts": {
"start": "REACT_DEBUGGER='todo' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow", "start-local-debug": "node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow",
"start": "REACT_DEBUGGER='echo nope' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow",
"start-ci": "REACT_DEBUGGER='todo' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow --nonPersistent", "start-ci": "REACT_DEBUGGER='todo' node node_modules/react-native/local-cli/cli.js start --platforms ios,android --skipflow --nonPersistent",
"android:dev": "react-native run-android", "android:dev": "react-native run-android",
"android:prod": "react-native run-android --configuration=release", "android:prod": "react-native run-android --configuration=release",
@ -12,10 +13,12 @@
"ios:pod:install": "cd ios && rm -rf ReactNativeFirebaseDemo.xcworkspace && pod install && cd .." "ios:pod:install": "cd ios && rm -rf ReactNativeFirebaseDemo.xcworkspace && pod install && cd .."
}, },
"dependencies": { "dependencies": {
"detox": "^7.2.0",
"mocha": "^4.0.1",
"react": "^16.2.0", "react": "^16.2.0",
"react-native": "^0.52.3", "react-native": "^0.52.3",
"detox": "^7.2.0", "react-native-restart": "0.0.6",
"mocha": "^4.0.1" "ws": "^5.1.0"
}, },
"devDependencies": { "devDependencies": {
"babel-cli": "^6.24.0", "babel-cli": "^6.24.0",