diff --git a/README.md b/README.md index e837828..621fb8e 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,17 @@ export default combineReducers({ }) ``` -thats simpleset form of reducer and selectors +## Selectors + +we recommend you follow example folder. + +- export default function from reducer.js file as your reducer +- export named exports for selectors. +- selectors you pass into provider has 2 cool features + - it automaticlly get store as first argument, so u dont have to pass store yourself everytime you use it + - avoid import hell ! + +example folder contain simpleset form of reducer and selectors ## Actions diff --git a/example/package.json b/example/package.json index 7ea20f4..1a02b52 100644 --- a/example/package.json +++ b/example/package.json @@ -5,11 +5,12 @@ "license": "MIT", "private": true, "dependencies": { + "babel-polyfill": "^6.26.0", "prop-types": "^15.6.2", "react": "^16.4.1", "react-dom": "^16.4.1", - "react-scripts": "^1.1.4", - "react-pubflux": "link:.." + "react-pubflux": "link:..", + "react-scripts": "^1.1.4" }, "scripts": { "start": "react-scripts start", diff --git a/example/src/App.js b/example/src/App.js index 8ef26f3..cbe2db2 100644 --- a/example/src/App.js +++ b/example/src/App.js @@ -1,10 +1,11 @@ import React, { Component } from 'react' import { withFlux } from 'react-pubflux' -import { LOGIN_START, LOGIN_END, ATTEMPT_LOGIN , CONFIG, CONFIG_RESET } from './sdk/events'; - +import { LOGIN_START, LOGIN_END, ATTEMPT_LOGIN , LOGIN_RESET, CONFIG, CONFIG_RESET } from './sdk/events'; +import UserComponent from './UserComponent' class App extends Component { + state = {loading: null}; componentDidMount(){ const { listen } = this.props; @@ -19,7 +20,10 @@ class App extends Component { } setConfig = () => { - this.props.emit(CONFIG, {value: Math.random()}, true) // 3rd param === true mean send this directly to reducer :) + // 3rd param === true mean send this directly to reducer :) + // i dont recommend this way because it will ignore all actions, yet it exsists for convience + // this will go --> rootReducer --> update store --> back + this.props.emit(CONFIG, {data:{randome: Math.random()}}, true) } clearConfig = () => { @@ -28,20 +32,27 @@ class App extends Component { login = () => { this.props.emit(ATTEMPT_LOGIN, { - username:'demo'+ parseInt( Math.random()*100 ), + username:'demo', password:'demo' }); } + resetAuth = () => this.props.emit(LOGIN_RESET) + render () { + const {loading} = this.state + const ids = Object.keys(this.props.appUsers); return (
-

Hello world

+

{loading === true ? 'Loading...' : loading === null ? 'Hello' : 'Finished'}

+ - +
{JSON.stringify(this.props,null, 2)}
) diff --git a/example/src/UserComponent.js b/example/src/UserComponent.js new file mode 100644 index 0000000..67726be --- /dev/null +++ b/example/src/UserComponent.js @@ -0,0 +1,20 @@ +import React from 'react'; +import {withFlux} from 'react-pubflux'; + +class UserComponent extends React.PureComponent{ + + render(){ + const { data } = this.props; + + return
  • + : {data.username} +
  • + } +} + +UserComponent.stateToProps = (store, select, props)=>({ + // notice we dont need to pass store to getUserById.. its already bound + data: select.auth.getUserById(props.id) +}) + +export default withFlux(UserComponent) diff --git a/example/src/index.js b/example/src/index.js index 52866c0..30240f2 100644 --- a/example/src/index.js +++ b/example/src/index.js @@ -1,10 +1,10 @@ +import 'babel-polyfill' import React from 'react' import ReactDOM from 'react-dom' import { rootReducer, selectors, actions, - Storage, STORAGE_ADDR, } from './sdk'; import { Provider } from 'react-pubflux'; @@ -13,6 +13,8 @@ import './index.css' import App from './App' const rootEl = document.getElementById('root'); +const persistState = state => localStorage.setItem(STORAGE_ADDR, JSON.stringify(state)); +const initialState = JSON.parse(localStorage.getItem(STORAGE_ADDR) || "{}") ReactDOM.render({ // memic api call ! const user = { - id: parseInt( Math.random()*100 ), // randome id - username: data.username + id: parseInt( Math.random()*100 , 0), // randome id + username } const data = { ok: true, diff --git a/example/src/sdk/auth/const.js b/example/src/sdk/auth/const.js index 698baca..0cc3eb8 100644 --- a/example/src/sdk/auth/const.js +++ b/example/src/sdk/auth/const.js @@ -1,3 +1,7 @@ // always name your leaf after folder name export const leaf = 'auth'; -export const initalState = { } +export const initialState = { } +export const noobUser = { + id: '0', + username: 'N/A' +} diff --git a/example/src/sdk/auth/reducer.js b/example/src/sdk/auth/reducer.js index f54b05b..77c6187 100644 --- a/example/src/sdk/auth/reducer.js +++ b/example/src/sdk/auth/reducer.js @@ -1,4 +1,4 @@ -import { leaf, initialState } from "./const"; +import { leaf, initialState, noobUser } from "./const"; import {LOGIN_SUCCESS, LOGIN_RESET} from '../events'; // path: store.auth @@ -20,4 +20,5 @@ authReducer.initialState = initialState; export default authReducer; -export const getUsers = store => store[leaf] || initialState; +export const getAuth = store => store[leaf] || initialState; +export const getUserById = (store, id) => getAuth(store)[id] || noobUser; diff --git a/example/src/sdk/config/actions.js b/example/src/sdk/config/actions.js index 0137341..cd3b533 100644 --- a/example/src/sdk/config/actions.js +++ b/example/src/sdk/config/actions.js @@ -5,6 +5,7 @@ import { // i'm a noob fn. i will just use this to pass along events to reducer function noob(eventName, eventData){ + console.log('noob runniung', eventName); return { type: eventName, data: eventData diff --git a/example/src/sdk/config/const.js b/example/src/sdk/config/const.js index d000b03..e0444ec 100644 --- a/example/src/sdk/config/const.js +++ b/example/src/sdk/config/const.js @@ -1,5 +1,5 @@ export const leaf = 'config'; -export const initalState = { - randome: Math.random() +export const initialState = { + randome: 0 } diff --git a/example/src/sdk/config/reducer.js b/example/src/sdk/config/reducer.js index 45f1944..c022e9b 100644 --- a/example/src/sdk/config/reducer.js +++ b/example/src/sdk/config/reducer.js @@ -17,3 +17,5 @@ configReducer.initialState = initialState; configReducer.eventName = [CONFIG, CONFIG_RESET]; export default configReducer; + +export const getConfig = store => store[leaf] || initialState; diff --git a/example/src/sdk/index.js b/example/src/sdk/index.js index 5d3353b..73b4f20 100644 --- a/example/src/sdk/index.js +++ b/example/src/sdk/index.js @@ -19,3 +19,5 @@ export const actions = [ ...Config.actions, ...Auth.actions ]; + +export const STORAGE_ADDR = '/APP/V1/' diff --git a/example/yarn.lock b/example/yarn.lock index dfc326b..652513f 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -346,6 +346,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1005,6 +1010,15 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-preset-env@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" @@ -1158,6 +1172,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base-64@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= + base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -1674,6 +1693,11 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +clone@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1778,6 +1802,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -4533,6 +4562,11 @@ js-yaml@~3.7.0: argparse "^1.0.7" esprima "^2.6.0" +jsan@^3.1.3: + version "3.1.13" + resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.13.tgz#4de8c7bf8d1cfcd020c313d438f930cec4b91d86" + integrity sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4731,6 +4765,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linked-list@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf" + integrity sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -6252,7 +6291,7 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= @@ -6523,6 +6562,11 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -6602,6 +6646,16 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remotedev@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/remotedev/-/remotedev-0.2.9.tgz#a5f148704bc6bf6e46e93640cabb7b4ed3f7fc12" + integrity sha512-W8dHOv9BcFnetFEd08yNb5O9Hd+zkTFFnf9FRjNCkb4u+JgQ/U152Aw4q83AmY3m34d6KZwhK5ip/Qc331+4vA== + dependencies: + jsan "^3.1.3" + querystring "^0.2.0" + rn-host-detect "^1.0.1" + socketcluster-client "^13.0.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -6773,6 +6827,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rn-host-detect@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" + integrity sha512-ufk2dFT3QeP9HyZ/xTuMtW27KnFy815CYitJMqQm+pgG3ZAtHBsrU8nXizNKkqXGy3bQmhEoloVbrfbvMJMqkg== + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -6827,6 +6886,23 @@ sax@^1.2.1, sax@^1.2.4, sax@~1.2.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sc-channel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.2.0.tgz#d9209f3a91e3fa694c66b011ce55c4ad8c3087d9" + integrity sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA== + dependencies: + component-emitter "1.2.1" + +sc-errors@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.4.1.tgz#53e80030fe647e133d73b51eaa7d2b0f7591fd5b" + integrity sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ== + +sc-formatter@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6" + integrity sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A== + scheduler@^0.13.6: version "0.13.6" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" @@ -7035,6 +7111,22 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socketcluster-client@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-13.0.1.tgz#920e0a2437c228555e84f8ef0c9c5eb720e6067e" + integrity sha512-hxiE2xz6mgaBlhXbtBa4POgWVEvIcjCoHzf5LTUVhI9IL8V2ltV3Ze8pQsi9egqTjSz4RHPfyrJ7BiETe5Kthw== + dependencies: + base-64 "0.1.0" + clone "2.1.1" + component-emitter "1.2.1" + linked-list "0.1.0" + querystring "0.2.0" + sc-channel "^1.2.0" + sc-errors "^1.4.0" + sc-formatter "^3.0.1" + uuid "3.2.1" + ws "5.1.1" + sockjs-client@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" @@ -7795,6 +7887,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -8084,6 +8181,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.1.1.tgz#1d43704689711ac1942fd2f283e38f825c4b8b95" + integrity sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw== + dependencies: + async-limiter "~1.0.0" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" diff --git a/package.json b/package.json index 1f99130..ea33c9c 100644 --- a/package.json +++ b/package.json @@ -58,5 +58,7 @@ "files": [ "dist" ], - "dependencies": {} + "dependencies": { + "remotedev": "^0.2.9" + } } diff --git a/src/index.js b/src/index.js index 47f37eb..29d9245 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,4 @@ import * as React from 'react'; -import { connectViaExtension, extractState } from 'remotedev'; import t from 'prop-types'; import { subscribe, @@ -8,7 +7,31 @@ import { isFunction, INIT_ACTION } from './utils'; -const remotedev = connectViaExtension(); +function hasRemoteDev(){ + return typeof window !== 'undefined' && !!window.__REDUX_DEVTOOLS_EXTENSION__; +} + +function buildRemoteDev(){ + if( !hasRemoteDev() ) + return { + send: noob, + subscribe: noob, + init: noob, + } + return require('remotedev').connectViaExtension() +} + +function extractStateFactory(){ + if(hasRemoteDev()) + return require('remotedev').extractState + + return noob; +} + + +const remotedev = buildRemoteDev(); +const extractState = extractStateFactory(); + const noob = () => null; const Context = React.createContext({ listen: noob, @@ -81,6 +104,7 @@ class ReactPubFlux extends React.Component { if (newState && newState !== this.state) { this.setState(newState, () => resolve(this.state)); } else { + console.log('state did not change') return resolve(newState); } }); @@ -96,8 +120,6 @@ class ReactPubFlux extends React.Component { actionCreators = actionCreators.concat(this.emitter[event]); } - remotedev.send({ type: `@@${event}`, ...data }, this.state); - const promises = actionCreators.map( async fn => await fn(event, data, this.emit, this.getState), ); @@ -194,4 +216,5 @@ export { Connect, ReactPubFlux as Provider, }; + export default ReactPubFlux; diff --git a/src/utils.js b/src/utils.js index e698642..608ce52 100644 --- a/src/utils.js +++ b/src/utils.js @@ -17,6 +17,15 @@ export function subscribe(name, fn, eventStore) { export function combineReducers(reducers) { const reducerKeys = Object.keys(reducers); const emptyState = {}; + + const shouldProc = (eventName, type) =>{ + if(!eventName)return true; + if(typeof eventName === 'string' && eventName === type) return true; + if(Array.isArray(eventName) && eventName.indexOf(type) > -1) return true; + + return false; + } + return function combination(state = emptyState, action) { let hasChanged = false; const nextState = {}; @@ -32,12 +41,12 @@ export function combineReducers(reducers) { reducerKeys.forEach((key) => { const reducer = reducers[key]; const previousStateForKey = state[key]; - const { initalState } = reducer; - let nextStateForKey = reducer( - previousStateForKey, - action, - state || initalState, - ); + const { initalState, eventName } = reducer; + let nextStateForKey = shouldProc(eventName, action.type) ? reducer( + previousStateForKey, + action, + state || {}, + ) : previousStateForKey || initalState; if (typeof nextStateForKey === 'undefined') { console.error( diff --git a/yarn.lock b/yarn.lock index 11e8024..1d9b927 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1211,7 +1211,7 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-limiter@^1.0.0: +async-limiter@^1.0.0, async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== @@ -2236,6 +2236,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base-64@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= + base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -2814,6 +2819,11 @@ clone-deep@^0.2.4: lazy-cache "^1.0.3" shallow-clone "^0.1.2" +clone@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2932,6 +2942,10 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -6218,6 +6232,11 @@ js-yaml@~3.7.0: argparse "^1.0.7" esprima "^2.6.0" +jsan@^3.1.3: + version "3.1.13" + resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.13.tgz#4de8c7bf8d1cfcd020c313d438f930cec4b91d86" + integrity sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -6489,6 +6508,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linked-list@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf" + integrity sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -8165,7 +8189,7 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= @@ -8559,6 +8583,16 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remotedev@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/remotedev/-/remotedev-0.2.9.tgz#a5f148704bc6bf6e46e93640cabb7b4ed3f7fc12" + integrity sha512-W8dHOv9BcFnetFEd08yNb5O9Hd+zkTFFnf9FRjNCkb4u+JgQ/U152Aw4q83AmY3m34d6KZwhK5ip/Qc331+4vA== + dependencies: + jsan "^3.1.3" + querystring "^0.2.0" + rn-host-detect "^1.0.1" + socketcluster-client "^13.0.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -8763,6 +8797,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rn-host-detect@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" + integrity sha512-ufk2dFT3QeP9HyZ/xTuMtW27KnFy815CYitJMqQm+pgG3ZAtHBsrU8nXizNKkqXGy3bQmhEoloVbrfbvMJMqkg== + rollup-plugin-babel@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz#5b13611f1ab8922497e9d15197ae5d8a23fe3b1e" @@ -8914,6 +8953,23 @@ saxes@^3.1.9: dependencies: xmlchars "^1.3.1" +sc-channel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.2.0.tgz#d9209f3a91e3fa694c66b011ce55c4ad8c3087d9" + integrity sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA== + dependencies: + component-emitter "1.2.1" + +sc-errors@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.4.1.tgz#53e80030fe647e133d73b51eaa7d2b0f7591fd5b" + integrity sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ== + +sc-formatter@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6" + integrity sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A== + scheduler@^0.13.6: version "0.13.6" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" @@ -9141,6 +9197,22 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socketcluster-client@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-13.0.1.tgz#920e0a2437c228555e84f8ef0c9c5eb720e6067e" + integrity sha512-hxiE2xz6mgaBlhXbtBa4POgWVEvIcjCoHzf5LTUVhI9IL8V2ltV3Ze8pQsi9egqTjSz4RHPfyrJ7BiETe5Kthw== + dependencies: + base-64 "0.1.0" + clone "2.1.1" + component-emitter "1.2.1" + linked-list "0.1.0" + querystring "0.2.0" + sc-channel "^1.2.0" + sc-errors "^1.4.0" + sc-formatter "^3.0.1" + uuid "3.2.1" + ws "5.1.1" + sockjs-client@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" @@ -10073,6 +10145,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -10400,6 +10477,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.1.1.tgz#1d43704689711ac1942fd2f283e38f825c4b8b95" + integrity sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw== + dependencies: + async-limiter "~1.0.0" + ws@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.0.0.tgz#79351cbc3f784b3c20d0821baf4b4ff809ffbf51"