Compare commits
54 Commits
socketClos
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
113433d505 | ||
|
|
7d4fcd5c89 | ||
|
|
bb0a453c8e | ||
|
|
1f7f99f844 | ||
|
|
34aef6409e | ||
|
|
a5e396c628 | ||
|
|
b793911a9a | ||
|
|
65ccf53a3f | ||
|
|
417ac600b3 | ||
|
|
ab42502f39 | ||
|
|
c8693a17bd | ||
|
|
5072101b2c | ||
|
|
ebc4fc6d27 | ||
|
|
eb87500c72 | ||
|
|
7453aed769 | ||
|
|
0e7f3457c2 | ||
|
|
c6af8f728f | ||
|
|
aa94219ff8 | ||
|
|
bd0fd5623d | ||
|
|
58c516d6e2 | ||
|
|
b27f3825e1 | ||
|
|
f86fdce98c | ||
|
|
7aba85bf51 | ||
|
|
570a4915c3 | ||
|
|
f4645ce822 | ||
|
|
1cb311a899 | ||
|
|
95ae7b5c81 | ||
|
|
bd91614f42 | ||
|
|
b056904809 | ||
|
|
53fdc03b8e | ||
|
|
4cef5bbe17 | ||
|
|
95846a71fc | ||
|
|
ea1bb2e8a7 | ||
|
|
d00165f83c | ||
|
|
cdcd666673 | ||
|
|
5dd58665c3 | ||
|
|
59674c4c7b | ||
|
|
fc66549961 | ||
|
|
75afd35a6b | ||
|
|
e45bbff331 | ||
|
|
0de39b6d50 | ||
|
|
0f07346eac | ||
|
|
52945030ee | ||
|
|
b3e4d51404 | ||
|
|
b0ac68ee5a | ||
|
|
93143414af | ||
|
|
15e7b3c545 | ||
|
|
aec6937e19 | ||
|
|
6fa42c9438 | ||
|
|
6d623aaa4c | ||
|
|
f2c6261a7c | ||
|
|
2cb72832e0 | ||
|
|
55ac33732c | ||
|
|
ff3576578a |
85
README.md
85
README.md
@ -2,21 +2,29 @@
|
|||||||
|
|
||||||
node's [net](https://nodejs.org/api/net.html) API in React Native
|
node's [net](https://nodejs.org/api/net.html) API in React Native
|
||||||
|
|
||||||
This module is used by [Peel](http://www.peel.com/)
|
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
* Create a new react-native project. [Check react-native getting started](http://facebook.github.io/react-native/docs/getting-started.html#content)
|
- Create a new react-native project. [Check react-native getting started](http://facebook.github.io/react-native/docs/getting-started.html#content)
|
||||||
|
|
||||||
|
- In your project dir:
|
||||||
|
|
||||||
* In your project dir:
|
|
||||||
```
|
```
|
||||||
npm install --save react-native-tcp
|
npm install @hawkingnetwork/react-native-tcp --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## if using Cocoapods
|
||||||
|
|
||||||
|
Update the following line with your path to `node_modules/` and add it to your
|
||||||
|
podfile:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
pod 'TcpSockets', :path => '../node_modules/react-native-tcp'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Link in the native dependency
|
## Link in the native dependency
|
||||||
|
|
||||||
```
|
```
|
||||||
react-native link react-native-tcp
|
react-native link @hawkingnetwork/react-native-tcp
|
||||||
```
|
```
|
||||||
|
|
||||||
## Additional dependencies
|
## Additional dependencies
|
||||||
@ -24,28 +32,23 @@ react-native link react-native-tcp
|
|||||||
### Due to limitations in the react-native packager, streams need to be hacked in with [rn-nodeify](https://www.npmjs.com/package/rn-nodeify)
|
### Due to limitations in the react-native packager, streams need to be hacked in with [rn-nodeify](https://www.npmjs.com/package/rn-nodeify)
|
||||||
|
|
||||||
1. install rn-nodeify as a dev-dependency
|
1. install rn-nodeify as a dev-dependency
|
||||||
```
|
`npm install --save-dev rn-nodeify`
|
||||||
npm install --save-dev rn-nodeify
|
|
||||||
```
|
|
||||||
2. run rn-nodeify manually
|
2. run rn-nodeify manually
|
||||||
```
|
`rn-nodeify --install stream,process,util --hack`
|
||||||
rn-nodeify --install stream,process,util --hack
|
|
||||||
```
|
|
||||||
3. optionally you can add this as a postinstall script
|
3. optionally you can add this as a postinstall script
|
||||||
```
|
`"postinstall": "rn-nodeify --install stream,process,util --hack"`
|
||||||
"postinstall": "rn-nodeify --install stream,process,util --hack"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### package.json
|
### package.json
|
||||||
|
|
||||||
_only if you want to write require('net') in your javascript_
|
_only if you want to write require('net') or require('tls') in your javascript_
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"browser": {
|
"react-native": {
|
||||||
"net": "react-native-tcp"
|
"net": "@hawkingnetwork/react-native-tcp",
|
||||||
|
"tls": "@hawkingnetwork/react-native-tcp/tls"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -55,35 +58,41 @@ _only if you want to write require('net') in your javascript_
|
|||||||
_see/run [index.ios.js/index.android.js](examples/rctsockets) for a complete example, but basically it's just like net_
|
_see/run [index.ios.js/index.android.js](examples/rctsockets) for a complete example, but basically it's just like net_
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var net = require('net');
|
var net = require("net");
|
||||||
// OR, if not shimming via package.json "browser" field:
|
var net = require("tls");
|
||||||
// var net = require('react-native-tcp')
|
// OR, if not shimming via package.json "react-native" field:
|
||||||
|
// var net = require('@hawkingnetwork/react-native-tcp')
|
||||||
|
// var tls = require('@hawkingnetwork/react-native-tcp/tls')
|
||||||
|
|
||||||
var server = net.createServer(function(socket) {
|
var server = net
|
||||||
socket.write('excellent!');
|
.createServer(function(socket) {
|
||||||
}).listen(12345);
|
socket.write("excellent!");
|
||||||
|
})
|
||||||
|
.listen(12345);
|
||||||
|
|
||||||
var client = net.createConnection(12345);
|
var client = net.createConnection(12345);
|
||||||
|
|
||||||
client.on('error', function(error) {
|
client.on("error", function(error) {
|
||||||
console.log(error)
|
console.log(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('data', function(data) {
|
client.on("data", function(data) {
|
||||||
console.log('message was received', data)
|
console.log("message was received", data);
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
### TODO
|
### TLS support
|
||||||
|
|
||||||
add select tests from node's tests for net
|
TLS is only supported in the client interface. To use TLS, use the `tls.connect()`
|
||||||
|
syntax and not `socket = new tls.Socket()` syntax.
|
||||||
|
|
||||||
## Contributors
|
```
|
||||||
|
const socket = tls.connect({port: 50002, host:'electrum.villocq.com', rejectUnauthorized: false}, () => {
|
||||||
|
socket.write('{ "id": 5, "method": "blockchain.estimatefee", "params": [2] }\n')
|
||||||
|
console.log('Connected')
|
||||||
|
})
|
||||||
|
|
||||||
[Andy Prock](https://github.com/aprock)
|
socket.on('data', (data) => {
|
||||||
|
console.log('data:' + data.toString('ascii'))
|
||||||
PR's welcome!
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
_originally forked from [react-native-udp](https://github.com/tradle/react-native-udp)_
|
|
||||||
|
|||||||
@ -54,10 +54,10 @@ function TcpServer(connectionListener: (socket: Socket) => void) {
|
|||||||
util.inherits(TcpServer, EventEmitter);
|
util.inherits(TcpServer, EventEmitter);
|
||||||
|
|
||||||
TcpServer.prototype._debug = function() {
|
TcpServer.prototype._debug = function() {
|
||||||
if (__DEV__) {
|
// if (__DEV__) {
|
||||||
var args = [].slice.call(arguments);
|
// var args = [].slice.call(arguments);
|
||||||
console.log.apply(console, args);
|
// console.log.apply(console, args);
|
||||||
}
|
// }
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO : determine how to properly overload this with flow
|
// TODO : determine how to properly overload this with flow
|
||||||
|
|||||||
177
TcpSocket.js
177
TcpSocket.js
@ -8,15 +8,18 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
global.process = require('process'); // needed to make stream-browserify happy
|
if(!(global.process && global.process.nextTick)){
|
||||||
var Buffer = global.Buffer = global.Buffer || require('buffer').Buffer;
|
console.log('WHY AM I HERE?');
|
||||||
|
global.process = require('process'); // needed to make stream-browserify happy
|
||||||
|
}
|
||||||
|
var Buffer = global.Buffer || require('buffer').Buffer;
|
||||||
|
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
var stream = require('stream-browserify');
|
var stream = require('stream-browserify');
|
||||||
// var EventEmitter = require('events').EventEmitter;
|
// var EventEmitter = require('events').EventEmitter;
|
||||||
var ipRegex = require('ip-regex');
|
var ipRegex = require('ip-regex');
|
||||||
var {
|
var {
|
||||||
DeviceEventEmitter,
|
NativeEventEmitter,
|
||||||
NativeModules
|
NativeModules
|
||||||
} = require('react-native');
|
} = require('react-native');
|
||||||
var Sockets = NativeModules.TcpSockets;
|
var Sockets = NativeModules.TcpSockets;
|
||||||
@ -34,6 +37,7 @@ function TcpSocket(options: ?{ id: ?number }) {
|
|||||||
if (!(this instanceof TcpSocket)) {
|
if (!(this instanceof TcpSocket)) {
|
||||||
return new TcpSocket(options);
|
return new TcpSocket(options);
|
||||||
}
|
}
|
||||||
|
this.useSsl = false
|
||||||
|
|
||||||
if (options && options.id) {
|
if (options && options.id) {
|
||||||
// e.g. incoming server connections
|
// e.g. incoming server connections
|
||||||
@ -47,6 +51,7 @@ function TcpSocket(options: ?{ id: ?number }) {
|
|||||||
this._id = instances++;
|
this._id = instances++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._eventEmitter = new NativeEventEmitter(Sockets);
|
||||||
stream.Duplex.call(this, {});
|
stream.Duplex.call(this, {});
|
||||||
|
|
||||||
// ensure compatibility with node's EventEmitter
|
// ensure compatibility with node's EventEmitter
|
||||||
@ -59,6 +64,9 @@ function TcpSocket(options: ?{ id: ?number }) {
|
|||||||
|
|
||||||
this._state = STATE.DISCONNECTED;
|
this._state = STATE.DISCONNECTED;
|
||||||
|
|
||||||
|
// cache all client.send calls to this array if currently upgrading
|
||||||
|
this._upgradeCache = []
|
||||||
|
|
||||||
this.read(0);
|
this.read(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,10 +127,15 @@ TcpSocket.prototype.connect = function(options, callback) : TcpSocket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._state = STATE.CONNECTING;
|
this._state = STATE.CONNECTING;
|
||||||
this._debug('connecting, host:', host, 'port:', port);
|
|
||||||
|
|
||||||
this._destroyed = false;
|
this._destroyed = false;
|
||||||
Sockets.connect(this._id, host, Number(port), options);
|
if (this.useSsl) {
|
||||||
|
this._debug('connecting TLS, host:', host, 'port:', port);
|
||||||
|
Sockets.connectTls(this._id, host, Number(port), options);
|
||||||
|
} else {
|
||||||
|
this._debug('connecting, host:', host, 'port:', port);
|
||||||
|
Sockets.connect(this._id, host, Number(port), options);
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
@ -248,28 +261,47 @@ TcpSocket.prototype._registerEvents = function(): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._subs = [
|
this._subs = [
|
||||||
DeviceEventEmitter.addListener(
|
this._eventEmitter.addListener('connect', ev => {
|
||||||
'tcp-' + this._id + '-connect', this._onConnect.bind(this)
|
if (this._id !== ev.id) {
|
||||||
),
|
return;
|
||||||
DeviceEventEmitter.addListener(
|
}
|
||||||
'tcp-' + this._id + '-connection', this._onConnection.bind(this)
|
this._onConnect(ev.address);
|
||||||
),
|
}),
|
||||||
DeviceEventEmitter.addListener(
|
this._eventEmitter.addListener('connection', ev => {
|
||||||
'tcp-' + this._id + '-data', this._onData.bind(this)
|
if (this._id !== ev.id) {
|
||||||
),
|
return;
|
||||||
DeviceEventEmitter.addListener(
|
}
|
||||||
'tcp-' + this._id + '-close', this._onClose.bind(this)
|
this._onConnection(ev.info);
|
||||||
),
|
}),
|
||||||
DeviceEventEmitter.addListener(
|
this._eventEmitter.addListener('data', ev => {
|
||||||
'tcp-' + this._id + '-error', this._onError.bind(this)
|
if (this._id !== ev.id) {
|
||||||
)
|
return;
|
||||||
|
}
|
||||||
|
this._onData(ev.data);
|
||||||
|
}),
|
||||||
|
this._eventEmitter.addListener('close', ev => {
|
||||||
|
if (this._id !== ev.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onClose(ev.hadError);
|
||||||
|
}),
|
||||||
|
this._eventEmitter.addListener('error', ev => {
|
||||||
|
if (this._id !== ev.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onError(ev.error);
|
||||||
|
}),
|
||||||
|
this._eventEmitter.addListener('secureConnect', ev => {
|
||||||
|
if (this._id !== ev.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._onSecureConnect();
|
||||||
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
TcpSocket.prototype._unregisterEvents = function(): void {
|
TcpSocket.prototype._unregisterEvents = function(): void {
|
||||||
this._subs.forEach(function(listener) {
|
this._subs.forEach(e => e.remove());
|
||||||
listener.remove();
|
|
||||||
});
|
|
||||||
this._subs = [];
|
this._subs = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -324,12 +356,17 @@ TcpSocket.prototype._onClose = function(hadError: boolean): void {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TcpSocket.prototype._onError = function(error: string): void {
|
TcpSocket.prototype._onError = function(error: string): void {
|
||||||
this._debug('received', 'error');
|
this._debug('received', `error: ${error}`);
|
||||||
|
|
||||||
this.emit('error', normalizeError(error));
|
this.emit('onerror', normalizeError(error));
|
||||||
this.destroy();
|
this.destroy();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TcpSocket.prototype._onSecureConnect = function(error: string): void {
|
||||||
|
this._debug('received', 'secureConnect');
|
||||||
|
this.emit('secureConnect');
|
||||||
|
};
|
||||||
|
|
||||||
TcpSocket.prototype.write = function(chunk, encoding, cb) {
|
TcpSocket.prototype.write = function(chunk, encoding, cb) {
|
||||||
if (typeof chunk !== 'string' && !(Buffer.isBuffer(chunk))) {
|
if (typeof chunk !== 'string' && !(Buffer.isBuffer(chunk))) {
|
||||||
throw new TypeError(
|
throw new TypeError(
|
||||||
@ -342,27 +379,39 @@ TcpSocket.prototype.write = function(chunk, encoding, cb) {
|
|||||||
TcpSocket.prototype._write = function(buffer: any, encoding: ?String, callback: ?(err: ?Error) => void) : boolean {
|
TcpSocket.prototype._write = function(buffer: any, encoding: ?String, callback: ?(err: ?Error) => void) : boolean {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
callback = callback || noop;
|
||||||
|
|
||||||
if (this._state === STATE.DISCONNECTED) {
|
if (this._state === STATE.DISCONNECTED) {
|
||||||
throw new Error('Socket is not connected.');
|
return callback()
|
||||||
|
// return callback(new Error('Socket is not connected.'));
|
||||||
} else if (this._state === STATE.CONNECTING) {
|
} else if (this._state === STATE.CONNECTING) {
|
||||||
// we're ok, GCDAsyncSocket handles queueing internally
|
// we're ok, GCDAsyncSocket handles queueing internally
|
||||||
}
|
}
|
||||||
|
|
||||||
callback = callback || noop;
|
|
||||||
var str;
|
var str;
|
||||||
if (typeof buffer === 'string') {
|
if (typeof buffer === 'string') {
|
||||||
self._debug('socket.WRITE(): encoding as base64');
|
self._debug('socket.WRITE(): encoding as base64');
|
||||||
str = Base64Str.encode(buffer);
|
str = Base64Str.encode(buffer);
|
||||||
} else if (Buffer.isBuffer(buffer)) {
|
} else if (Buffer.isBuffer(buffer)) {
|
||||||
str = buffer.toString('base64');
|
str = buffer.toString('base64');
|
||||||
|
} else if (buffer instanceof Uint8Array) {
|
||||||
|
self._debug('socket.WRITE(): encoding from UInt8Array');
|
||||||
|
str = Base64Str.encode(Utf8ArrayToStr(buffer));
|
||||||
|
self._debug(str);
|
||||||
} else {
|
} else {
|
||||||
throw new TypeError(
|
throw new TypeError(
|
||||||
'Invalid data, chunk must be a string or buffer, not ' + typeof buffer);
|
'Invalid data, chunk must be a string or buffer, not ' + typeof buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._upgrading) {
|
||||||
|
self._debug('tls in progress, write added to queue');
|
||||||
|
this._upgradeCache.push({ str, callback })
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Sockets.write(this._id, str, function(err) {
|
Sockets.write(this._id, str, function(err) {
|
||||||
if (self._timeout) {
|
if (self._timeout) {
|
||||||
self._activeTimer(this._timeout.msecs);
|
self._activeTimer(self._timeout.msecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
err = normalizeError(err);
|
err = normalizeError(err);
|
||||||
@ -377,6 +426,40 @@ TcpSocket.prototype._write = function(buffer: any, encoding: ?String, callback:
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function Utf8ArrayToStr(array) {
|
||||||
|
var out, i, len, c;
|
||||||
|
var char2, char3;
|
||||||
|
|
||||||
|
out = "";
|
||||||
|
len = array.length;
|
||||||
|
i = 0;
|
||||||
|
while(i < len) {
|
||||||
|
c = array[i++];
|
||||||
|
switch(c >> 4)
|
||||||
|
{
|
||||||
|
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
|
||||||
|
// 0xxxxxxx
|
||||||
|
out += String.fromCharCode(c);
|
||||||
|
break;
|
||||||
|
case 12: case 13:
|
||||||
|
// 110x xxxx 10xx xxxx
|
||||||
|
char2 = array[i++];
|
||||||
|
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
// 1110 xxxx 10xx xxxx 10xx xxxx
|
||||||
|
char2 = array[i++];
|
||||||
|
char3 = array[i++];
|
||||||
|
out += String.fromCharCode(((c & 0x0F) << 12) |
|
||||||
|
((char2 & 0x3F) << 6) |
|
||||||
|
((char3 & 0x3F) << 0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
function setConnected(socket: TcpSocket, address: { port: number, address: string, family: string } ) {
|
function setConnected(socket: TcpSocket, address: { port: number, address: string, family: string } ) {
|
||||||
socket.writable = socket.readable = true;
|
socket.writable = socket.readable = true;
|
||||||
socket._state = STATE.CONNECTED;
|
socket._state = STATE.CONNECTED;
|
||||||
@ -423,6 +506,44 @@ TcpSocket.prototype._normalizeConnectArgs = function(args) {
|
|||||||
return typeof cb === 'function' ? [options, cb] : [options];
|
return typeof cb === 'function' ? [options, cb] : [options];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TcpSocket.prototype._enableSsl = function() {
|
||||||
|
this.useSsl = true
|
||||||
|
}
|
||||||
|
|
||||||
|
TcpSocket.prototype._upgradeToSecure = function(callback) {
|
||||||
|
// TODO : if we stored the original requested hostname somewhere, then we could do host name verification
|
||||||
|
var host = null;
|
||||||
|
var port = this._address.port;
|
||||||
|
this._debug('upgrading to TLS, host:', host, 'port:', port);
|
||||||
|
this._upgrading = true;
|
||||||
|
Sockets.upgradeToSecure(this._id, host, port, () => {
|
||||||
|
// emit all cached requests
|
||||||
|
setTimeout(() => {
|
||||||
|
while (this._upgradeCache.length) {
|
||||||
|
const cacheElement = this._upgradeCache.shift()
|
||||||
|
this._debug('flushing tls cache queue', cacheElement);
|
||||||
|
const self = this;
|
||||||
|
Sockets.write(this._id, cacheElement.str, function (err) {
|
||||||
|
if (self._timeout) {
|
||||||
|
self._activeTimer(self._timeout.msecs);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = normalizeError(err);
|
||||||
|
if (err) {
|
||||||
|
self._debug('write failed', err);
|
||||||
|
return cacheElement.callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheElement.callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this._upgrading = false;
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// unimplemented net.Socket apis
|
// unimplemented net.Socket apis
|
||||||
TcpSocket.prototype.ref =
|
TcpSocket.prototype.ref =
|
||||||
TcpSocket.prototype.unref =
|
TcpSocket.prototype.unref =
|
||||||
|
|||||||
@ -13,7 +13,10 @@ var ipRegex = require('ip-regex');
|
|||||||
var Socket = require('./TcpSocket');
|
var Socket = require('./TcpSocket');
|
||||||
var Server = require('./TcpServer');
|
var Server = require('./TcpServer');
|
||||||
|
|
||||||
exports.createServer = function(connectionListener: (socket: Socket) => void) : Server {
|
exports.createServer = function(opts: any, connectionListener: (socket: Socket) => void) : Server {
|
||||||
|
if (typeof opts === 'function' && !connectionListener) {
|
||||||
|
return new Server(opts);
|
||||||
|
}
|
||||||
return new Server(connectionListener);
|
return new Server(connectionListener);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
23
TcpSockets.podspec
Normal file
23
TcpSockets.podspec
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
require 'json'
|
||||||
|
|
||||||
|
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
||||||
|
|
||||||
|
Pod::Spec.new do |s|
|
||||||
|
|
||||||
|
s.name = 'TcpSockets'
|
||||||
|
s.version = package['version']
|
||||||
|
s.summary = package['description']
|
||||||
|
s.homepage = package['repository']['url']
|
||||||
|
s.license = package['license']
|
||||||
|
s.author = package['author']
|
||||||
|
s.source = { :git => s.homepage, :tag => 'v#{s.version}' }
|
||||||
|
|
||||||
|
s.requires_arc = true
|
||||||
|
s.ios.deployment_target = '8.0'
|
||||||
|
s.tvos.deployment_target = '9.0'
|
||||||
|
|
||||||
|
s.preserve_paths = 'README.md', 'package.json', '**/*.js'
|
||||||
|
s.source_files = 'ios/**/*.{h,m}'
|
||||||
|
s.dependency 'React'
|
||||||
|
|
||||||
|
end
|
||||||
6
android/.classpath
Normal file
6
android/.classpath
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
||||||
|
<classpathentry kind="output" path="bin/default"/>
|
||||||
|
</classpath>
|
||||||
23
android/.project
Normal file
23
android/.project
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>@hawkingnetwork_react-native-tcp</name>
|
||||||
|
<comment>Project @hawkingnetwork_react-native-tcp created by Buildship.</comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
2
android/.settings/org.eclipse.buildship.core.prefs
Normal file
2
android/.settings/org.eclipse.buildship.core.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
connection.project.dir=../../../../android
|
||||||
|
eclipse.preferences.version=1
|
||||||
@ -1,10 +1,11 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
|
google()
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:1.2.3'
|
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,5 +42,5 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.facebook.react:react-native:+'
|
compile 'com.facebook.react:react-native:+'
|
||||||
compile 'com.koushikdutta.async:androidasync:2.1.6'
|
compile 'com.koushikdutta.async:androidasync:2.+'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ public interface TcpSocketListener {
|
|||||||
void onConnection(Integer serverId, Integer clientId, InetSocketAddress socketAddress);
|
void onConnection(Integer serverId, Integer clientId, InetSocketAddress socketAddress);
|
||||||
|
|
||||||
// client and server
|
// client and server
|
||||||
|
void onSecureConnect(Integer id);
|
||||||
void onConnect(Integer id, InetSocketAddress socketAddress);
|
void onConnect(Integer id, InetSocketAddress socketAddress);
|
||||||
void onData(Integer id, byte[] data);
|
void onData(Integer id, byte[] data);
|
||||||
void onClose(Integer id, String error);
|
void onClose(Integer id, String error);
|
||||||
|
|||||||
@ -1,15 +1,11 @@
|
|||||||
package com.peel.react;
|
package com.peel.react;
|
||||||
|
|
||||||
import android.support.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
import android.os.Build;
|
||||||
|
|
||||||
import com.koushikdutta.async.AsyncNetworkSocket;
|
import com.facebook.react.bridge.Callback;
|
||||||
import com.koushikdutta.async.AsyncServer;
|
import com.koushikdutta.async.*;
|
||||||
import com.koushikdutta.async.AsyncServerSocket;
|
|
||||||
import com.koushikdutta.async.AsyncSocket;
|
|
||||||
import com.koushikdutta.async.ByteBufferList;
|
|
||||||
import com.koushikdutta.async.DataEmitter;
|
|
||||||
import com.koushikdutta.async.Util;
|
|
||||||
import com.koushikdutta.async.callback.CompletedCallback;
|
import com.koushikdutta.async.callback.CompletedCallback;
|
||||||
import com.koushikdutta.async.callback.ConnectCallback;
|
import com.koushikdutta.async.callback.ConnectCallback;
|
||||||
import com.koushikdutta.async.callback.DataCallback;
|
import com.koushikdutta.async.callback.DataCallback;
|
||||||
@ -21,6 +17,20 @@ import java.net.InetAddress;
|
|||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier;
|
||||||
|
import javax.net.ssl.KeyManagerFactory;
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.SSLEngine;
|
||||||
|
import javax.net.ssl.SSLEngineResult;
|
||||||
|
import javax.net.ssl.SSLEngineResult.HandshakeStatus;
|
||||||
|
import javax.net.ssl.SSLEngineResult.Status;
|
||||||
|
import javax.net.ssl.SSLException;
|
||||||
|
import javax.net.ssl.SSLSession;
|
||||||
|
import javax.net.ssl.TrustManager;
|
||||||
|
import javax.net.ssl.TrustManagerFactory;
|
||||||
|
import javax.net.ssl.X509TrustManager;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by aprock on 12/29/15.
|
* Created by aprock on 12/29/15.
|
||||||
*/
|
*/
|
||||||
@ -32,6 +42,11 @@ public final class TcpSocketManager {
|
|||||||
|
|
||||||
private int mInstances = 5000;
|
private int mInstances = 5000;
|
||||||
|
|
||||||
|
static SSLContext defaultSSLContext;
|
||||||
|
static SSLContext trustAllSSLContext;
|
||||||
|
static TrustManager[] trustAllManagers;
|
||||||
|
static HostnameVerifier trustAllVerifier;
|
||||||
|
|
||||||
public TcpSocketManager(TcpSocketListener listener) throws IOException {
|
public TcpSocketManager(TcpSocketListener listener) throws IOException {
|
||||||
mListener = new WeakReference<TcpSocketListener>(listener);
|
mListener = new WeakReference<TcpSocketListener>(listener);
|
||||||
}
|
}
|
||||||
@ -42,7 +57,7 @@ public final class TcpSocketManager {
|
|||||||
public void onCompleted(Exception ex) {
|
public void onCompleted(Exception ex) {
|
||||||
TcpSocketListener listener = mListener.get();
|
TcpSocketListener listener = mListener.get();
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onClose(cId, ex==null?null:ex.getMessage());
|
listener.onClose(cId, ex == null ? null : ex.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -71,7 +86,8 @@ public final class TcpSocketManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void listen(final Integer cId, final String host, final Integer port) throws UnknownHostException, IOException {
|
public void listen(final Integer cId, final String host, final Integer port)
|
||||||
|
throws UnknownHostException, IOException {
|
||||||
// resolve the address
|
// resolve the address
|
||||||
final InetSocketAddress socketAddress;
|
final InetSocketAddress socketAddress;
|
||||||
if (host != null) {
|
if (host != null) {
|
||||||
@ -97,7 +113,8 @@ public final class TcpSocketManager {
|
|||||||
mClients.put(mInstances, socket);
|
mClients.put(mInstances, socket);
|
||||||
|
|
||||||
AsyncNetworkSocket socketConverted = Util.getWrappedSocket(socket, AsyncNetworkSocket.class);
|
AsyncNetworkSocket socketConverted = Util.getWrappedSocket(socket, AsyncNetworkSocket.class);
|
||||||
InetSocketAddress remoteAddress = socketConverted != null ? socketConverted.getRemoteAddress() : socketAddress;
|
InetSocketAddress remoteAddress = socketConverted != null ? socketConverted.getRemoteAddress()
|
||||||
|
: socketAddress;
|
||||||
|
|
||||||
TcpSocketListener listener = mListener.get();
|
TcpSocketListener listener = mListener.get();
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
@ -119,7 +136,8 @@ public final class TcpSocketManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void connect(final Integer cId, final @Nullable String host, final Integer port) throws UnknownHostException, IOException {
|
public void connect(final Integer cId, final @Nullable String host, final Integer port, final boolean useTls)
|
||||||
|
throws UnknownHostException, IOException {
|
||||||
// resolve the address
|
// resolve the address
|
||||||
final InetSocketAddress socketAddress;
|
final InetSocketAddress socketAddress;
|
||||||
if (host != null) {
|
if (host != null) {
|
||||||
@ -131,21 +149,128 @@ public final class TcpSocketManager {
|
|||||||
mServer.connectSocket(socketAddress, new ConnectCallback() {
|
mServer.connectSocket(socketAddress, new ConnectCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onConnectCompleted(Exception ex, AsyncSocket socket) {
|
public void onConnectCompleted(Exception ex, AsyncSocket socket) {
|
||||||
TcpSocketListener listener = mListener.get();
|
if (useTls) {
|
||||||
if (ex == null) {
|
try {
|
||||||
mClients.put(cId, socket);
|
// critical extension 2.5.29.15 is implemented improperly prior to 4.0.3.
|
||||||
setSocketCallbacks(cId, socket);
|
// https://code.google.com/p/android/issues/detail?id=9307
|
||||||
|
// https://groups.google.com/forum/?fromgroups=#!topic/netty/UCfqPPk5O4s
|
||||||
|
// certs that use this extension will throw in Cipher.java.
|
||||||
|
// fallback is to use a custom SSLContext, and hack around the x509 extension.
|
||||||
|
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
|
||||||
|
throw new Exception();
|
||||||
|
defaultSSLContext = SSLContext.getInstance("Default");
|
||||||
|
} catch (Exception ex2) {
|
||||||
|
try {
|
||||||
|
defaultSSLContext = SSLContext.getInstance("TLS");
|
||||||
|
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
|
||||||
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return new X509Certificate[0];
|
||||||
|
}
|
||||||
|
|
||||||
if (listener != null) {
|
public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
|
||||||
listener.onConnect(cId, socketAddress);
|
String authType) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
|
||||||
|
String authType) {
|
||||||
|
for (X509Certificate cert : certs) {
|
||||||
|
if (cert != null && cert.getCriticalExtensionOIDs() != null)
|
||||||
|
cert.getCriticalExtensionOIDs().remove("2.5.29.15");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} };
|
||||||
|
defaultSSLContext.init(null, trustAllCerts, null);
|
||||||
|
} catch (Exception ex3) {
|
||||||
|
ex2.printStackTrace();
|
||||||
|
ex3.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (listener != null) {
|
|
||||||
listener.onError(cId, ex.getMessage());
|
try {
|
||||||
|
trustAllSSLContext = SSLContext.getInstance("TLS");
|
||||||
|
trustAllManagers = new TrustManager[] { new X509TrustManager() {
|
||||||
|
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
||||||
|
return new X509Certificate[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkClientTrusted(java.security.cert.X509Certificate[] certs,
|
||||||
|
String authType) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkServerTrusted(java.security.cert.X509Certificate[] certs,
|
||||||
|
String authType) {
|
||||||
|
}
|
||||||
|
} };
|
||||||
|
trustAllSSLContext.init(null, trustAllManagers, null);
|
||||||
|
// trustAllVerifier = (hostname, session) -> true;
|
||||||
|
} catch (Exception ex2) {
|
||||||
|
ex2.printStackTrace();
|
||||||
|
}
|
||||||
|
AsyncSSLSocketWrapper.handshake(socket, socketAddress.getHostName(), socketAddress.getPort(),
|
||||||
|
trustAllSSLContext.createSSLEngine(), trustAllManagers, new HostnameVerifier() {
|
||||||
|
@Override
|
||||||
|
public boolean verify(String s, SSLSession sslSession) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}, true, new AsyncSSLSocketWrapper.HandshakeCallback() {
|
||||||
|
@Override
|
||||||
|
public void onHandshakeCompleted(Exception e, AsyncSSLSocket socket) {
|
||||||
|
onConnectionCompleted(e, socket, cId, socketAddress);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
onConnectionCompleted(ex, socket, cId, socketAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onConnectionCompleted(Exception ex, AsyncSocket socket, Integer cId, InetSocketAddress socketAddress) {
|
||||||
|
TcpSocketListener listener = mListener.get();
|
||||||
|
mClients.put(cId, socket);
|
||||||
|
if (ex == null) {
|
||||||
|
setSocketCallbacks(cId, socket);
|
||||||
|
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onConnect(cId, socketAddress);
|
||||||
|
}
|
||||||
|
} else if (listener != null) {
|
||||||
|
listener.onError(cId, "unable to open socket: " + ex);
|
||||||
|
close(cId);
|
||||||
|
} else {
|
||||||
|
close(cId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void upgradeToSecure(final Integer cId, String host, Integer port, final Callback callback) {
|
||||||
|
Object existingSocket = mClients.get(cId);
|
||||||
|
if (existingSocket != null && existingSocket instanceof AsyncSocket) {
|
||||||
|
AsyncSSLSocketWrapper.handshake((AsyncSocket) existingSocket, host, port,
|
||||||
|
AsyncSSLSocketWrapper.getDefaultSSLContext().createSSLEngine(), null, null, true,
|
||||||
|
new AsyncSSLSocketWrapper.HandshakeCallback() {
|
||||||
|
@Override
|
||||||
|
public void onHandshakeCompleted(Exception ex, AsyncSSLSocket upgradedSocket) {
|
||||||
|
TcpSocketListener listener = mListener.get();
|
||||||
|
mClients.put(cId, upgradedSocket);
|
||||||
|
if (ex == null) {
|
||||||
|
setSocketCallbacks(cId, upgradedSocket);
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onSecureConnect(cId);
|
||||||
|
}
|
||||||
|
if (callback != null) {
|
||||||
|
callback.invoke();
|
||||||
|
}
|
||||||
|
} else if (listener != null) {
|
||||||
|
listener.onError(cId, "unable to upgrade socket to tls: " + ex);
|
||||||
|
close(cId);
|
||||||
|
} else {
|
||||||
|
close(cId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void write(final Integer cId, final byte[] data) {
|
public void write(final Integer cId, final byte[] data) {
|
||||||
Object socket = mClients.get(cId);
|
Object socket = mClients.get(cId);
|
||||||
if (socket != null && socket instanceof AsyncSocket) {
|
if (socket != null && socket instanceof AsyncSocket) {
|
||||||
@ -164,7 +289,7 @@ public final class TcpSocketManager {
|
|||||||
} else {
|
} else {
|
||||||
TcpSocketListener listener = mListener.get();
|
TcpSocketListener listener = mListener.get();
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onError(cId, "unable to find socket");
|
listener.onError(cId, "unable to find socket");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package com.peel.react;
|
package com.peel.react;
|
||||||
|
|
||||||
import android.support.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
|
|
||||||
import com.facebook.common.logging.FLog;
|
import com.facebook.common.logging.FLog;
|
||||||
@ -21,6 +21,7 @@ import com.facebook.react.bridge.WritableMap;
|
|||||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
@ -35,8 +36,11 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
private boolean mShuttingDown = false;
|
private boolean mShuttingDown = false;
|
||||||
private TcpSocketManager socketManager;
|
private TcpSocketManager socketManager;
|
||||||
|
|
||||||
|
private ReactContext mReactContext;
|
||||||
|
|
||||||
public TcpSockets(ReactApplicationContext reactContext) {
|
public TcpSockets(ReactApplicationContext reactContext) {
|
||||||
super(reactContext);
|
super(reactContext);
|
||||||
|
mReactContext = reactContext;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
socketManager = new TcpSocketManager(this);
|
socketManager = new TcpSocketManager(this);
|
||||||
@ -73,6 +77,12 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendEvent(String eventName, WritableMap params) {
|
||||||
|
mReactContext
|
||||||
|
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
||||||
|
.emit(eventName, params);
|
||||||
|
}
|
||||||
|
|
||||||
@ReactMethod
|
@ReactMethod
|
||||||
public void listen(final Integer cId, final String host, final Integer port) {
|
public void listen(final Integer cId, final String host, final Integer port) {
|
||||||
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
||||||
@ -98,7 +108,7 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
protected void doInBackgroundGuarded(Void... params) {
|
protected void doInBackgroundGuarded(Void... params) {
|
||||||
// NOTE : ignoring options for now, just use the available interface.
|
// NOTE : ignoring options for now, just use the available interface.
|
||||||
try {
|
try {
|
||||||
socketManager.connect(cId, host, port);
|
socketManager.connect(cId, host, port, false);
|
||||||
} catch (UnknownHostException uhe) {
|
} catch (UnknownHostException uhe) {
|
||||||
FLog.e(TAG, "connect", uhe);
|
FLog.e(TAG, "connect", uhe);
|
||||||
onError(cId, uhe.getMessage());
|
onError(cId, uhe.getMessage());
|
||||||
@ -110,6 +120,35 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
}.execute();
|
}.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
public void connectTls(final Integer cId, final @Nullable String host, final Integer port, final ReadableMap options) {
|
||||||
|
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
||||||
|
@Override
|
||||||
|
protected void doInBackgroundGuarded(Void... params) {
|
||||||
|
// NOTE : ignoring options for now, just use the available interface.
|
||||||
|
try {
|
||||||
|
socketManager.connect(cId, host, port, true);
|
||||||
|
} catch (UnknownHostException uhe) {
|
||||||
|
FLog.e(TAG, "connectTls", uhe);
|
||||||
|
onError(cId, uhe.getMessage());
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
FLog.e(TAG, "connectTls", ioe);
|
||||||
|
onError(cId, ioe.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
public void upgradeToSecure(final Integer cId, final String host, final Integer port, final Callback callback) {
|
||||||
|
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
||||||
|
@Override
|
||||||
|
protected void doInBackgroundGuarded(Void... params) {
|
||||||
|
socketManager.upgradeToSecure(cId, host, port, callback);
|
||||||
|
}
|
||||||
|
}.execute();
|
||||||
|
}
|
||||||
|
|
||||||
@ReactMethod
|
@ReactMethod
|
||||||
public void write(final Integer cId, final String base64String, final Callback callback) {
|
public void write(final Integer cId, final String base64String, final Callback callback) {
|
||||||
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
|
||||||
@ -146,35 +185,53 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
WritableMap eventParams = Arguments.createMap();
|
WritableMap eventParams = Arguments.createMap();
|
||||||
eventParams.putInt("id", clientId);
|
eventParams.putInt("id", serverId);
|
||||||
|
|
||||||
|
WritableMap infoParams = Arguments.createMap();
|
||||||
|
infoParams.putInt("id", clientId);
|
||||||
|
|
||||||
|
final InetAddress address = socketAddress.getAddress();
|
||||||
|
|
||||||
WritableMap addressParams = Arguments.createMap();
|
WritableMap addressParams = Arguments.createMap();
|
||||||
addressParams.putString("address", socketAddress.getHostName());
|
addressParams.putString("address", address.getHostAddress());
|
||||||
addressParams.putInt("port", socketAddress.getPort());
|
addressParams.putInt("port", socketAddress.getPort());
|
||||||
addressParams.putString("family", socketAddress.getAddress() instanceof Inet6Address ? "IPv6" : "IPv4");
|
addressParams.putString("family", address instanceof Inet6Address ? "IPv6" : "IPv4");
|
||||||
|
|
||||||
eventParams.putMap("address", addressParams);
|
infoParams.putMap("address", addressParams);
|
||||||
|
eventParams.putMap("info", infoParams);
|
||||||
|
|
||||||
ReactContext reactContext = TcpSockets.this.getReactApplicationContext();
|
sendEvent("connection", eventParams);
|
||||||
reactContext
|
|
||||||
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
||||||
.emit("tcp-" + serverId + "-connection", eventParams);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnect(Integer id, InetSocketAddress address) {
|
public void onConnect(Integer id, InetSocketAddress socketAddress) {
|
||||||
if (mShuttingDown) {
|
if (mShuttingDown) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
WritableMap eventParams = Arguments.createMap();
|
WritableMap eventParams = Arguments.createMap();
|
||||||
eventParams.putString("address", address.getHostName());
|
eventParams.putInt("id", id);
|
||||||
eventParams.putInt("port", address.getPort());
|
|
||||||
eventParams.putString("family", address.getAddress() instanceof Inet6Address ? "IPv6" : "IPv4");
|
|
||||||
|
|
||||||
ReactContext reactContext = TcpSockets.this.getReactApplicationContext();
|
final InetAddress address = socketAddress.getAddress();
|
||||||
reactContext
|
|
||||||
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
WritableMap addressParams = Arguments.createMap();
|
||||||
.emit("tcp-" + id + "-connect", eventParams);
|
addressParams.putString("address", address.getHostAddress());
|
||||||
|
addressParams.putInt("port", socketAddress.getPort());
|
||||||
|
addressParams.putString("family", address instanceof Inet6Address ? "IPv6" : "IPv4");
|
||||||
|
|
||||||
|
eventParams.putMap("address", addressParams);
|
||||||
|
|
||||||
|
sendEvent("connect", eventParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSecureConnect(Integer id) {
|
||||||
|
if (mShuttingDown) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WritableMap eventParams = Arguments.createMap();
|
||||||
|
eventParams.putInt("id", id);
|
||||||
|
|
||||||
|
sendEvent("secureConnect", eventParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -182,10 +239,11 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
if (mShuttingDown) {
|
if (mShuttingDown) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ReactContext reactContext = TcpSockets.this.getReactApplicationContext();
|
WritableMap eventParams = Arguments.createMap();
|
||||||
reactContext
|
eventParams.putInt("id", id);
|
||||||
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
eventParams.putString("data", Base64.encodeToString(data, Base64.NO_WRAP));
|
||||||
.emit("tcp-" + id + "-data", Base64.encodeToString(data, Base64.NO_WRAP));
|
|
||||||
|
sendEvent("data", eventParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -197,10 +255,11 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
onError(id, error);
|
onError(id, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReactContext reactContext = TcpSockets.this.getReactApplicationContext();
|
WritableMap eventParams = Arguments.createMap();
|
||||||
reactContext
|
eventParams.putInt("id", id);
|
||||||
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
eventParams.putBoolean("hadError", error != null);
|
||||||
.emit("tcp-" + id + "-close", error != null);
|
|
||||||
|
sendEvent("close", eventParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -208,9 +267,12 @@ public final class TcpSockets extends ReactContextBaseJavaModule implements TcpS
|
|||||||
if (mShuttingDown) {
|
if (mShuttingDown) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ReactContext reactContext = TcpSockets.this.getReactApplicationContext();
|
|
||||||
reactContext
|
WritableMap eventParams = Arguments.createMap();
|
||||||
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
eventParams.putInt("id", id);
|
||||||
.emit("tcp-" + id + "-error", error);
|
eventParams.putString("error", error);
|
||||||
|
|
||||||
|
sendEvent("error", eventParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,6 @@ public final class TcpSocketsModule implements ReactPackage {
|
|||||||
return modules;
|
return modules;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Class<? extends JavaScriptModule>> createJSModules() {
|
public List<Class<? extends JavaScriptModule>> createJSModules() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|||||||
3
examples/rctsockets/.babelrc
Normal file
3
examples/rctsockets/.babelrc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"presets": ["react-native"]
|
||||||
|
}
|
||||||
@ -1,29 +1,18 @@
|
|||||||
[ignore]
|
[ignore]
|
||||||
|
; We fork some components by platform
|
||||||
# We fork some components by platform.
|
|
||||||
.*/*[.]android.js
|
.*/*[.]android.js
|
||||||
|
|
||||||
# Ignore templates with `@flow` in header
|
; Ignore "BUCK" generated dirs
|
||||||
.*/local-cli/generator.*
|
|
||||||
|
|
||||||
# Ignore malformed json
|
|
||||||
.*/node_modules/y18n/test/.*\.json
|
|
||||||
|
|
||||||
# Ignore the website subdir
|
|
||||||
<PROJECT_ROOT>/website/.*
|
|
||||||
|
|
||||||
# Ignore BUCK generated dirs
|
|
||||||
<PROJECT_ROOT>/\.buckd/
|
<PROJECT_ROOT>/\.buckd/
|
||||||
|
|
||||||
# Ignore unexpected extra @providesModule
|
; Ignore unexpected extra "@providesModule"
|
||||||
.*/node_modules/commoner/test/source/widget/share.js
|
|
||||||
.*/node_modules/.*/node_modules/fbjs/.*
|
.*/node_modules/.*/node_modules/fbjs/.*
|
||||||
|
|
||||||
# Ignore duplicate module providers
|
; Ignore duplicate module providers
|
||||||
# For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root
|
; For RN Apps installed via npm, "Libraries" folder is inside
|
||||||
|
; "node_modules/react-native" but in the source repo it is in the root
|
||||||
.*/Libraries/react-native/React.js
|
.*/Libraries/react-native/React.js
|
||||||
.*/Libraries/react-native/ReactNative.js
|
.*/Libraries/react-native/ReactNative.js
|
||||||
.*/node_modules/jest-runtime/build/__tests__/.*
|
|
||||||
|
|
||||||
[include]
|
[include]
|
||||||
|
|
||||||
@ -35,25 +24,21 @@ flow/
|
|||||||
[options]
|
[options]
|
||||||
module.system=haste
|
module.system=haste
|
||||||
|
|
||||||
esproposal.class_static_fields=enable
|
|
||||||
esproposal.class_instance_fields=enable
|
|
||||||
|
|
||||||
experimental.strict_type_args=true
|
experimental.strict_type_args=true
|
||||||
|
|
||||||
munge_underscores=true
|
munge_underscores=true
|
||||||
|
|
||||||
module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub'
|
|
||||||
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
|
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
|
||||||
|
|
||||||
suppress_type=$FlowIssue
|
suppress_type=$FlowIssue
|
||||||
suppress_type=$FlowFixMe
|
suppress_type=$FlowFixMe
|
||||||
suppress_type=$FixMe
|
suppress_type=$FixMe
|
||||||
|
|
||||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-3]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
|
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
|
||||||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-3]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
|
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
|
||||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
|
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
|
||||||
|
|
||||||
unsafe.enable_getters_and_setters=true
|
unsafe.enable_getters_and_setters=true
|
||||||
|
|
||||||
[version]
|
[version]
|
||||||
^0.33.0
|
^0.36.0
|
||||||
|
|||||||
1
examples/rctsockets/.gitattributes
vendored
Normal file
1
examples/rctsockets/.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.pbxproj -text
|
||||||
16
examples/rctsockets/.gitignore
vendored
16
examples/rctsockets/.gitignore
vendored
@ -22,12 +22,13 @@ DerivedData
|
|||||||
*.xcuserstate
|
*.xcuserstate
|
||||||
project.xcworkspace
|
project.xcworkspace
|
||||||
|
|
||||||
# Android/IJ
|
# Android/IntelliJ
|
||||||
#
|
#
|
||||||
*.iml
|
build/
|
||||||
.idea
|
.idea
|
||||||
.gradle
|
.gradle
|
||||||
local.properties
|
local.properties
|
||||||
|
*.iml
|
||||||
|
|
||||||
# node.js
|
# node.js
|
||||||
#
|
#
|
||||||
@ -39,3 +40,14 @@ buck-out/
|
|||||||
\.buckd/
|
\.buckd/
|
||||||
android/app/libs
|
android/app/libs
|
||||||
*.keystore
|
*.keystore
|
||||||
|
|
||||||
|
# fastlane
|
||||||
|
#
|
||||||
|
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
|
||||||
|
# screenshots whenever they are needed.
|
||||||
|
# For more information about the recommended setup visit:
|
||||||
|
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
|
||||||
|
|
||||||
|
fastlane/report.xml
|
||||||
|
fastlane/Preview.html
|
||||||
|
fastlane/screenshots
|
||||||
|
|||||||
12
examples/rctsockets/__tests__/index.android.js
Normal file
12
examples/rctsockets/__tests__/index.android.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import 'react-native';
|
||||||
|
import React from 'react';
|
||||||
|
import Index from '../index.android.js';
|
||||||
|
|
||||||
|
// Note: test renderer must be required after react-native.
|
||||||
|
import renderer from 'react-test-renderer';
|
||||||
|
|
||||||
|
it('renders correctly', () => {
|
||||||
|
const tree = renderer.create(
|
||||||
|
<Index />
|
||||||
|
);
|
||||||
|
});
|
||||||
12
examples/rctsockets/__tests__/index.ios.js
Normal file
12
examples/rctsockets/__tests__/index.ios.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import 'react-native';
|
||||||
|
import React from 'react';
|
||||||
|
import Index from '../index.ios.js';
|
||||||
|
|
||||||
|
// Note: test renderer must be required after react-native.
|
||||||
|
import renderer from 'react-test-renderer';
|
||||||
|
|
||||||
|
it('renders correctly', () => {
|
||||||
|
const tree = renderer.create(
|
||||||
|
<Index />
|
||||||
|
);
|
||||||
|
});
|
||||||
@ -10,6 +10,6 @@ public class MainActivity extends ReactActivity {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected String getMainComponentName() {
|
protected String getMainComponentName() {
|
||||||
return "RctSockets";
|
return "rctsockets";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
<resources>
|
<resources>
|
||||||
|
<string name="app_name">rctsockets</string>
|
||||||
|
|
||||||
<string name="app_name">RctSockets</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
rootProject.name = 'RctSockets'
|
rootProject.name = 'rctsockets'
|
||||||
|
|
||||||
include ':app'
|
|
||||||
include ':react-native-tcp'
|
include ':react-native-tcp'
|
||||||
project(':react-native-tcp').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-tcp/android')
|
project(':react-native-tcp').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-tcp/android')
|
||||||
|
|
||||||
|
include ':app'
|
||||||
|
|||||||
@ -48,6 +48,10 @@ class RctSockets extends Component {
|
|||||||
socket.on('error', (error) => {
|
socket.on('error', (error) => {
|
||||||
this.updateChatter('error ' + error);
|
this.updateChatter('error ' + error);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on('close', (error) => {
|
||||||
|
this.updateChatter('server client closed ' + (error ? error : ''));
|
||||||
|
});
|
||||||
}).listen(serverPort, () => {
|
}).listen(serverPort, () => {
|
||||||
this.updateChatter('opened server on ' + JSON.stringify(server.address()));
|
this.updateChatter('opened server on ' + JSON.stringify(server.address()));
|
||||||
});
|
});
|
||||||
@ -56,6 +60,10 @@ class RctSockets extends Component {
|
|||||||
this.updateChatter('error ' + error);
|
this.updateChatter('error ' + error);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.on('close', () => {
|
||||||
|
this.updateChatter('server close');
|
||||||
|
});
|
||||||
|
|
||||||
let client = net.createConnection(serverPort, () => {
|
let client = net.createConnection(serverPort, () => {
|
||||||
this.updateChatter('opened client on ' + JSON.stringify(client.address()));
|
this.updateChatter('opened client on ' + JSON.stringify(client.address()));
|
||||||
client.write('Hello, server! Love, Client.');
|
client.write('Hello, server! Love, Client.');
|
||||||
@ -121,4 +129,4 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
AppRegistry.registerComponent('RctSockets', () => RctSockets);
|
AppRegistry.registerComponent('rctsockets', () => RctSockets);
|
||||||
|
|||||||
@ -129,4 +129,4 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
AppRegistry.registerComponent('RctSockets', () => RctSockets);
|
AppRegistry.registerComponent('rctsockets', () => RctSockets);
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
||||||
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
||||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||||
00E356F31AD99517003FC87E /* RctSocketsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RctSocketsTests.m */; };
|
00E356F31AD99517003FC87E /* rctsocketsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* rctsocketsTests.m */; };
|
||||||
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
|
||||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
|
||||||
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
|
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
|
||||||
@ -22,8 +22,9 @@
|
|||||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||||
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||||
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||||
38C3F544637943F2A70A8910 /* libTcpSockets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 767A2E82AB414DB2959EF685 /* libTcpSockets.a */; };
|
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
|
||||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
||||||
|
EC9415311C4E4C388686CF24 /* libTcpSockets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EDF9511FF734E9EBF859631 /* libTcpSockets.a */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@ -67,7 +68,7 @@
|
|||||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||||
proxyType = 1;
|
proxyType = 1;
|
||||||
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
|
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
|
||||||
remoteInfo = RctSockets;
|
remoteInfo = rctsockets;
|
||||||
};
|
};
|
||||||
139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
|
139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
@ -90,6 +91,111 @@
|
|||||||
remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
|
remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
|
||||||
remoteInfo = React;
|
remoteInfo = React;
|
||||||
};
|
};
|
||||||
|
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
|
||||||
|
remoteInfo = "RCTImage-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28471D9B043800D4039D;
|
||||||
|
remoteInfo = "RCTLinking-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
|
||||||
|
remoteInfo = "RCTNetwork-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28611D9B046600D4039D;
|
||||||
|
remoteInfo = "RCTSettings-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
|
||||||
|
remoteInfo = "RCTText-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28881D9B049200D4039D;
|
||||||
|
remoteInfo = "RCTWebSocket-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
|
||||||
|
remoteInfo = "React-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
|
||||||
|
remoteInfo = yoga;
|
||||||
|
};
|
||||||
|
3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
|
||||||
|
remoteInfo = "yoga-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
|
||||||
|
remoteInfo = cxxreact;
|
||||||
|
};
|
||||||
|
3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
|
||||||
|
remoteInfo = "cxxreact-tvOS";
|
||||||
|
};
|
||||||
|
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
|
||||||
|
remoteInfo = jschelpers;
|
||||||
|
};
|
||||||
|
3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
|
||||||
|
remoteInfo = "jschelpers-tvOS";
|
||||||
|
};
|
||||||
|
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||||
|
remoteInfo = RCTAnimation;
|
||||||
|
};
|
||||||
|
5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
|
||||||
|
proxyType = 2;
|
||||||
|
remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
|
||||||
|
remoteInfo = "RCTAnimation-tvOS";
|
||||||
|
};
|
||||||
78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
|
78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
|
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
|
||||||
@ -104,58 +210,9 @@
|
|||||||
remoteGlobalIDString = 58B5119B1A9E6C1200147676;
|
remoteGlobalIDString = 58B5119B1A9E6C1200147676;
|
||||||
remoteInfo = RCTText;
|
remoteInfo = RCTText;
|
||||||
};
|
};
|
||||||
963394341DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
96DD716B1E2D4CF000C26BFF /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
|
containerPortal = A7337DD4485745E7BD381620 /* TcpSockets.xcodeproj */;
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
|
|
||||||
remoteInfo = "RCTImage-tvOS";
|
|
||||||
};
|
|
||||||
963394381DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A28471D9B043800D4039D;
|
|
||||||
remoteInfo = "RCTLinking-tvOS";
|
|
||||||
};
|
|
||||||
9633943C1DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
|
|
||||||
remoteInfo = "RCTNetwork-tvOS";
|
|
||||||
};
|
|
||||||
963394401DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A28611D9B046600D4039D;
|
|
||||||
remoteInfo = "RCTSettings-tvOS";
|
|
||||||
};
|
|
||||||
963394441DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
|
|
||||||
remoteInfo = "RCTText-tvOS";
|
|
||||||
};
|
|
||||||
963394491DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A28881D9B049200D4039D;
|
|
||||||
remoteInfo = "RCTWebSocket-tvOS";
|
|
||||||
};
|
|
||||||
9633944D1DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
|
||||||
proxyType = 2;
|
|
||||||
remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
|
|
||||||
remoteInfo = "React-tvOS";
|
|
||||||
};
|
|
||||||
963394501DF0B9340040F547 /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 9EEBD8DA2B8E477D9ECD815E /* TcpSockets.xcodeproj */;
|
|
||||||
proxyType = 2;
|
proxyType = 2;
|
||||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||||
remoteInfo = TcpSockets;
|
remoteInfo = TcpSockets;
|
||||||
@ -169,23 +226,24 @@
|
|||||||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
||||||
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
|
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
|
||||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
||||||
00E356EE1AD99517003FC87E /* RctSocketsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RctSocketsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
00E356EE1AD99517003FC87E /* rctsocketsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = rctsocketsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
00E356F21AD99517003FC87E /* RctSocketsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RctSocketsTests.m; sourceTree = "<group>"; };
|
00E356F21AD99517003FC87E /* rctsocketsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = rctsocketsTests.m; sourceTree = "<group>"; };
|
||||||
|
0EDF9511FF734E9EBF859631 /* libTcpSockets.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libTcpSockets.a; sourceTree = "<group>"; };
|
||||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
||||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
||||||
13B07F961A680F5B00A75B9A /* RctSockets.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RctSockets.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
13B07F961A680F5B00A75B9A /* rctsockets.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rctsockets.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RctSockets/AppDelegate.h; sourceTree = "<group>"; };
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = rctsockets/AppDelegate.h; sourceTree = "<group>"; };
|
||||||
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = RctSockets/AppDelegate.m; sourceTree = "<group>"; };
|
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = rctsockets/AppDelegate.m; sourceTree = "<group>"; };
|
||||||
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RctSockets/Images.xcassets; sourceTree = "<group>"; };
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = rctsockets/Images.xcassets; sourceTree = "<group>"; };
|
||||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RctSockets/Info.plist; sourceTree = "<group>"; };
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = rctsockets/Info.plist; sourceTree = "<group>"; };
|
||||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RctSockets/main.m; sourceTree = "<group>"; };
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = rctsockets/main.m; sourceTree = "<group>"; };
|
||||||
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
|
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
|
||||||
767A2E82AB414DB2959EF685 /* libTcpSockets.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libTcpSockets.a; sourceTree = "<group>"; };
|
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
|
||||||
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
|
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
|
||||||
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
|
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
|
||||||
9EEBD8DA2B8E477D9ECD815E /* TcpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = TcpSockets.xcodeproj; path = "../node_modules/react-native-tcp/ios/TcpSockets.xcodeproj"; sourceTree = "<group>"; };
|
A7337DD4485745E7BD381620 /* TcpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = TcpSockets.xcodeproj; path = "../node_modules/react-native-tcp/ios/TcpSockets.xcodeproj"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -201,6 +259,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
|
||||||
146834051AC3E58100842450 /* libReact.a in Frameworks */,
|
146834051AC3E58100842450 /* libReact.a in Frameworks */,
|
||||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
|
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
|
||||||
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
|
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
|
||||||
@ -211,7 +270,7 @@
|
|||||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
|
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
|
||||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
|
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
|
||||||
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
|
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
|
||||||
38C3F544637943F2A70A8910 /* libTcpSockets.a in Frameworks */,
|
EC9415311C4E4C388686CF24 /* libTcpSockets.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -238,7 +297,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
|
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
|
||||||
963394351DF0B9340040F547 /* libRCTImage-tvOS.a */,
|
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -247,7 +306,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
|
00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
|
||||||
9633943D1DF0B9340040F547 /* libRCTNetwork-tvOS.a */,
|
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -260,13 +319,13 @@
|
|||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
00E356EF1AD99517003FC87E /* RctSocketsTests */ = {
|
00E356EF1AD99517003FC87E /* rctsocketsTests */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
00E356F21AD99517003FC87E /* RctSocketsTests.m */,
|
00E356F21AD99517003FC87E /* rctsocketsTests.m */,
|
||||||
00E356F01AD99517003FC87E /* Supporting Files */,
|
00E356F01AD99517003FC87E /* Supporting Files */,
|
||||||
);
|
);
|
||||||
path = RctSocketsTests;
|
path = rctsocketsTests;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
00E356F01AD99517003FC87E /* Supporting Files */ = {
|
00E356F01AD99517003FC87E /* Supporting Files */ = {
|
||||||
@ -281,7 +340,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
|
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
|
||||||
963394411DF0B9340040F547 /* libRCTSettings-tvOS.a */,
|
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -290,12 +349,12 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
|
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
|
||||||
9633944A1DF0B9340040F547 /* libRCTWebSocket-tvOS.a */,
|
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
13B07FAE1A68108700A75B9A /* RctSockets */ = {
|
13B07FAE1A68108700A75B9A /* rctsockets */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||||
@ -306,14 +365,29 @@
|
|||||||
13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
|
13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
|
||||||
13B07FB71A68108700A75B9A /* main.m */,
|
13B07FB71A68108700A75B9A /* main.m */,
|
||||||
);
|
);
|
||||||
name = RctSockets;
|
name = rctsockets;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
146834001AC3E56700842450 /* Products */ = {
|
146834001AC3E56700842450 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
146834041AC3E56700842450 /* libReact.a */,
|
146834041AC3E56700842450 /* libReact.a */,
|
||||||
9633944E1DF0B9340040F547 /* libReact-tvOS.a */,
|
3DAD3EA31DF850E9000B6D8A /* libReact.a */,
|
||||||
|
3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
|
||||||
|
3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
|
||||||
|
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
|
||||||
|
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
|
||||||
|
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
|
||||||
|
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
5E91572E1DD0AC6500FF2AA8 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
|
||||||
|
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -322,7 +396,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
|
78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
|
||||||
963394391DF0B9340040F547 /* libRCTLinking-tvOS.a */,
|
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -330,6 +404,7 @@
|
|||||||
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
|
||||||
146833FF1AC3E56700842450 /* React.xcodeproj */,
|
146833FF1AC3E56700842450 /* React.xcodeproj */,
|
||||||
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
|
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
|
||||||
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
|
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
|
||||||
@ -340,7 +415,7 @@
|
|||||||
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
|
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
|
||||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
|
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
|
||||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
|
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
|
||||||
9EEBD8DA2B8E477D9ECD815E /* TcpSockets.xcodeproj */,
|
A7337DD4485745E7BD381620 /* TcpSockets.xcodeproj */,
|
||||||
);
|
);
|
||||||
name = Libraries;
|
name = Libraries;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -349,7 +424,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
832341B51AAA6A8300B99B32 /* libRCTText.a */,
|
832341B51AAA6A8300B99B32 /* libRCTText.a */,
|
||||||
963394451DF0B9340040F547 /* libRCTText-tvOS.a */,
|
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -357,9 +432,9 @@
|
|||||||
83CBB9F61A601CBA00E9B192 = {
|
83CBB9F61A601CBA00E9B192 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
13B07FAE1A68108700A75B9A /* RctSockets */,
|
13B07FAE1A68108700A75B9A /* rctsockets */,
|
||||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||||
00E356EF1AD99517003FC87E /* RctSocketsTests */,
|
00E356EF1AD99517003FC87E /* rctsocketsTests */,
|
||||||
83CBBA001A601CBA00E9B192 /* Products */,
|
83CBBA001A601CBA00E9B192 /* Products */,
|
||||||
);
|
);
|
||||||
indentWidth = 2;
|
indentWidth = 2;
|
||||||
@ -369,16 +444,16 @@
|
|||||||
83CBBA001A601CBA00E9B192 /* Products */ = {
|
83CBBA001A601CBA00E9B192 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
13B07F961A680F5B00A75B9A /* RctSockets.app */,
|
13B07F961A680F5B00A75B9A /* rctsockets.app */,
|
||||||
00E356EE1AD99517003FC87E /* RctSocketsTests.xctest */,
|
00E356EE1AD99517003FC87E /* rctsocketsTests.xctest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
9633942E1DF0B9340040F547 /* Products */ = {
|
96DD714F1E2D4CEF00C26BFF /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
963394511DF0B9340040F547 /* libTcpSockets.a */,
|
96DD716C1E2D4CF000C26BFF /* libTcpSockets.a */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -386,9 +461,9 @@
|
|||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
00E356ED1AD99517003FC87E /* RctSocketsTests */ = {
|
00E356ED1AD99517003FC87E /* rctsocketsTests */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RctSocketsTests" */;
|
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "rctsocketsTests" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
00E356EA1AD99517003FC87E /* Sources */,
|
00E356EA1AD99517003FC87E /* Sources */,
|
||||||
00E356EB1AD99517003FC87E /* Frameworks */,
|
00E356EB1AD99517003FC87E /* Frameworks */,
|
||||||
@ -399,14 +474,14 @@
|
|||||||
dependencies = (
|
dependencies = (
|
||||||
00E356F51AD99517003FC87E /* PBXTargetDependency */,
|
00E356F51AD99517003FC87E /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = RctSocketsTests;
|
name = rctsocketsTests;
|
||||||
productName = RctSocketsTests;
|
productName = rctsocketsTests;
|
||||||
productReference = 00E356EE1AD99517003FC87E /* RctSocketsTests.xctest */;
|
productReference = 00E356EE1AD99517003FC87E /* rctsocketsTests.xctest */;
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
};
|
};
|
||||||
13B07F861A680F5B00A75B9A /* RctSockets */ = {
|
13B07F861A680F5B00A75B9A /* rctsockets */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RctSockets" */;
|
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "rctsockets" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
13B07F871A680F5B00A75B9A /* Sources */,
|
13B07F871A680F5B00A75B9A /* Sources */,
|
||||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||||
@ -417,9 +492,9 @@
|
|||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = RctSockets;
|
name = rctsockets;
|
||||||
productName = "Hello World";
|
productName = "Hello World";
|
||||||
productReference = 13B07F961A680F5B00A75B9A /* RctSockets.app */;
|
productReference = 13B07F961A680F5B00A75B9A /* rctsockets.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
@ -453,6 +528,10 @@
|
|||||||
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
|
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
|
||||||
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
|
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
|
||||||
|
ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
|
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
|
||||||
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
|
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
|
||||||
@ -490,14 +569,14 @@
|
|||||||
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ProductGroup = 9633942E1DF0B9340040F547 /* Products */;
|
ProductGroup = 96DD714F1E2D4CEF00C26BFF /* Products */;
|
||||||
ProjectRef = 9EEBD8DA2B8E477D9ECD815E /* TcpSockets.xcodeproj */;
|
ProjectRef = A7337DD4485745E7BD381620 /* TcpSockets.xcodeproj */;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
13B07F861A680F5B00A75B9A /* RctSockets */,
|
13B07F861A680F5B00A75B9A /* rctsockets */,
|
||||||
00E356ED1AD99517003FC87E /* RctSocketsTests */,
|
00E356ED1AD99517003FC87E /* rctsocketsTests */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
@ -559,6 +638,111 @@
|
|||||||
remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
|
remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
};
|
};
|
||||||
|
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTImage-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTLinking-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTNetwork-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTSettings-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTText-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTWebSocket-tvOS.a";
|
||||||
|
remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libReact.a;
|
||||||
|
remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libyoga.a;
|
||||||
|
remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libyoga.a;
|
||||||
|
remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libcxxreact.a;
|
||||||
|
remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libcxxreact.a;
|
||||||
|
remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libjschelpers.a;
|
||||||
|
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libjschelpers.a;
|
||||||
|
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = libRCTAnimation.a;
|
||||||
|
remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
|
5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = {
|
||||||
|
isa = PBXReferenceProxy;
|
||||||
|
fileType = archive.ar;
|
||||||
|
path = "libRCTAnimation-tvOS.a";
|
||||||
|
remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
|
||||||
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
|
};
|
||||||
78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
|
78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = archive.ar;
|
fileType = archive.ar;
|
||||||
@ -573,60 +757,11 @@
|
|||||||
remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
|
remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
};
|
};
|
||||||
963394351DF0B9340040F547 /* libRCTImage-tvOS.a */ = {
|
96DD716C1E2D4CF000C26BFF /* libTcpSockets.a */ = {
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTImage-tvOS.a";
|
|
||||||
remoteRef = 963394341DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
963394391DF0B9340040F547 /* libRCTLinking-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTLinking-tvOS.a";
|
|
||||||
remoteRef = 963394381DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
9633943D1DF0B9340040F547 /* libRCTNetwork-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTNetwork-tvOS.a";
|
|
||||||
remoteRef = 9633943C1DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
963394411DF0B9340040F547 /* libRCTSettings-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTSettings-tvOS.a";
|
|
||||||
remoteRef = 963394401DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
963394451DF0B9340040F547 /* libRCTText-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTText-tvOS.a";
|
|
||||||
remoteRef = 963394441DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
9633944A1DF0B9340040F547 /* libRCTWebSocket-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libRCTWebSocket-tvOS.a";
|
|
||||||
remoteRef = 963394491DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
9633944E1DF0B9340040F547 /* libReact-tvOS.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
|
||||||
fileType = archive.ar;
|
|
||||||
path = "libReact-tvOS.a";
|
|
||||||
remoteRef = 9633944D1DF0B9340040F547 /* PBXContainerItemProxy */;
|
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
|
||||||
};
|
|
||||||
963394511DF0B9340040F547 /* libTcpSockets.a */ = {
|
|
||||||
isa = PBXReferenceProxy;
|
isa = PBXReferenceProxy;
|
||||||
fileType = archive.ar;
|
fileType = archive.ar;
|
||||||
path = libTcpSockets.a;
|
path = libTcpSockets.a;
|
||||||
remoteRef = 963394501DF0B9340040F547 /* PBXContainerItemProxy */;
|
remoteRef = 96DD716B1E2D4CF000C26BFF /* PBXContainerItemProxy */;
|
||||||
sourceTree = BUILT_PRODUCTS_DIR;
|
sourceTree = BUILT_PRODUCTS_DIR;
|
||||||
};
|
};
|
||||||
/* End PBXReferenceProxy section */
|
/* End PBXReferenceProxy section */
|
||||||
@ -672,7 +807,7 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
00E356F31AD99517003FC87E /* RctSocketsTests.m in Sources */,
|
00E356F31AD99517003FC87E /* rctsocketsTests.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -690,7 +825,7 @@
|
|||||||
/* Begin PBXTargetDependency section */
|
/* Begin PBXTargetDependency section */
|
||||||
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
|
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
|
||||||
isa = PBXTargetDependency;
|
isa = PBXTargetDependency;
|
||||||
target = 13B07F861A680F5B00A75B9A /* RctSockets */;
|
target = 13B07F861A680F5B00A75B9A /* rctsockets */;
|
||||||
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
|
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
@ -702,7 +837,7 @@
|
|||||||
13B07FB21A68108700A75B9A /* Base */,
|
13B07FB21A68108700A75B9A /* Base */,
|
||||||
);
|
);
|
||||||
name = LaunchScreen.xib;
|
name = LaunchScreen.xib;
|
||||||
path = RctSockets;
|
path = rctsockets;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
/* End PBXVariantGroup section */
|
/* End PBXVariantGroup section */
|
||||||
@ -716,7 +851,7 @@
|
|||||||
"DEBUG=1",
|
"DEBUG=1",
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = RctSocketsTests/Info.plist;
|
INFOPLIST_FILE = rctsocketsTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
@ -724,7 +859,7 @@
|
|||||||
"\"$(SRCROOT)/$(TARGET_NAME)\"",
|
"\"$(SRCROOT)/$(TARGET_NAME)\"",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RctSockets.app/RctSockets";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rctsockets.app/rctsockets";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -733,7 +868,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
INFOPLIST_FILE = RctSocketsTests/Info.plist;
|
INFOPLIST_FILE = rctsocketsTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
@ -741,7 +876,7 @@
|
|||||||
"\"$(SRCROOT)/$(TARGET_NAME)\"",
|
"\"$(SRCROOT)/$(TARGET_NAME)\"",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RctSockets.app/RctSockets";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rctsockets.app/rctsockets";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@ -751,20 +886,14 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = NO;
|
DEAD_CODE_STRIPPING = NO;
|
||||||
HEADER_SEARCH_PATHS = (
|
INFOPLIST_FILE = rctsockets/Info.plist;
|
||||||
"$(inherited)",
|
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
||||||
"$(SRCROOT)/../node_modules/react-native/React/**",
|
|
||||||
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = RctSockets/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
"-lc++",
|
"-lc++",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = RctSockets;
|
PRODUCT_NAME = rctsockets;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@ -774,20 +903,14 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
HEADER_SEARCH_PATHS = (
|
INFOPLIST_FILE = rctsockets/Info.plist;
|
||||||
"$(inherited)",
|
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
||||||
"$(SRCROOT)/../node_modules/react-native/React/**",
|
|
||||||
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = RctSockets/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
"-lc++",
|
"-lc++",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = RctSockets;
|
PRODUCT_NAME = rctsockets;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@ -826,12 +949,6 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
||||||
"$(SRCROOT)/../node_modules/react-native/React/**",
|
|
||||||
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
|
|
||||||
);
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
@ -867,12 +984,6 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
||||||
"$(SRCROOT)/../node_modules/react-native/React/**",
|
|
||||||
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
|
|
||||||
);
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@ -883,7 +994,7 @@
|
|||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RctSocketsTests" */ = {
|
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "rctsocketsTests" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
00E356F61AD99517003FC87E /* Debug */,
|
00E356F61AD99517003FC87E /* Debug */,
|
||||||
@ -892,7 +1003,7 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RctSockets" */ = {
|
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "rctsockets" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
13B07F941A680F5B00A75B9A /* Debug */,
|
13B07F941A680F5B00A75B9A /* Debug */,
|
||||||
|
|||||||
@ -3,9 +3,23 @@
|
|||||||
LastUpgradeVersion = "0620"
|
LastUpgradeVersion = "0620"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "NO"
|
||||||
buildImplicitDependencies = "YES">
|
buildImplicitDependencies = "YES">
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
|
||||||
|
BuildableName = "libReact.a"
|
||||||
|
BlueprintName = "React"
|
||||||
|
ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForTesting = "YES"
|
buildForTesting = "YES"
|
||||||
buildForRunning = "YES"
|
buildForRunning = "YES"
|
||||||
@ -15,8 +29,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "RctSockets.app"
|
BuildableName = "rctsockets.app"
|
||||||
BlueprintName = "RctSockets"
|
BlueprintName = "rctsockets"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
@ -29,8 +43,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||||
BuildableName = "RctSocketsTests.xctest"
|
BuildableName = "rctsocketsTests.xctest"
|
||||||
BlueprintName = "RctSocketsTests"
|
BlueprintName = "rctsocketsTests"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
@ -47,8 +61,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
|
||||||
BuildableName = "RctSocketsTests.xctest"
|
BuildableName = "rctsocketsTests.xctest"
|
||||||
BlueprintName = "RctSocketsTests"
|
BlueprintName = "rctsocketsTests"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
@ -57,8 +71,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "RctSockets.app"
|
BuildableName = "rctsockets.app"
|
||||||
BlueprintName = "RctSockets"
|
BlueprintName = "rctsockets"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
@ -80,8 +94,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "RctSockets.app"
|
BuildableName = "rctsockets.app"
|
||||||
BlueprintName = "RctSockets"
|
BlueprintName = "rctsockets"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
@ -99,8 +113,8 @@
|
|||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
BuildableName = "RctSockets.app"
|
BuildableName = "rctsockets.app"
|
||||||
BlueprintName = "RctSockets"
|
BlueprintName = "rctsockets"
|
||||||
ReferencedContainer = "container:rctsockets.xcodeproj">
|
ReferencedContainer = "container:rctsockets.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
|
|||||||
@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
#import "RCTBundleURLProvider.h"
|
#import <React/RCTBundleURLProvider.h>
|
||||||
#import "RCTRootView.h"
|
#import <React/RCTRootView.h>
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
|
||||||
@ -21,7 +21,7 @@
|
|||||||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
|
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
|
||||||
|
|
||||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
||||||
moduleName:@"RctSockets"
|
moduleName:@"rctsockets"
|
||||||
initialProperties:nil
|
initialProperties:nil
|
||||||
launchOptions:launchOptions];
|
launchOptions:launchOptions];
|
||||||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
|
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="RctSockets" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="rctsockets" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
|
|||||||
@ -10,17 +10,17 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <XCTest/XCTest.h>
|
#import <XCTest/XCTest.h>
|
||||||
|
|
||||||
#import "RCTLog.h"
|
#import <React/RCTLog.h>
|
||||||
#import "RCTRootView.h"
|
#import <React/RCTRootView.h>
|
||||||
|
|
||||||
#define TIMEOUT_SECONDS 600
|
#define TIMEOUT_SECONDS 600
|
||||||
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
|
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
|
||||||
|
|
||||||
@interface RctSocketsTests : XCTestCase
|
@interface rctsocketsTests : XCTestCase
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation RctSocketsTests
|
@implementation rctsocketsTests
|
||||||
|
|
||||||
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
|
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,22 +1,46 @@
|
|||||||
{
|
{
|
||||||
"name": "RctSockets",
|
"name": "rctsockets",
|
||||||
"version": "1.0.0",
|
"version": "0.0.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node node_modules/react-native/local-cli/cli.js start",
|
"start": "node node_modules/react-native/local-cli/cli.js start",
|
||||||
"ios": "node node_modules/react-native/local-cli/cli.js bundle --platform ios --dev false --entry-file index.ios.js --bundle-output ios/main.jsbundle",
|
"test": "jest",
|
||||||
"droid": "node node_modules/react-native/local-cli/cli.js bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle",
|
|
||||||
"postinstall": "rn-nodeify --install stream,process,util --hack"
|
"postinstall": "rn-nodeify --install stream,process,util --hack"
|
||||||
},
|
},
|
||||||
"browser": {
|
"browser": {
|
||||||
"net": "react-native-tcp"
|
"net": "react-native-tcp",
|
||||||
|
"_stream_transform": "readable-stream/transform",
|
||||||
|
"_stream_readable": "readable-stream/readable",
|
||||||
|
"_stream_writable": "readable-stream/writable",
|
||||||
|
"_stream_duplex": "readable-stream/duplex",
|
||||||
|
"_stream_passthrough": "readable-stream/passthrough",
|
||||||
|
"stream": "stream-browserify"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react": "^15.1.0",
|
"process": "^0.11.9",
|
||||||
"react-native": "^0.38.0",
|
"react": "15.4.2",
|
||||||
"react-native-tcp": "../../"
|
"react-native": "^0.40.0",
|
||||||
|
"react-native-tcp": "../../",
|
||||||
|
"readable-stream": "^1.0.33",
|
||||||
|
"stream-browserify": "^1.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"babel-jest": "18.0.0",
|
||||||
|
"babel-preset-react-native": "1.9.1",
|
||||||
|
"jest": "18.1.0",
|
||||||
|
"react-test-renderer": "15.4.2",
|
||||||
"rn-nodeify": "^7.0.1"
|
"rn-nodeify": "^7.0.1"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"preset": "react-native"
|
||||||
|
},
|
||||||
|
"react-native": {
|
||||||
|
"net": "react-native-tcp",
|
||||||
|
"_stream_transform": "readable-stream/transform",
|
||||||
|
"_stream_readable": "readable-stream/readable",
|
||||||
|
"_stream_writable": "readable-stream/writable",
|
||||||
|
"_stream_duplex": "readable-stream/duplex",
|
||||||
|
"_stream_passthrough": "readable-stream/passthrough",
|
||||||
|
"stream": "stream-browserify"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -790,6 +790,8 @@ typedef NS_ENUM(NSInteger, GCDAsyncSocketError) {
|
|||||||
**/
|
**/
|
||||||
- (void)startTLS:(nullable NSDictionary <NSString*,NSObject*>*)tlsSettings;
|
- (void)startTLS:(nullable NSDictionary <NSString*,NSObject*>*)tlsSettings;
|
||||||
|
|
||||||
|
- (void)startTLSCancelCurrentRead:(nullable NSDictionary <NSString*,NSObject*>*)tlsSettings;
|
||||||
|
|
||||||
#pragma mark Advanced
|
#pragma mark Advanced
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -6407,7 +6407,7 @@ enum GCDAsyncSocketConfig
|
|||||||
#pragma mark Security
|
#pragma mark Security
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
- (void)startTLS:(NSDictionary *)tlsSettings
|
- (void)doStartTLS:(NSDictionary *)tlsSettings withCancelCurrentRead:(BOOL)cancelCurrentRead
|
||||||
{
|
{
|
||||||
LogTrace();
|
LogTrace();
|
||||||
|
|
||||||
@ -6430,6 +6430,11 @@ enum GCDAsyncSocketConfig
|
|||||||
|
|
||||||
if ((flags & kSocketStarted) && !(flags & kQueuedTLS) && !(flags & kForbidReadsWrites))
|
if ((flags & kSocketStarted) && !(flags & kQueuedTLS) && !(flags & kForbidReadsWrites))
|
||||||
{
|
{
|
||||||
|
// dirty hack to fix that the client has already added a read with no timeout which we need to finish
|
||||||
|
if (currentRead && cancelCurrentRead) {
|
||||||
|
LogInfo(@"Cancelling current read as requested");
|
||||||
|
[self completeCurrentRead];
|
||||||
|
}
|
||||||
[readQueue addObject:packet];
|
[readQueue addObject:packet];
|
||||||
[writeQueue addObject:packet];
|
[writeQueue addObject:packet];
|
||||||
|
|
||||||
@ -6442,6 +6447,14 @@ enum GCDAsyncSocketConfig
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)startTLSCancelCurrentRead:(NSDictionary *)tlsSettings
|
||||||
|
{
|
||||||
|
[self doStartTLS:tlsSettings withCancelCurrentRead:TRUE];
|
||||||
|
}
|
||||||
|
- (void)startTLS:(NSDictionary *)tlsSettings {
|
||||||
|
[self doStartTLS:tlsSettings withCancelCurrentRead:FALSE];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)maybeStartTLS
|
- (void)maybeStartTLS
|
||||||
{
|
{
|
||||||
// We can't start TLS until:
|
// We can't start TLS until:
|
||||||
@ -6781,6 +6794,8 @@ static OSStatus SSLWriteFunction(SSLConnectionRef connection, const void *data,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Force SSL to accept all HTTPS certs.
|
||||||
|
status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true);
|
||||||
|
|
||||||
BOOL shouldManuallyEvaluateTrust = [[tlsSettings objectForKey:GCDAsyncSocketManuallyEvaluateTrust] boolValue];
|
BOOL shouldManuallyEvaluateTrust = [[tlsSettings objectForKey:GCDAsyncSocketManuallyEvaluateTrust] boolValue];
|
||||||
if (shouldManuallyEvaluateTrust)
|
if (shouldManuallyEvaluateTrust)
|
||||||
|
|||||||
@ -3,8 +3,8 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <React/RCTBridgeModule.h>
|
||||||
#import "RCTBridgeModule.h"
|
#import "CocoaAsyncSocket/GCDAsyncSocket.h"
|
||||||
|
|
||||||
extern NSString *const RCTTCPErrorDomain;
|
extern NSString *const RCTTCPErrorDomain;
|
||||||
|
|
||||||
@ -31,14 +31,16 @@ typedef enum RCTTCPError RCTTCPError;
|
|||||||
- (void)onData:(NSNumber *)clientID data:(NSData *)data;
|
- (void)onData:(NSNumber *)clientID data:(NSData *)data;
|
||||||
- (void)onClose:(TcpSocketClient*)client withError:(NSError *)err;
|
- (void)onClose:(TcpSocketClient*)client withError:(NSError *)err;
|
||||||
- (void)onError:(TcpSocketClient*)client withError:(NSError *)err;
|
- (void)onError:(TcpSocketClient*)client withError:(NSError *)err;
|
||||||
|
- (void)onSecureConnect:(TcpSocketClient*)client;
|
||||||
- (NSNumber*)getNextId;
|
- (NSNumber*)getNextId;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface TcpSocketClient : NSObject
|
@interface TcpSocketClient : NSObject<GCDAsyncSocketDelegate>
|
||||||
|
|
||||||
@property (nonatomic, retain) NSNumber * id;
|
@property (nonatomic, retain) NSNumber * id;
|
||||||
@property (nonatomic, weak) id<SocketClientDelegate> clientDelegate;
|
@property (nonatomic, weak) id<SocketClientDelegate> clientDelegate;
|
||||||
|
@property (nonatomic) BOOL useSsl;
|
||||||
|
|
||||||
///---------------------------------------------------------------------------------------
|
///---------------------------------------------------------------------------------------
|
||||||
/// @name Class Methods
|
/// @name Class Methods
|
||||||
@ -62,10 +64,14 @@ typedef enum RCTTCPError RCTTCPError;
|
|||||||
* @param port
|
* @param port
|
||||||
* @param host ip address
|
* @param host ip address
|
||||||
* @param options NSDictionary which can have @"localAddress" and @"localPort" to specify the local interface
|
* @param options NSDictionary which can have @"localAddress" and @"localPort" to specify the local interface
|
||||||
|
* @param useSsl BOOL Use SSL/TLS connection
|
||||||
* @return true if connected, false if there was an error
|
* @return true if connected, false if there was an error
|
||||||
*/
|
*/
|
||||||
|
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options useSsl:(BOOL)useSsl error:(NSError **)error;
|
||||||
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options error:(NSError **)error;
|
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options error:(NSError **)error;
|
||||||
|
|
||||||
|
- (void)upgradeToSecure:(NSString *)host port:(int)port callback:(RCTResponseSenderBlock) callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts listening on a local host and port
|
* Starts listening on a local host and port
|
||||||
*
|
*
|
||||||
@ -98,5 +104,8 @@ typedef enum RCTTCPError RCTTCPError;
|
|||||||
*/
|
*/
|
||||||
- (void)destroy;
|
- (void)destroy;
|
||||||
|
|
||||||
|
- (void)socket:(GCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust
|
||||||
|
completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -6,9 +6,8 @@
|
|||||||
#import <netinet/in.h>
|
#import <netinet/in.h>
|
||||||
#import <arpa/inet.h>
|
#import <arpa/inet.h>
|
||||||
#import "TcpSocketClient.h"
|
#import "TcpSocketClient.h"
|
||||||
#import "RCTBridgeModule.h"
|
|
||||||
#import "RCTLog.h"
|
#import <React/RCTLog.h>
|
||||||
#import "GCDAsyncSocket.h"
|
|
||||||
|
|
||||||
NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
||||||
|
|
||||||
@ -16,7 +15,9 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
GCDAsyncSocket *_tcpSocket;
|
GCDAsyncSocket *_tcpSocket;
|
||||||
|
NSString *_host;
|
||||||
NSMutableDictionary<NSNumber *, RCTResponseSenderBlock> *_pendingSends;
|
NSMutableDictionary<NSNumber *, RCTResponseSenderBlock> *_pendingSends;
|
||||||
|
RCTResponseSenderBlock _pendingUpgrade;
|
||||||
NSLock *_lock;
|
NSLock *_lock;
|
||||||
long _sendTag;
|
long _sendTag;
|
||||||
}
|
}
|
||||||
@ -55,6 +56,12 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
|
|
||||||
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options error:(NSError **)error
|
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options error:(NSError **)error
|
||||||
{
|
{
|
||||||
|
return [self connect:host port:port withOptions:options useSsl:NO error:error];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)connect:(NSString *)host port:(int)port withOptions:(NSDictionary *)options useSsl:(BOOL)useSsl error:(NSError **)error
|
||||||
|
{
|
||||||
|
self.useSsl = useSsl;
|
||||||
if (_tcpSocket) {
|
if (_tcpSocket) {
|
||||||
if (error) {
|
if (error) {
|
||||||
*error = [self badInvocationError:@"this client's socket is already connected"];
|
*error = [self badInvocationError:@"this client's socket is already connected"];
|
||||||
@ -63,6 +70,7 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_host = host;
|
||||||
_tcpSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:[self methodQueue]];
|
_tcpSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:[self methodQueue]];
|
||||||
[_tcpSocket setUserData: _id];
|
[_tcpSocket setUserData: _id];
|
||||||
|
|
||||||
@ -89,6 +97,16 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)upgradeToSecure:(NSString *)host port:(int)port callback:(RCTResponseSenderBlock) callback;
|
||||||
|
{
|
||||||
|
if (callback) {
|
||||||
|
self->_pendingUpgrade = callback;
|
||||||
|
}
|
||||||
|
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
|
[_tcpSocket startTLSCancelCurrentRead:settings];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSDictionary<NSString *, id> *)getAddress
|
- (NSDictionary<NSString *, id> *)getAddress
|
||||||
{
|
{
|
||||||
if (_tcpSocket)
|
if (_tcpSocket)
|
||||||
@ -181,14 +199,11 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
- (void) writeData:(NSData *)data
|
- (void) writeData:(NSData *)data
|
||||||
callback:(RCTResponseSenderBlock)callback
|
callback:(RCTResponseSenderBlock)callback
|
||||||
{
|
{
|
||||||
[_tcpSocket writeData:data withTimeout:-1 tag:_sendTag];
|
|
||||||
if (callback) {
|
if (callback) {
|
||||||
[self setPendingSend:callback forKey:@(_sendTag)];
|
[self setPendingSend:callback forKey:@(_sendTag)];
|
||||||
}
|
}
|
||||||
|
[_tcpSocket writeData:data withTimeout:-1 tag:_sendTag];
|
||||||
_sendTag++;
|
_sendTag++;
|
||||||
|
|
||||||
[_tcpSocket readDataWithTimeout:-1 tag:_id.longValue];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)end
|
- (void)end
|
||||||
@ -203,13 +218,16 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
|
|
||||||
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
|
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
|
||||||
if (!_clientDelegate) {
|
if (!_clientDelegate) {
|
||||||
RCTLogError(@"didReadData with nil clientDelegate for %@", [sock userData])
|
RCTLogWarn(@"didReadData with nil clientDelegate for %@", [sock userData]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[_clientDelegate onData:@(tag) data:data];
|
[_clientDelegate onData:@(tag) data:data];
|
||||||
|
|
||||||
[sock readDataWithTimeout:-1 tag:tag];
|
if (!_pendingUpgrade) {
|
||||||
|
// if we add a read, the special packet will not be picked up in time
|
||||||
|
[sock readDataWithTimeout:-1 tag:tag];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
|
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
|
||||||
@ -225,15 +243,38 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
|
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
|
||||||
{
|
{
|
||||||
if (!_clientDelegate) {
|
if (!_clientDelegate) {
|
||||||
RCTLogError(@"didConnectToHost with nil clientDelegate for %@", [sock userData])
|
RCTLogWarn(@"didConnectToHost with nil clientDelegate for %@", [sock userData]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[_clientDelegate onConnect:self];
|
if (self.useSsl)
|
||||||
|
{
|
||||||
|
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
|
||||||
|
[sock startTLS:settings];
|
||||||
|
|
||||||
[sock readDataWithTimeout:-1 tag:_id.longValue];
|
[_clientDelegate onConnect:self];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[_clientDelegate onConnect:self];
|
||||||
|
[sock readDataWithTimeout:-1 tag:_id.longValue];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)socketDidSecure:(GCDAsyncSocket *)sock {
|
||||||
|
RCTLogInfo(@"socket secured");
|
||||||
|
if (self->_pendingUpgrade) {
|
||||||
|
self.useSsl= true;
|
||||||
|
self->_pendingUpgrade(@[]);
|
||||||
|
self->_pendingUpgrade = nil;
|
||||||
|
[_clientDelegate onSecureConnect:self];
|
||||||
|
}
|
||||||
|
// start receiving messages
|
||||||
|
if (self.useSsl)
|
||||||
|
{
|
||||||
|
[sock readDataWithTimeout:-1 tag:_id.longValue];
|
||||||
|
}
|
||||||
|
}
|
||||||
- (void)socketDidCloseReadStream:(GCDAsyncSocket *)sock
|
- (void)socketDidCloseReadStream:(GCDAsyncSocket *)sock
|
||||||
{
|
{
|
||||||
// TODO : investigate for half-closed sockets
|
// TODO : investigate for half-closed sockets
|
||||||
@ -244,7 +285,7 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
|
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
|
||||||
{
|
{
|
||||||
if (!_clientDelegate) {
|
if (!_clientDelegate) {
|
||||||
RCTLogError(@"socketDidDisconnect with nil clientDelegate for %@", [sock userData])
|
RCTLogWarn(@"socketDidDisconnect with nil clientDelegate for %@", [sock userData]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,4 +306,10 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
|
|||||||
return dispatch_get_main_queue();
|
return dispatch_get_main_queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)socket:(GCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust
|
||||||
|
completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler
|
||||||
|
{
|
||||||
|
completionHandler(YES);
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -3,14 +3,11 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <Availability.h>
|
|
||||||
#import "GCDAsyncSocket.h"
|
|
||||||
#import "TcpSocketClient.h"
|
#import "TcpSocketClient.h"
|
||||||
#import "RCTBridgeModule.h"
|
|
||||||
#import "RCTBridge.h"
|
|
||||||
#import "RCTEventDispatcher.h"
|
|
||||||
|
|
||||||
@interface TcpSockets : NSObject<SocketClientDelegate, RCTBridgeModule>
|
#import <React/RCTEventEmitter.h>
|
||||||
|
#import "CocoaAsyncSocket/GCDAsyncSocket.h"
|
||||||
|
|
||||||
|
@interface TcpSockets : RCTEventEmitter<SocketClientDelegate>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "RCTAssert.h"
|
#import <React/RCTAssert.h>
|
||||||
#import "RCTBridge.h"
|
#import <React/RCTEventDispatcher.h>
|
||||||
#import "RCTConvert.h"
|
#import <React/RCTConvert.h>
|
||||||
#import "RCTEventDispatcher.h"
|
#import <React/RCTLog.h>
|
||||||
#import "RCTLog.h"
|
|
||||||
#import "TcpSockets.h"
|
#import "TcpSockets.h"
|
||||||
#import "TcpSocketClient.h"
|
#import "TcpSocketClient.h"
|
||||||
|
|
||||||
@ -22,7 +22,23 @@
|
|||||||
|
|
||||||
RCT_EXPORT_MODULE()
|
RCT_EXPORT_MODULE()
|
||||||
|
|
||||||
@synthesize bridge = _bridge;
|
- (NSArray<NSString *> *)supportedEvents
|
||||||
|
{
|
||||||
|
return @[@"connect",
|
||||||
|
@"connection",
|
||||||
|
@"data",
|
||||||
|
@"close",
|
||||||
|
@"secureConnect",
|
||||||
|
@"error"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)startObserving {
|
||||||
|
// Does nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)stopObserving {
|
||||||
|
// Does nothing
|
||||||
|
}
|
||||||
|
|
||||||
-(void)dealloc
|
-(void)dealloc
|
||||||
{
|
{
|
||||||
@ -34,7 +50,7 @@ RCT_EXPORT_MODULE()
|
|||||||
- (TcpSocketClient *)createSocket:(nonnull NSNumber*)cId
|
- (TcpSocketClient *)createSocket:(nonnull NSNumber*)cId
|
||||||
{
|
{
|
||||||
if (!cId) {
|
if (!cId) {
|
||||||
RCTLogError(@"%@.createSocket called with nil id parameter.", [self class]);
|
RCTLogWarn(@"%@.createSocket called with nil id parameter.", [self class]);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +59,7 @@ RCT_EXPORT_MODULE()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_clients[cId]) {
|
if (_clients[cId]) {
|
||||||
RCTLogError(@"%@.createSocket called twice with the same id.", [self class]);
|
RCTLogWarn(@"%@.createSocket called twice with the same id.", [self class]);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +86,33 @@ RCT_EXPORT_METHOD(connect:(nonnull NSNumber*)cId
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_EXPORT_METHOD(connectTls:(nonnull NSNumber*)cId
|
||||||
|
host:(NSString *)host
|
||||||
|
port:(int)port
|
||||||
|
withOptions:(NSDictionary *)options)
|
||||||
|
{
|
||||||
|
TcpSocketClient *client = _clients[cId];
|
||||||
|
if (!client) {
|
||||||
|
client = [self createSocket:cId];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
if (![client connect:host port:port withOptions:options useSsl:YES error:&error])
|
||||||
|
{
|
||||||
|
[self onError:client withError:error];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RCT_EXPORT_METHOD(upgradeToSecure:(nonnull NSNumber*)cId
|
||||||
|
host:(NSString *)host
|
||||||
|
port:(int)port
|
||||||
|
callback:(RCTResponseSenderBlock)callback) {
|
||||||
|
TcpSocketClient* client = [self findClient:cId];
|
||||||
|
if (!client) return;
|
||||||
|
[client upgradeToSecure:host port:port callback:callback];
|
||||||
|
}
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(write:(nonnull NSNumber*)cId
|
RCT_EXPORT_METHOD(write:(nonnull NSNumber*)cId
|
||||||
string:(NSString *)base64String
|
string:(NSString *)base64String
|
||||||
callback:(RCTResponseSenderBlock)callback) {
|
callback:(RCTResponseSenderBlock)callback) {
|
||||||
@ -109,45 +152,51 @@ RCT_EXPORT_METHOD(listen:(nonnull NSNumber*)cId
|
|||||||
|
|
||||||
- (void)onConnect:(TcpSocketClient*) client
|
- (void)onConnect:(TcpSocketClient*) client
|
||||||
{
|
{
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-connect", client.id]
|
[self sendEventWithName:@"connect"
|
||||||
body:[client getAddress]];
|
body:@{ @"id": client.id, @"address" : [client getAddress] }];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)onSecureConnect:(TcpSocketClient*) client
|
||||||
|
{
|
||||||
|
[self sendEventWithName:@"secureConnect"
|
||||||
|
body:@{ @"id": client.id }];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)onConnection:(TcpSocketClient *)client toClient:(NSNumber *)clientID {
|
-(void)onConnection:(TcpSocketClient *)client toClient:(NSNumber *)clientID {
|
||||||
_clients[client.id] = client;
|
_clients[client.id] = client;
|
||||||
|
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-connection", clientID]
|
[self sendEventWithName:@"connection"
|
||||||
body:@{ @"id": client.id, @"address" : [client getAddress] }];
|
body:@{ @"id": clientID, @"info": @{ @"id": client.id, @"address" : [client getAddress] } }];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onData:(NSNumber *)clientID data:(NSData *)data
|
- (void)onData:(NSNumber *)clientID data:(NSData *)data
|
||||||
{
|
{
|
||||||
NSString *base64String = [data base64EncodedStringWithOptions:0];
|
NSString *base64String = [data base64EncodedStringWithOptions:0];
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-data", clientID]
|
[self sendEventWithName:@"data"
|
||||||
body:base64String];
|
body:@{ @"id": clientID, @"data" : base64String }];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onClose:(NSNumber*) clientID withError:(NSError *)err
|
- (void)onClose:(NSNumber*) clientID withError:(NSError *)err
|
||||||
{
|
{
|
||||||
TcpSocketClient* client = [self findClient:clientID];
|
TcpSocketClient* client = [self findClient:clientID];
|
||||||
if (!client) {
|
if (!client) {
|
||||||
RCTLogError(@"onClose: unrecognized client id %@", clientID)
|
RCTLogWarn(@"onClose: unrecognized client id %@", clientID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
[self onError:client withError:err];
|
[self onError:client withError:err];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-close", client.id]
|
[self sendEventWithName:@"close"
|
||||||
body:err == nil ? @NO : @YES];
|
body:@{ @"id": clientID, @"hadError": err == nil ? @NO : @YES }];
|
||||||
|
|
||||||
[_clients removeObjectForKey:client.id];
|
[_clients removeObjectForKey:clientID];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onError:(TcpSocketClient*) client withError:(NSError *)err {
|
- (void)onError:(TcpSocketClient*) client withError:(NSError *)err {
|
||||||
NSString *msg = err.localizedFailureReason ?: err.localizedDescription;
|
NSString *msg = err.localizedFailureReason ?: err.localizedDescription;
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-error", client.id]
|
[self sendEventWithName:@"error"
|
||||||
body:msg];
|
body:@{ @"id": client.id, @"error": msg }];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,8 +205,9 @@ RCT_EXPORT_METHOD(listen:(nonnull NSNumber*)cId
|
|||||||
TcpSocketClient *client = _clients[cId];
|
TcpSocketClient *client = _clients[cId];
|
||||||
if (!client) {
|
if (!client) {
|
||||||
NSString *msg = [NSString stringWithFormat:@"no client found with id %@", cId];
|
NSString *msg = [NSString stringWithFormat:@"no client found with id %@", cId];
|
||||||
[self.bridge.eventDispatcher sendDeviceEventWithName:[NSString stringWithFormat:@"tcp-%@-error", cId]
|
[self sendEventWithName:@"error"
|
||||||
body:msg];
|
body:@{ @"id": cId, @"error": msg }];
|
||||||
|
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -1,18 +0,0 @@
|
|||||||
Pod::Spec.new do |s|
|
|
||||||
s.name = 'react-native-tcp'
|
|
||||||
s.version = '1.0.0'
|
|
||||||
s.summary = 'node\'s net API in React Native.'
|
|
||||||
s.description = <<-DESC
|
|
||||||
Enables accessing tcp sockets in React Native.
|
|
||||||
DESC
|
|
||||||
s.homepage = 'https://github.com/PeelTechnologies/react-native-tcp'
|
|
||||||
s.license = { :type => 'MIT' }
|
|
||||||
s.authors = { 'Andy Prock' => 'aprock@gmail.com' }
|
|
||||||
s.source = { :git => 'https://github.com/PeelTechnologies/react-native-tcp.git' }
|
|
||||||
s.requires_arc = true
|
|
||||||
s.platform = :ios, '7.0'
|
|
||||||
s.prepare_command = 'npm install --production'
|
|
||||||
s.source_files = '*.{c,h,m}', 'CocoaAsyncSocket/*.{h,m}'
|
|
||||||
s.preserve_paths = 'node_modules', '**/*.js', 'package.json'
|
|
||||||
s.header_mappings_dir = '.'
|
|
||||||
end
|
|
||||||
103
package.json
103
package.json
@ -1,18 +1,71 @@
|
|||||||
{
|
{
|
||||||
"name": "react-native-tcp",
|
"_from": "@hawkingnetwork/react-native-tcp",
|
||||||
"version": "3.0.5",
|
"_id": "@hawkingnetwork/react-native-tcp@3.3.2",
|
||||||
"description": "node's net API for react-native",
|
"_inBundle": false,
|
||||||
"main": "TcpSockets.js",
|
"_integrity": "sha512-XY4F58mvx4mz2TmcAhAbGg2CAF/kmcZt8PyaUjsArAXXpXrSIPFqweLSa0DfMhUpZ9XSEyMRvRZG63XACiBdVQ==",
|
||||||
"scripts": {
|
"_location": "/@hawkingnetwork/react-native-tcp",
|
||||||
"start": "exit 1"
|
"_phantomChildren": {
|
||||||
|
"inherits": "2.0.3"
|
||||||
|
},
|
||||||
|
"_requested": {
|
||||||
|
"type": "tag",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@hawkingnetwork/react-native-tcp",
|
||||||
|
"name": "@hawkingnetwork/react-native-tcp",
|
||||||
|
"escapedName": "@hawkingnetwork%2freact-native-tcp",
|
||||||
|
"scope": "@hawkingnetwork",
|
||||||
|
"rawSpec": "",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "latest"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"#USER",
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@hawkingnetwork/react-native-tcp/-/react-native-tcp-3.3.2.tgz",
|
||||||
|
"_shasum": "ed8f89b9e24e4bf2d5ce74a21eead1bd9a1e567a",
|
||||||
|
"_spec": "@hawkingnetwork/react-native-tcp",
|
||||||
|
"_where": "/Users/wesleyfilleman/Developer/MobiLincReact",
|
||||||
|
"author": {
|
||||||
|
"name": "Hawking"
|
||||||
},
|
},
|
||||||
"browser": {
|
"browser": {
|
||||||
"net": "./TcpSockets.js"
|
"net": "./TcpSockets.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"bugs": {
|
||||||
"type": "git",
|
"url": "https://github.com/staltz/react-native-tcp/issues"
|
||||||
"url": "https://github.com/PeelTechnologies/react-native-tcp"
|
|
||||||
},
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Paul Puey",
|
||||||
|
"email": "paul@edgesecure.co"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andy Prock",
|
||||||
|
"email": "aprock@protonmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andre Staltz",
|
||||||
|
"email": "contact@staltz.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "1.3.0",
|
||||||
|
"buffer": "5.2.1",
|
||||||
|
"events": "3.0.0",
|
||||||
|
"ip-regex": "3.0.0",
|
||||||
|
"process": "0.11.10",
|
||||||
|
"stream-browserify": "2.0.1",
|
||||||
|
"util": "0.11.1"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "node's net API for react-native",
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-eslint": "^4.1.6",
|
||||||
|
"eslint-plugin-react": "^3.11.3"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/staltz/react-native-tcp",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"react-component",
|
"react-component",
|
||||||
"reactnative",
|
"reactnative",
|
||||||
@ -23,25 +76,21 @@
|
|||||||
"ios",
|
"ios",
|
||||||
"android"
|
"android"
|
||||||
],
|
],
|
||||||
"author": {
|
|
||||||
"name": "Andy Prock",
|
|
||||||
"email": "aprock@protonmail.com"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": {
|
"main": "TcpSockets.js",
|
||||||
"url": "https://github.com/PeelTechnologies/react-native-tcp/issues"
|
"name": "@hawkingnetwork/react-native-tcp",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react-native": ">=0.40.0"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/PeelTechnologies/react-native-tcp",
|
"publishConfig": {
|
||||||
"dependencies": {
|
"access": "public"
|
||||||
"base64-js": "0.0.8",
|
|
||||||
"buffer": "^5.0.0",
|
|
||||||
"events": "^1.0.2",
|
|
||||||
"ip-regex": "^1.0.3",
|
|
||||||
"process": "^0.11.9",
|
|
||||||
"util": "^0.10.3"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"repository": {
|
||||||
"babel-eslint": "^4.1.6",
|
"type": "git",
|
||||||
"eslint-plugin-react": "^3.11.3"
|
"url": "git+https://github.com/hawkingnetwork/react-native-tcp.git"
|
||||||
}
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "exit 1"
|
||||||
|
},
|
||||||
|
"version": "3.3.2"
|
||||||
}
|
}
|
||||||
|
|||||||
23
react-native-tcp.podspec
Normal file
23
react-native-tcp.podspec
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
require 'json'
|
||||||
|
|
||||||
|
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
||||||
|
|
||||||
|
Pod::Spec.new do |s|
|
||||||
|
|
||||||
|
s.name = 'react-native-tcp'
|
||||||
|
s.version = package['version']
|
||||||
|
s.summary = package['description']
|
||||||
|
s.homepage = package['repository']['url']
|
||||||
|
s.license = package['license']
|
||||||
|
s.author = package['author']
|
||||||
|
s.source = { :git => s.homepage, :tag => 'v#{s.version}' }
|
||||||
|
|
||||||
|
s.requires_arc = true
|
||||||
|
s.ios.deployment_target = '8.0'
|
||||||
|
s.tvos.deployment_target = '9.0'
|
||||||
|
|
||||||
|
s.preserve_paths = 'README.md', 'package.json', '**/*.js'
|
||||||
|
s.source_files = 'ios/**/*.{h,m}'
|
||||||
|
s.dependency 'React'
|
||||||
|
|
||||||
|
end
|
||||||
51
tls/index.js
Normal file
51
tls/index.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2017-present, Edge.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* @providesModule TlsSockets
|
||||||
|
* @flow
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var ipRegex = require('ip-regex');
|
||||||
|
|
||||||
|
var Socket = require('../TcpSocket');
|
||||||
|
var Server = require('../TcpServer');
|
||||||
|
|
||||||
|
exports.createServer = function(connectionListener: (socket: Socket) => void) : Server {
|
||||||
|
return new Server(connectionListener);
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO : determine how to properly overload this with flow
|
||||||
|
exports.connect = exports.createConnection = function() : Socket {
|
||||||
|
if (arguments[0] !== null && typeof arguments[0] === 'object' && arguments[0].socket != null) {
|
||||||
|
var existingSocket = arguments[0].socket;
|
||||||
|
return existingSocket._upgradeToSecure(arguments[1]);
|
||||||
|
}
|
||||||
|
var tcpSocket = new Socket();
|
||||||
|
tcpSocket._enableSsl()
|
||||||
|
console.log('creating new tls', arguments);
|
||||||
|
return Socket.prototype.connect.apply(tcpSocket, tcpSocket._normalizeConnectArgs(arguments));
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isIP = function(input: string) : number {
|
||||||
|
var result = 0;
|
||||||
|
if (ipRegex.v4({exact: true}).test(input)) {
|
||||||
|
result = 4;
|
||||||
|
} else if (ipRegex.v6({exact: true}).test(input)) {
|
||||||
|
result = 6;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isIPv4 = function(input: string) : boolean {
|
||||||
|
return exports.isIP(input) === 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.isIPv6 = function(input: string) : boolean {
|
||||||
|
return exports.isIP(input) === 6;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Socket = Socket;
|
||||||
|
exports.Server = Server;
|
||||||
896
yarn.lock
Normal file
896
yarn.lock
Normal file
@ -0,0 +1,896 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
acorn-to-esprima@^1.0.5:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn-to-esprima/-/acorn-to-esprima-1.0.7.tgz#9436259760098f9ead9b9da2242fab2f4850281b"
|
||||||
|
|
||||||
|
acorn@^5.2.1:
|
||||||
|
version "5.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
|
||||||
|
|
||||||
|
align-text@^0.1.1, align-text@^0.1.3:
|
||||||
|
version "0.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
|
||||||
|
dependencies:
|
||||||
|
kind-of "^3.0.2"
|
||||||
|
longest "^1.0.1"
|
||||||
|
repeat-string "^1.5.2"
|
||||||
|
|
||||||
|
alter@~0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd"
|
||||||
|
dependencies:
|
||||||
|
stable "~0.1.3"
|
||||||
|
|
||||||
|
amdefine@>=0.0.4:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
|
||||||
|
|
||||||
|
ansi-regex@^2.0.0:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||||
|
|
||||||
|
ansi-styles@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||||
|
|
||||||
|
ast-traverse@~0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6"
|
||||||
|
|
||||||
|
ast-types@0.8.12:
|
||||||
|
version "0.8.12"
|
||||||
|
resolved "http://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc"
|
||||||
|
|
||||||
|
ast-types@0.8.15:
|
||||||
|
version "0.8.15"
|
||||||
|
resolved "http://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
|
||||||
|
|
||||||
|
ast-types@0.9.6:
|
||||||
|
version "0.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
|
||||||
|
|
||||||
|
babel-core@^5.8.33:
|
||||||
|
version "5.8.38"
|
||||||
|
resolved "http://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558"
|
||||||
|
dependencies:
|
||||||
|
babel-plugin-constant-folding "^1.0.1"
|
||||||
|
babel-plugin-dead-code-elimination "^1.0.2"
|
||||||
|
babel-plugin-eval "^1.0.1"
|
||||||
|
babel-plugin-inline-environment-variables "^1.0.1"
|
||||||
|
babel-plugin-jscript "^1.0.4"
|
||||||
|
babel-plugin-member-expression-literals "^1.0.1"
|
||||||
|
babel-plugin-property-literals "^1.0.1"
|
||||||
|
babel-plugin-proto-to-assign "^1.0.3"
|
||||||
|
babel-plugin-react-constant-elements "^1.0.3"
|
||||||
|
babel-plugin-react-display-name "^1.0.3"
|
||||||
|
babel-plugin-remove-console "^1.0.1"
|
||||||
|
babel-plugin-remove-debugger "^1.0.1"
|
||||||
|
babel-plugin-runtime "^1.0.7"
|
||||||
|
babel-plugin-undeclared-variables-check "^1.0.2"
|
||||||
|
babel-plugin-undefined-to-void "^1.1.6"
|
||||||
|
babylon "^5.8.38"
|
||||||
|
bluebird "^2.9.33"
|
||||||
|
chalk "^1.0.0"
|
||||||
|
convert-source-map "^1.1.0"
|
||||||
|
core-js "^1.0.0"
|
||||||
|
debug "^2.1.1"
|
||||||
|
detect-indent "^3.0.0"
|
||||||
|
esutils "^2.0.0"
|
||||||
|
fs-readdir-recursive "^0.1.0"
|
||||||
|
globals "^6.4.0"
|
||||||
|
home-or-tmp "^1.0.0"
|
||||||
|
is-integer "^1.0.4"
|
||||||
|
js-tokens "1.0.1"
|
||||||
|
json5 "^0.4.0"
|
||||||
|
lodash "^3.10.0"
|
||||||
|
minimatch "^2.0.3"
|
||||||
|
output-file-sync "^1.1.0"
|
||||||
|
path-exists "^1.0.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
private "^0.1.6"
|
||||||
|
regenerator "0.8.40"
|
||||||
|
regexpu "^1.3.0"
|
||||||
|
repeating "^1.1.2"
|
||||||
|
resolve "^1.1.6"
|
||||||
|
shebang-regex "^1.0.0"
|
||||||
|
slash "^1.0.0"
|
||||||
|
source-map "^0.5.0"
|
||||||
|
source-map-support "^0.2.10"
|
||||||
|
to-fast-properties "^1.0.0"
|
||||||
|
trim-right "^1.0.0"
|
||||||
|
try-resolve "^1.0.0"
|
||||||
|
|
||||||
|
babel-eslint@^4.1.6:
|
||||||
|
version "4.1.8"
|
||||||
|
resolved "http://registry.npmjs.org/babel-eslint/-/babel-eslint-4.1.8.tgz#4f79e7a4f5879ecf03f48cb16f552a355fcc31b2"
|
||||||
|
dependencies:
|
||||||
|
acorn-to-esprima "^1.0.5"
|
||||||
|
babel-core "^5.8.33"
|
||||||
|
lodash.assign "^3.2.0"
|
||||||
|
lodash.pick "^3.1.0"
|
||||||
|
|
||||||
|
babel-plugin-constant-folding@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e"
|
||||||
|
|
||||||
|
babel-plugin-dead-code-elimination@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65"
|
||||||
|
|
||||||
|
babel-plugin-eval@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da"
|
||||||
|
|
||||||
|
babel-plugin-inline-environment-variables@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe"
|
||||||
|
|
||||||
|
babel-plugin-jscript@^1.0.4:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc"
|
||||||
|
|
||||||
|
babel-plugin-member-expression-literals@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3"
|
||||||
|
|
||||||
|
babel-plugin-property-literals@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336"
|
||||||
|
|
||||||
|
babel-plugin-proto-to-assign@^1.0.3:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123"
|
||||||
|
dependencies:
|
||||||
|
lodash "^3.9.3"
|
||||||
|
|
||||||
|
babel-plugin-react-constant-elements@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a"
|
||||||
|
|
||||||
|
babel-plugin-react-display-name@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc"
|
||||||
|
|
||||||
|
babel-plugin-remove-console@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7"
|
||||||
|
|
||||||
|
babel-plugin-remove-debugger@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7"
|
||||||
|
|
||||||
|
babel-plugin-runtime@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf"
|
||||||
|
|
||||||
|
babel-plugin-undeclared-variables-check@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "http://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee"
|
||||||
|
dependencies:
|
||||||
|
leven "^1.0.2"
|
||||||
|
|
||||||
|
babel-plugin-undefined-to-void@^1.1.6:
|
||||||
|
version "1.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81"
|
||||||
|
|
||||||
|
babylon@^5.8.38:
|
||||||
|
version "5.8.38"
|
||||||
|
resolved "http://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd"
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
|
||||||
|
base64-js@1.3.0, base64-js@^1.0.2:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
|
||||||
|
|
||||||
|
bluebird@^2.9.33:
|
||||||
|
version "2.11.0"
|
||||||
|
resolved "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
|
||||||
|
|
||||||
|
brace-expansion@^1.0.0, brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
breakable@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1"
|
||||||
|
|
||||||
|
buffer@5.2.1:
|
||||||
|
version "5.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
|
||||||
|
dependencies:
|
||||||
|
base64-js "^1.0.2"
|
||||||
|
ieee754 "^1.1.4"
|
||||||
|
|
||||||
|
camelcase@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
|
||||||
|
|
||||||
|
center-align@^0.1.1:
|
||||||
|
version "0.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
|
||||||
|
dependencies:
|
||||||
|
align-text "^0.1.3"
|
||||||
|
lazy-cache "^1.0.3"
|
||||||
|
|
||||||
|
chalk@^1.0.0:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^2.2.1"
|
||||||
|
escape-string-regexp "^1.0.2"
|
||||||
|
has-ansi "^2.0.0"
|
||||||
|
strip-ansi "^3.0.0"
|
||||||
|
supports-color "^2.0.0"
|
||||||
|
|
||||||
|
cliui@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
|
||||||
|
dependencies:
|
||||||
|
center-align "^0.1.1"
|
||||||
|
right-align "^0.1.1"
|
||||||
|
wordwrap "0.0.2"
|
||||||
|
|
||||||
|
commander@^2.5.0:
|
||||||
|
version "2.19.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
||||||
|
|
||||||
|
commoner@~0.10.3:
|
||||||
|
version "0.10.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5"
|
||||||
|
dependencies:
|
||||||
|
commander "^2.5.0"
|
||||||
|
detective "^4.3.1"
|
||||||
|
glob "^5.0.15"
|
||||||
|
graceful-fs "^4.1.2"
|
||||||
|
iconv-lite "^0.4.5"
|
||||||
|
mkdirp "^0.5.0"
|
||||||
|
private "^0.1.6"
|
||||||
|
q "^1.1.2"
|
||||||
|
recast "^0.11.17"
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
|
||||||
|
convert-source-map@^1.1.0:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "~5.1.1"
|
||||||
|
|
||||||
|
core-js@^1.0.0:
|
||||||
|
version "1.2.7"
|
||||||
|
resolved "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
|
||||||
|
|
||||||
|
core-util-is@~1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
|
|
||||||
|
debug@^2.1.1:
|
||||||
|
version "2.6.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
|
dependencies:
|
||||||
|
ms "2.0.0"
|
||||||
|
|
||||||
|
decamelize@^1.0.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||||
|
|
||||||
|
defined@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
|
||||||
|
|
||||||
|
defs@~1.1.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2"
|
||||||
|
dependencies:
|
||||||
|
alter "~0.2.0"
|
||||||
|
ast-traverse "~0.1.1"
|
||||||
|
breakable "~1.0.0"
|
||||||
|
esprima-fb "~15001.1001.0-dev-harmony-fb"
|
||||||
|
simple-fmt "~0.1.0"
|
||||||
|
simple-is "~0.2.0"
|
||||||
|
stringmap "~0.2.2"
|
||||||
|
stringset "~0.2.1"
|
||||||
|
tryor "~0.1.2"
|
||||||
|
yargs "~3.27.0"
|
||||||
|
|
||||||
|
detect-indent@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75"
|
||||||
|
dependencies:
|
||||||
|
get-stdin "^4.0.1"
|
||||||
|
minimist "^1.1.0"
|
||||||
|
repeating "^1.1.0"
|
||||||
|
|
||||||
|
detective@^4.3.1:
|
||||||
|
version "4.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
|
||||||
|
dependencies:
|
||||||
|
acorn "^5.2.1"
|
||||||
|
defined "^1.0.0"
|
||||||
|
|
||||||
|
escape-string-regexp@^1.0.2:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
|
||||||
|
eslint-plugin-react@^3.11.3:
|
||||||
|
version "3.16.1"
|
||||||
|
resolved "http://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-3.16.1.tgz#262d96b77d7c4a42af809a73c0e527a58612293c"
|
||||||
|
|
||||||
|
esprima-fb@~15001.1001.0-dev-harmony-fb:
|
||||||
|
version "15001.1001.0-dev-harmony-fb"
|
||||||
|
resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
|
||||||
|
|
||||||
|
esprima@^2.6.0:
|
||||||
|
version "2.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
|
||||||
|
|
||||||
|
esprima@~3.1.0:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||||
|
|
||||||
|
esutils@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
|
||||||
|
|
||||||
|
events@3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
|
||||||
|
|
||||||
|
fs-readdir-recursive@^0.1.0:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059"
|
||||||
|
|
||||||
|
get-stdin@^4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||||
|
|
||||||
|
glob@^5.0.15:
|
||||||
|
version "5.0.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
|
||||||
|
dependencies:
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "2 || 3"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
globals@^6.4.0:
|
||||||
|
version "6.4.1"
|
||||||
|
resolved "http://registry.npmjs.org/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f"
|
||||||
|
|
||||||
|
graceful-fs@^4.1.2, graceful-fs@^4.1.4:
|
||||||
|
version "4.1.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
|
|
||||||
|
has-ansi@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.0.0"
|
||||||
|
|
||||||
|
home-or-tmp@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985"
|
||||||
|
dependencies:
|
||||||
|
os-tmpdir "^1.0.1"
|
||||||
|
user-home "^1.1.1"
|
||||||
|
|
||||||
|
iconv-lite@^0.4.5:
|
||||||
|
version "0.4.24"
|
||||||
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
|
dependencies:
|
||||||
|
safer-buffer ">= 2.1.2 < 3"
|
||||||
|
|
||||||
|
ieee754@^1.1.4:
|
||||||
|
version "1.1.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2, inherits@2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||||
|
|
||||||
|
invert-kv@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||||
|
|
||||||
|
ip-regex@3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-3.0.0.tgz#0a934694b4066558c46294244a23cc33116bf732"
|
||||||
|
|
||||||
|
is-buffer@^1.1.5:
|
||||||
|
version "1.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||||
|
|
||||||
|
is-finite@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
|
||||||
|
dependencies:
|
||||||
|
number-is-nan "^1.0.0"
|
||||||
|
|
||||||
|
is-integer@^1.0.4:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c"
|
||||||
|
dependencies:
|
||||||
|
is-finite "^1.0.0"
|
||||||
|
|
||||||
|
isarray@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||||
|
|
||||||
|
js-tokens@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae"
|
||||||
|
|
||||||
|
jsesc@~0.5.0:
|
||||||
|
version "0.5.0"
|
||||||
|
resolved "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
|
||||||
|
|
||||||
|
json5@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "http://registry.npmjs.org/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d"
|
||||||
|
|
||||||
|
kind-of@^3.0.2:
|
||||||
|
version "3.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
||||||
|
dependencies:
|
||||||
|
is-buffer "^1.1.5"
|
||||||
|
|
||||||
|
lazy-cache@^1.0.3:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
|
||||||
|
|
||||||
|
lcid@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||||
|
dependencies:
|
||||||
|
invert-kv "^1.0.0"
|
||||||
|
|
||||||
|
leven@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3"
|
||||||
|
|
||||||
|
lodash._baseassign@^3.0.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
|
||||||
|
dependencies:
|
||||||
|
lodash._basecopy "^3.0.0"
|
||||||
|
lodash.keys "^3.0.0"
|
||||||
|
|
||||||
|
lodash._basecopy@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
|
||||||
|
|
||||||
|
lodash._baseflatten@^3.0.0:
|
||||||
|
version "3.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7"
|
||||||
|
dependencies:
|
||||||
|
lodash.isarguments "^3.0.0"
|
||||||
|
lodash.isarray "^3.0.0"
|
||||||
|
|
||||||
|
lodash._basefor@^3.0.0:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
|
||||||
|
|
||||||
|
lodash._bindcallback@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
|
||||||
|
|
||||||
|
lodash._createassigner@^3.0.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
|
||||||
|
dependencies:
|
||||||
|
lodash._bindcallback "^3.0.0"
|
||||||
|
lodash._isiterateecall "^3.0.0"
|
||||||
|
lodash.restparam "^3.0.0"
|
||||||
|
|
||||||
|
lodash._getnative@^3.0.0:
|
||||||
|
version "3.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
|
||||||
|
|
||||||
|
lodash._isiterateecall@^3.0.0:
|
||||||
|
version "3.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
|
||||||
|
|
||||||
|
lodash._pickbyarray@^3.0.0:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5"
|
||||||
|
|
||||||
|
lodash._pickbycallback@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a"
|
||||||
|
dependencies:
|
||||||
|
lodash._basefor "^3.0.0"
|
||||||
|
lodash.keysin "^3.0.0"
|
||||||
|
|
||||||
|
lodash.assign@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
|
||||||
|
dependencies:
|
||||||
|
lodash._baseassign "^3.0.0"
|
||||||
|
lodash._createassigner "^3.0.0"
|
||||||
|
lodash.keys "^3.0.0"
|
||||||
|
|
||||||
|
lodash.isarguments@^3.0.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
|
||||||
|
|
||||||
|
lodash.isarray@^3.0.0:
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
|
||||||
|
|
||||||
|
lodash.keys@^3.0.0:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
|
||||||
|
dependencies:
|
||||||
|
lodash._getnative "^3.0.0"
|
||||||
|
lodash.isarguments "^3.0.0"
|
||||||
|
lodash.isarray "^3.0.0"
|
||||||
|
|
||||||
|
lodash.keysin@^3.0.0:
|
||||||
|
version "3.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f"
|
||||||
|
dependencies:
|
||||||
|
lodash.isarguments "^3.0.0"
|
||||||
|
lodash.isarray "^3.0.0"
|
||||||
|
|
||||||
|
lodash.pick@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-3.1.0.tgz#f252a855b2046b61bcd3904b26f76bd2efc65550"
|
||||||
|
dependencies:
|
||||||
|
lodash._baseflatten "^3.0.0"
|
||||||
|
lodash._bindcallback "^3.0.0"
|
||||||
|
lodash._pickbyarray "^3.0.0"
|
||||||
|
lodash._pickbycallback "^3.0.0"
|
||||||
|
lodash.restparam "^3.0.0"
|
||||||
|
|
||||||
|
lodash.restparam@^3.0.0:
|
||||||
|
version "3.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
|
||||||
|
|
||||||
|
lodash@^3.10.0, lodash@^3.9.3:
|
||||||
|
version "3.10.1"
|
||||||
|
resolved "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
|
||||||
|
|
||||||
|
longest@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
|
||||||
|
|
||||||
|
"minimatch@2 || 3":
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
minimatch@^2.0.3:
|
||||||
|
version "2.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.0.0"
|
||||||
|
|
||||||
|
minimist@0.0.8:
|
||||||
|
version "0.0.8"
|
||||||
|
resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
|
|
||||||
|
minimist@^1.1.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
|
|
||||||
|
mkdirp@^0.5.0, mkdirp@^0.5.1:
|
||||||
|
version "0.5.1"
|
||||||
|
resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||||
|
dependencies:
|
||||||
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
ms@2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
|
|
||||||
|
number-is-nan@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||||
|
|
||||||
|
object-assign@^4.1.0:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
os-locale@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
|
||||||
|
dependencies:
|
||||||
|
lcid "^1.0.0"
|
||||||
|
|
||||||
|
os-tmpdir@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
|
|
||||||
|
output-file-sync@^1.1.0:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.1.4"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
|
object-assign "^4.1.0"
|
||||||
|
|
||||||
|
path-exists@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
|
||||||
|
path-parse@^1.0.5:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||||
|
|
||||||
|
private@^0.1.6, private@~0.1.5:
|
||||||
|
version "0.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||||
|
|
||||||
|
process-nextick-args@~2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||||
|
|
||||||
|
process@0.11.10:
|
||||||
|
version "0.11.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||||
|
|
||||||
|
q@^1.1.2:
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
||||||
|
|
||||||
|
readable-stream@^2.0.2:
|
||||||
|
version "2.3.6"
|
||||||
|
resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||||
|
dependencies:
|
||||||
|
core-util-is "~1.0.0"
|
||||||
|
inherits "~2.0.3"
|
||||||
|
isarray "~1.0.0"
|
||||||
|
process-nextick-args "~2.0.0"
|
||||||
|
safe-buffer "~5.1.1"
|
||||||
|
string_decoder "~1.1.1"
|
||||||
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
|
recast@0.10.33:
|
||||||
|
version "0.10.33"
|
||||||
|
resolved "http://registry.npmjs.org/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
|
||||||
|
dependencies:
|
||||||
|
ast-types "0.8.12"
|
||||||
|
esprima-fb "~15001.1001.0-dev-harmony-fb"
|
||||||
|
private "~0.1.5"
|
||||||
|
source-map "~0.5.0"
|
||||||
|
|
||||||
|
recast@^0.10.10:
|
||||||
|
version "0.10.43"
|
||||||
|
resolved "http://registry.npmjs.org/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
|
||||||
|
dependencies:
|
||||||
|
ast-types "0.8.15"
|
||||||
|
esprima-fb "~15001.1001.0-dev-harmony-fb"
|
||||||
|
private "~0.1.5"
|
||||||
|
source-map "~0.5.0"
|
||||||
|
|
||||||
|
recast@^0.11.17:
|
||||||
|
version "0.11.23"
|
||||||
|
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
|
||||||
|
dependencies:
|
||||||
|
ast-types "0.9.6"
|
||||||
|
esprima "~3.1.0"
|
||||||
|
private "~0.1.5"
|
||||||
|
source-map "~0.5.0"
|
||||||
|
|
||||||
|
regenerate@^1.2.1:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
|
||||||
|
|
||||||
|
regenerator@0.8.40:
|
||||||
|
version "0.8.40"
|
||||||
|
resolved "http://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8"
|
||||||
|
dependencies:
|
||||||
|
commoner "~0.10.3"
|
||||||
|
defs "~1.1.0"
|
||||||
|
esprima-fb "~15001.1001.0-dev-harmony-fb"
|
||||||
|
private "~0.1.5"
|
||||||
|
recast "0.10.33"
|
||||||
|
through "~2.3.8"
|
||||||
|
|
||||||
|
regexpu@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d"
|
||||||
|
dependencies:
|
||||||
|
esprima "^2.6.0"
|
||||||
|
recast "^0.10.10"
|
||||||
|
regenerate "^1.2.1"
|
||||||
|
regjsgen "^0.2.0"
|
||||||
|
regjsparser "^0.1.4"
|
||||||
|
|
||||||
|
regjsgen@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
|
||||||
|
|
||||||
|
regjsparser@^0.1.4:
|
||||||
|
version "0.1.5"
|
||||||
|
resolved "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
|
||||||
|
dependencies:
|
||||||
|
jsesc "~0.5.0"
|
||||||
|
|
||||||
|
repeat-string@^1.5.2:
|
||||||
|
version "1.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||||
|
|
||||||
|
repeating@^1.1.0, repeating@^1.1.2:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
|
||||||
|
dependencies:
|
||||||
|
is-finite "^1.0.0"
|
||||||
|
|
||||||
|
resolve@^1.1.6:
|
||||||
|
version "1.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
|
||||||
|
dependencies:
|
||||||
|
path-parse "^1.0.5"
|
||||||
|
|
||||||
|
right-align@^0.1.1:
|
||||||
|
version "0.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
|
||||||
|
dependencies:
|
||||||
|
align-text "^0.1.1"
|
||||||
|
|
||||||
|
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||||
|
|
||||||
|
"safer-buffer@>= 2.1.2 < 3":
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
|
|
||||||
|
shebang-regex@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||||
|
|
||||||
|
simple-fmt@~0.1.0:
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b"
|
||||||
|
|
||||||
|
simple-is@~0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0"
|
||||||
|
|
||||||
|
slash@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
||||||
|
|
||||||
|
source-map-support@^0.2.10:
|
||||||
|
version "0.2.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc"
|
||||||
|
dependencies:
|
||||||
|
source-map "0.1.32"
|
||||||
|
|
||||||
|
source-map@0.1.32:
|
||||||
|
version "0.1.32"
|
||||||
|
resolved "http://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266"
|
||||||
|
dependencies:
|
||||||
|
amdefine ">=0.0.4"
|
||||||
|
|
||||||
|
source-map@^0.5.0, source-map@~0.5.0:
|
||||||
|
version "0.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||||
|
|
||||||
|
stable@~0.1.3:
|
||||||
|
version "0.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
|
||||||
|
|
||||||
|
stream-browserify@2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
|
||||||
|
dependencies:
|
||||||
|
inherits "~2.0.1"
|
||||||
|
readable-stream "^2.0.2"
|
||||||
|
|
||||||
|
string_decoder@~1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "~5.1.0"
|
||||||
|
|
||||||
|
stringmap@~0.2.2:
|
||||||
|
version "0.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1"
|
||||||
|
|
||||||
|
stringset@~0.2.1:
|
||||||
|
version "0.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5"
|
||||||
|
|
||||||
|
strip-ansi@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.0.0"
|
||||||
|
|
||||||
|
supports-color@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||||
|
|
||||||
|
through@~2.3.8:
|
||||||
|
version "2.3.8"
|
||||||
|
resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
|
|
||||||
|
to-fast-properties@^1.0.0:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
||||||
|
|
||||||
|
trim-right@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||||
|
|
||||||
|
try-resolve@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912"
|
||||||
|
|
||||||
|
tryor@~0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"
|
||||||
|
|
||||||
|
user-home@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
|
||||||
|
|
||||||
|
util-deprecate@~1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
|
|
||||||
|
util@0.11.1:
|
||||||
|
version "0.11.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
|
||||||
|
dependencies:
|
||||||
|
inherits "2.0.3"
|
||||||
|
|
||||||
|
window-size@^0.1.2:
|
||||||
|
version "0.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
|
||||||
|
|
||||||
|
wordwrap@0.0.2:
|
||||||
|
version "0.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
|
||||||
|
y18n@^3.2.0:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||||
|
|
||||||
|
yargs@~3.27.0:
|
||||||
|
version "3.27.0"
|
||||||
|
resolved "http://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40"
|
||||||
|
dependencies:
|
||||||
|
camelcase "^1.2.1"
|
||||||
|
cliui "^2.1.0"
|
||||||
|
decamelize "^1.0.0"
|
||||||
|
os-locale "^1.4.0"
|
||||||
|
window-size "^0.1.2"
|
||||||
|
y18n "^3.2.0"
|
||||||
Loading…
Reference in New Issue
Block a user