diff --git a/package.json b/package.json
index 2c770e1..20074ca 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,8 @@
{
"name": "react-firestore",
"version": "0.0.0-semantically-released",
- "description": "React components to fetch data from firestore using render props",
+ "description":
+ "React components to fetch data from firestore using render props",
"author": "Andrew Walton",
"license": "MIT",
"homepage": "https://github.com/green-arrow/react-firestore#readme",
@@ -27,10 +28,7 @@
"precommit": "kcd-scripts precommit",
"prepare": "npm run build"
},
- "files": [
- "dist",
- "preact"
- ],
+ "files": ["dist", "preact"],
"eslintConfig": {
"extends": "./node_modules/kcd-scripts/eslint.js",
"rules": {
@@ -38,40 +36,29 @@
"no-eq-null": "off",
"eqeqeq": "off",
"react/jsx-indent": "off",
- "complexity": [
- "error",
- 12
- ]
+ "complexity": ["error", 12]
}
},
- "eslintIgnore": [
- "node_modules",
- "coverage",
- "dist"
- ],
- "keywords": [
- "react",
- "firestore",
- "firebase"
- ],
+ "eslintIgnore": ["node_modules", "coverage", "dist"],
+ "keywords": ["react", "firestore", "firebase"],
"dependencies": {
"hoist-non-react-statics": "^2.3.1"
},
"peerDependencies": {
"prop-types": ">=15",
- "react": ">=15"
+ "react": ">=16.3"
},
"devDependencies": {
"commitizen": "^2.9.6",
"cz-conventional-changelog": "^2.1.0",
- "enzyme": "^3.3.0",
- "enzyme-adapter-react-16": "^1.1.1",
+ "enzyme": "^3.8.0",
+ "enzyme-adapter-react-16": "^1.9.1",
"kcd-scripts": "^0.32.1",
"preact": "^8.2.7",
"prop-types": "^15.6.0",
- "react": "^16.2.0",
- "react-dom": "^16.2.0",
- "react-test-renderer": "^16.2.0"
+ "react": "^16.8.1",
+ "react-dom": "^16.8.1",
+ "react-test-renderer": "^16.8.1"
},
"config": {
"commitizen": {
diff --git a/src/Firestore.js b/src/Firestore.js
index 14ce68b..186351b 100644
--- a/src/Firestore.js
+++ b/src/Firestore.js
@@ -1,21 +1,15 @@
-import { Component } from 'react';
+import React from 'react';
import PropTypes from 'prop-types';
+import { FirestoreContext } from './FirestoreProvider';
-class Firestore extends Component {
- static propTypes = {
- render: PropTypes.func.isRequired,
- };
+const Firestore = ({ render }) => (
+
+ {({ firestoreDatabase }) => render({ firestore: firestoreDatabase })}
+
+);
- static contextTypes = {
- firestoreDatabase: PropTypes.object.isRequired,
- };
-
- render() {
- const { firestoreDatabase } = this.context;
- const { render } = this.props;
-
- return render({ firestore: firestoreDatabase });
- }
-}
+Firestore.propTypes = {
+ render: PropTypes.func.isRequired,
+};
export default Firestore;
diff --git a/src/FirestoreCollection.js b/src/FirestoreCollection.js
index a564fae..4094945 100644
--- a/src/FirestoreCollection.js
+++ b/src/FirestoreCollection.js
@@ -1,5 +1,6 @@
import { Component } from 'react';
import PropTypes from 'prop-types';
+import withFirestore from './withFirestore';
import deepEqual from './utils/deepEqual';
class FirestoreCollection extends Component {
@@ -19,11 +20,7 @@ class FirestoreCollection extends Component {
]),
children: PropTypes.func,
render: PropTypes.func,
- };
-
- static contextTypes = {
- firestoreDatabase: PropTypes.object.isRequired,
- firestoreCache: PropTypes.object.isRequired,
+ firestore: PropTypes.object.isRequired,
};
state = {
@@ -63,9 +60,9 @@ class FirestoreCollection extends Component {
}
setupFirestoreListener = props => {
- const { firestoreDatabase } = this.context;
+ const { firestore } = props;
const { path, ...queryProps } = props;
- const collectionRef = firestoreDatabase.collection(path);
+ const collectionRef = firestore.collection(path);
const query = this.buildQuery(collectionRef, queryProps);
this.unsubscribe = query.onSnapshot(
@@ -139,4 +136,4 @@ class FirestoreCollection extends Component {
}
}
-export default FirestoreCollection;
+export default withFirestore(FirestoreCollection);
diff --git a/src/FirestoreDocument.js b/src/FirestoreDocument.js
index d522caf..d5ec50d 100644
--- a/src/FirestoreDocument.js
+++ b/src/FirestoreDocument.js
@@ -1,16 +1,13 @@
import { Component } from 'react';
import PropTypes from 'prop-types';
+import withFirestore from './withFirestore';
class FirestoreDocument extends Component {
static propTypes = {
path: PropTypes.string.isRequired,
children: PropTypes.func,
render: PropTypes.func,
- };
-
- static contextTypes = {
- firestoreDatabase: PropTypes.object.isRequired,
- firestoreCache: PropTypes.object.isRequired,
+ firestore: PropTypes.object.isRequired,
};
state = {
@@ -45,9 +42,9 @@ class FirestoreDocument extends Component {
}
setupFirestoreListener = props => {
- const { firestoreDatabase } = this.context;
+ const { firestore } = props;
const { path } = props;
- const documentRef = firestoreDatabase.doc(path);
+ const documentRef = firestore.doc(path);
this.unsubscribe = documentRef.onSnapshot(
this.handleOnSnapshotSuccess,
@@ -98,4 +95,4 @@ class FirestoreDocument extends Component {
}
}
-export default FirestoreDocument;
+export default withFirestore(FirestoreDocument);
diff --git a/src/FirestoreProvider.js b/src/FirestoreProvider.js
index b7ea1ca..584691f 100644
--- a/src/FirestoreProvider.js
+++ b/src/FirestoreProvider.js
@@ -1,23 +1,20 @@
-import { Component } from 'react';
+import React, { Component } from 'react';
import PropTypes from 'prop-types';
import FirestoreCache from './FirestoreCache';
+export const FirestoreContext = React.createContext(null);
+
export default class FirestoreProvider extends Component {
static propTypes = {
firebase: PropTypes.object.isRequired,
children: PropTypes.node.isRequired,
- useTimestampsInSnapshots: PropTypes.bool.isRequired,
+ useTimestampsInSnapshots: PropTypes.bool,
};
static defaultProps = {
useTimestampsInSnapshots: false,
};
- static childContextTypes = {
- firestoreDatabase: PropTypes.object.isRequired,
- firestoreCache: PropTypes.object.isRequired,
- };
-
constructor(props) {
super(props);
@@ -32,13 +29,11 @@ export default class FirestoreProvider extends Component {
};
}
- getChildContext() {
- const { firestoreDatabase, firestoreCache } = this.state;
-
- return { firestoreDatabase, firestoreCache };
- }
-
render() {
- return this.props.children;
+ return (
+
+ {this.props.children}
+
+ );
}
}
diff --git a/src/__tests__/collection.filter.js b/src/__tests__/collection.filter.js
index 7effbd1..b51be1b 100644
--- a/src/__tests__/collection.filter.js
+++ b/src/__tests__/collection.filter.js
@@ -1,11 +1,11 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('filters the documents returned with a simple filter', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
query,
onSnapshotMock,
@@ -15,12 +15,13 @@ test('filters the documents returned with a simple filter', () => {
const filter = ['name', '==', 'Mike'];
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
@@ -39,7 +40,7 @@ test('filters the documents returned with a simple filter', () => {
test('filters the documents returned with a compound filter', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
query,
onSnapshotMock,
@@ -49,12 +50,13 @@ test('filters the documents returned with a compound filter', () => {
const filter = [['firstName', '==', 'Mike'], ['lastName', '==', 'Smith']];
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
@@ -73,23 +75,25 @@ test('filters the documents returned with a compound filter', () => {
});
test('filter accepts objects and numbers', () => {
- const { firestoreMock } = createMocksForCollection();
+ const { firebaseMock, firestoreMock } = createMocksForCollection();
const renderMock = jest.fn().mockReturnValue(
);
const collectionName = 'users';
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
});
diff --git a/src/__tests__/collection.firestore-error.js b/src/__tests__/collection.firestore-error.js
index 6e8fd31..d2218fa 100644
--- a/src/__tests__/collection.firestore-error.js
+++ b/src/__tests__/collection.firestore-error.js
@@ -1,12 +1,12 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('should handle error getting snapshot', () => {
const options = { onSnapshotMockError: true };
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
onSnapshotMock,
} = createMocksForCollection(null, options);
@@ -14,9 +14,11 @@ test('should handle error getting snapshot', () => {
const collectionName = 'error';
const wrapper = mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
+ const component = wrapper.find(FirestoreCollection).children(0);
expect(collectionMock).toHaveBeenCalledTimes(1);
expect(collectionMock).toHaveBeenCalledWith(collectionName);
@@ -30,5 +32,5 @@ test('should handle error getting snapshot', () => {
snapshot: null,
}),
);
- expect(wrapper.state('error')).not.toBe(null);
+ expect(component.state('error')).not.toBe(null);
});
diff --git a/src/__tests__/collection.firestore-integration.js b/src/__tests__/collection.firestore-integration.js
index b5a85f1..1ca62b7 100644
--- a/src/__tests__/collection.firestore-integration.js
+++ b/src/__tests__/collection.firestore-integration.js
@@ -1,6 +1,6 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('integrates with firestore using onSnapshot', () => {
@@ -15,7 +15,7 @@ test('integrates with firestore using onSnapshot', () => {
},
];
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
snapshot,
onSnapshotMock,
@@ -23,9 +23,11 @@ test('integrates with firestore using onSnapshot', () => {
const renderMock = jest.fn().mockReturnValue();
const collectionName = 'users';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(collectionMock).toHaveBeenCalledTimes(1);
expect(collectionMock).toHaveBeenCalledWith(collectionName);
@@ -48,12 +50,14 @@ test('integrates with firestore using onSnapshot', () => {
});
test('does not re-render if no snapshot is returned', () => {
- const { firestoreMock, onSnapshotMock } = createMocksForCollection();
+ const { firebaseMock, onSnapshotMock } = createMocksForCollection();
const renderMock = jest.fn().mockReturnValue();
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(onSnapshotMock).toHaveBeenCalledTimes(1);
expect(renderMock).toHaveBeenCalledTimes(1);
@@ -61,15 +65,16 @@ test('does not re-render if no snapshot is returned', () => {
test('unsubscribes from firestore when component unmounts', () => {
const {
- firestoreMock,
+ firebaseMock,
onSnapshotMock,
unsubscribeMock,
} = createMocksForCollection();
const renderMock = jest.fn().mockReturnValue();
const component = mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
expect(onSnapshotMock).toHaveBeenCalledTimes(1);
@@ -81,18 +86,20 @@ test('unsubscribes from firestore when component unmounts', () => {
});
test('does not unsubscribe if no unsubscribe hook exists', () => {
- const { firestoreMock, unsubscribeMock } = createMocksForCollection();
+ const { firebaseMock, unsubscribeMock } = createMocksForCollection();
const renderMock = jest.fn().mockReturnValue();
- const component = mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+ const wrapper = mount(
+
+
+ ,
);
+ const component = wrapper.find(FirestoreCollection).children(0);
expect(unsubscribeMock).not.toHaveBeenCalled();
component.instance().unsubscribe = null;
- component.unmount();
+ wrapper.unmount();
expect(unsubscribeMock).not.toHaveBeenCalled();
});
@@ -109,7 +116,7 @@ describe('when componentWillReceiveProps is executed', () => {
},
];
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
snapshot,
onSnapshotMock,
@@ -118,10 +125,16 @@ describe('when componentWillReceiveProps is executed', () => {
const renderMock = jest.fn().mockReturnValue();
const collectionName1 = 'users';
const collectionName2 = 'posts';
- let component = null;
+ // eslint-disable-next-line react/prop-types
+ const Wrapper = props => (
+
+
+
+ );
+ let wrapper = null;
const resetsIsLoadingState = newProp => {
- component.setProps(newProp);
+ wrapper.setProps(newProp);
expect(renderMock).toHaveBeenCalledWith(
expect.objectContaining({
@@ -131,7 +144,7 @@ describe('when componentWillReceiveProps is executed', () => {
};
const wiresUpANewListener = (newProp, expectedCollection) => {
- component.setProps(newProp);
+ wrapper.setProps(newProp);
expect(collectionMock).toHaveBeenCalledTimes(2);
expect(collectionMock).toHaveBeenCalledWith(expectedCollection);
@@ -139,13 +152,13 @@ describe('when componentWillReceiveProps is executed', () => {
};
const unsubscribesActiveListener = newProp => {
- component.setProps(newProp);
+ wrapper.setProps(newProp);
expect(unsubscribeMock).toHaveBeenCalledTimes(1);
};
const doesNotExecuteUnsubscribe = newProp => {
- component.setProps(newProp);
+ wrapper.setProps(newProp);
expect(unsubscribeMock).toHaveBeenCalledTimes(1);
};
@@ -154,19 +167,16 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "path" prop is identical to incoming "path" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
- component.setProps({ path: collectionName1 });
+ wrapper.setProps({ path: collectionName1 });
});
test('does not change isLoading state', () => {
@@ -200,19 +210,16 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "sort" prop is identical to incoming "sort" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
- component.setProps({ sort: 'date' });
+ wrapper.setProps({ sort: 'date' });
});
test('does not change isLoading state', () => {
@@ -246,19 +253,16 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "limit" prop is identical to incoming "limit" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
- component.setProps({ limit: 5 });
+ wrapper.setProps({ limit: 5 });
});
test('does not change isLoading state', () => {
expect(renderMock).toHaveBeenCalledTimes(3);
@@ -291,19 +295,16 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "filter" prop is identical to incoming "filter" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
- component.setProps({ filter: ['name', '==', 'Mike'] });
+ wrapper.setProps({ filter: ['name', '==', 'Mike'] });
});
test('does not change isLoading state', () => {
@@ -337,17 +338,14 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "path" prop is different than incoming "path" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
});
test('resets isLoading state', () => {
@@ -369,17 +367,14 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "sort" prop is different than incoming "sort" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
});
test('resets isLoading state', () => {
@@ -401,17 +396,14 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "limit" prop is different than incoming "limit" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
});
test('resets isLoading state', () => {
@@ -433,17 +425,14 @@ describe('when componentWillReceiveProps is executed', () => {
describe('when existing "filter" prop is different than incoming "filter" prop', () => {
beforeEach(() => {
- component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
);
});
test('resets isLoading state', () => {
diff --git a/src/__tests__/collection.initial-state.js b/src/__tests__/collection.initial-state.js
index 8618907..4be94d2 100644
--- a/src/__tests__/collection.initial-state.js
+++ b/src/__tests__/collection.initial-state.js
@@ -1,20 +1,22 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('initial state set up correctly', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
onSnapshotMock,
} = createMocksForCollection();
const renderMock = jest.fn().mockReturnValue();
const collectionName = 'users';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(collectionMock).toHaveBeenCalledTimes(1);
expect(collectionMock).toHaveBeenCalledWith(collectionName);
@@ -30,7 +32,7 @@ test('initial state set up correctly', () => {
test('renders child prop', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
onSnapshotMock,
} = createMocksForCollection();
@@ -38,12 +40,11 @@ test('renders child prop', () => {
const collectionName = 'users';
mount(
-
- {renderMock}
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
+
+
+ {renderMock}
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
@@ -60,15 +61,17 @@ test('renders child prop', () => {
test('renders nothing if passed no render prop or children', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
onSnapshotMock,
} = createMocksForCollection();
const collectionName = 'users';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(collectionMock).toHaveBeenCalledTimes(1);
expect(collectionMock).toHaveBeenCalledWith(collectionName);
diff --git a/src/__tests__/collection.limit.js b/src/__tests__/collection.limit.js
index e9e1074..e04c050 100644
--- a/src/__tests__/collection.limit.js
+++ b/src/__tests__/collection.limit.js
@@ -1,11 +1,11 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('limits the number of documents returned', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
query,
onSnapshotMock,
@@ -15,12 +15,13 @@ test('limits the number of documents returned', () => {
const limit = 10;
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
diff --git a/src/__tests__/collection.sorting.js b/src/__tests__/collection.sorting.js
index feec736..0b092bd 100644
--- a/src/__tests__/collection.sorting.js
+++ b/src/__tests__/collection.sorting.js
@@ -1,11 +1,11 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreCollection } from '../';
+import { FirestoreCollection, FirestoreProvider } from '../';
import { createMocksForCollection } from './helpers/firestore-utils';
test('sorts by a single field', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
query,
onSnapshotMock,
@@ -15,12 +15,13 @@ test('sorts by a single field', () => {
const sortField = 'name';
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } }
+
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
@@ -33,13 +34,13 @@ test('sorts by a single field', () => {
expect.objectContaining({
isLoading: true,
data: [],
- })
+ }),
);
});
test('sorts by a multiple fields', () => {
const {
- firestoreMock,
+ firebaseMock,
collectionMock,
query,
onSnapshotMock,
@@ -49,12 +50,13 @@ test('sorts by a multiple fields', () => {
const sort = 'name,joinedDate:desc';
mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } }
+
+
+ ,
);
expect(collectionMock).toHaveBeenCalledTimes(1);
@@ -68,6 +70,6 @@ test('sorts by a multiple fields', () => {
expect.objectContaining({
isLoading: true,
data: [],
- })
+ }),
);
});
diff --git a/src/__tests__/document.firestore-error.js b/src/__tests__/document.firestore-error.js
index d117775..266870c 100644
--- a/src/__tests__/document.firestore-error.js
+++ b/src/__tests__/document.firestore-error.js
@@ -1,24 +1,23 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreDocument } from '../';
+import { FirestoreDocument, FirestoreProvider } from '../';
import { createMocksForDocument } from './helpers/firestore-utils';
test('should handle error getting snapshot', () => {
const options = { onSnapshotMockError: true };
- const {
- firestoreMock,
- documentMock,
- onSnapshotMock,
- } = createMocksForDocument(null, options);
+ const { firebaseMock, documentMock, onSnapshotMock } = createMocksForDocument(
+ null,
+ options,
+ );
const renderMock = jest.fn().mockReturnValue();
const documentPath = 'error/1';
const wrapper = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
+
+
+ ,
);
+ const component = wrapper.find(FirestoreDocument).children(0);
expect(documentMock).toHaveBeenCalledTimes(1);
expect(documentMock).toHaveBeenCalledWith(documentPath);
@@ -40,7 +39,7 @@ test('should handle error getting snapshot', () => {
snapshot: null,
}),
);
- expect(wrapper.state('error')).not.toBe(null);
+ expect(component.state('error')).not.toBe(null);
});
test('should handle error when document id does not exist', () => {
@@ -49,20 +48,19 @@ test('should handle error when document id does not exist', () => {
name: 'John Smith',
};
const options = { onDataMockError: true };
- const {
- firestoreMock,
- documentMock,
- onSnapshotMock,
- } = createMocksForDocument(doc, options);
+ const { firebaseMock, documentMock, onSnapshotMock } = createMocksForDocument(
+ doc,
+ options,
+ );
const renderMock = jest.fn().mockReturnValue();
const documentPath = 'error/1';
const wrapper = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
+
+
+ ,
);
+ const component = wrapper.find(FirestoreDocument).children(0);
expect(documentMock).toHaveBeenCalledTimes(1);
expect(documentMock).toHaveBeenCalledWith(documentPath);
@@ -75,5 +73,5 @@ test('should handle error when document id does not exist', () => {
error: expect.any(Error),
}),
);
- expect(wrapper.state('error')).not.toBe(null);
+ expect(component.state('error')).not.toBe(null);
});
diff --git a/src/__tests__/document.firestore-integration.js b/src/__tests__/document.firestore-integration.js
index 00fd22f..ffe2521 100644
--- a/src/__tests__/document.firestore-integration.js
+++ b/src/__tests__/document.firestore-integration.js
@@ -1,6 +1,6 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreDocument } from '../';
+import { FirestoreDocument, FirestoreProvider } from '../';
import { createMocksForDocument } from './helpers/firestore-utils';
test('integrates with firestore using onSnapshot', () => {
@@ -9,7 +9,7 @@ test('integrates with firestore using onSnapshot', () => {
name: 'John Smith',
};
const {
- firestoreMock,
+ firebaseMock,
documentMock,
snapshot,
onSnapshotMock,
@@ -17,9 +17,11 @@ test('integrates with firestore using onSnapshot', () => {
const renderMock = jest.fn().mockReturnValue();
const documentPath = 'users/1';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(documentMock).toHaveBeenCalledTimes(1);
expect(documentMock).toHaveBeenCalledWith(documentPath);
@@ -43,15 +45,16 @@ test('integrates with firestore using onSnapshot', () => {
test('unsubscribes from firestore when component unmounts', () => {
const {
- firestoreMock,
+ firebaseMock,
onSnapshotMock,
unsubscribeMock,
} = createMocksForDocument();
const renderMock = jest.fn().mockReturnValue();
const component = mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+
+ ,
+ ,
);
expect(onSnapshotMock).toHaveBeenCalledTimes(1);
@@ -63,18 +66,20 @@ test('unsubscribes from firestore when component unmounts', () => {
});
test('does not unsubscribe if no unsubscribe hook exists', () => {
- const { firestoreMock, unsubscribeMock } = createMocksForDocument();
+ const { firebaseMock, unsubscribeMock } = createMocksForDocument();
const renderMock = jest.fn().mockReturnValue();
- const component = mount(
- ,
- { context: { firestoreDatabase: firestoreMock, firestoreCache: {} } },
+ const wrapper = mount(
+
+ ,
+ ,
);
+ const component = wrapper.find(FirestoreDocument).children(0);
expect(unsubscribeMock).not.toHaveBeenCalled();
component.instance().unsubscribe = null;
- component.unmount();
+ wrapper.unmount();
expect(unsubscribeMock).not.toHaveBeenCalled();
});
@@ -86,7 +91,7 @@ describe('when props change', () => {
};
const {
documentMock,
- firestoreMock,
+ firebaseMock,
snapshot,
onSnapshotMock,
unsubscribeMock,
@@ -95,15 +100,19 @@ describe('when props change', () => {
const documentPath1 = 'users/1';
const documentPath2 = 'users/2';
- const component = mount(
- ,
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
+ // eslint-disable-next-line react/prop-types
+ const Wrapper = ({ path }) => (
+
+
+
);
+ const wrapper = mount();
+
+ const component = wrapper.find(FirestoreDocument).children(0);
+
describe('when "path" prop is the same', () => {
- beforeEach(() => component.setProps({ path: documentPath1 }));
+ beforeEach(() => wrapper.setProps({ path: documentPath1 }));
test('it does not change isLoading state', () => {
expect(renderMock).toHaveBeenCalledTimes(3);
@@ -137,7 +146,7 @@ describe('when props change', () => {
describe('when "path" prop is different', () => {
test('resets isLoading state', () => {
renderMock.mockClear();
- component.setProps({ path: documentPath2 });
+ wrapper.setProps({ path: documentPath2 });
expect(renderMock).toHaveBeenCalledWith(
expect.objectContaining({
@@ -147,7 +156,7 @@ describe('when props change', () => {
});
test('wires up a new listener', () => {
- component.setProps({ path: documentPath2 });
+ wrapper.setProps({ path: documentPath2 });
expect(documentMock).toHaveBeenCalledTimes(2);
expect(documentMock).toHaveBeenCalledWith(documentPath2);
@@ -156,7 +165,7 @@ describe('when props change', () => {
describe('when an unsubscribe listener exists', () => {
test('unsubscribes active listener', () => {
- component.setProps({ path: documentPath2 });
+ wrapper.setProps({ path: documentPath2 });
expect(unsubscribeMock).toHaveBeenCalledTimes(1);
});
@@ -166,7 +175,7 @@ describe('when props change', () => {
test('does not execute an unsubscribe method', () => {
unsubscribeMock.mockClear();
component.instance().unsubscribe = null;
- component.setProps({ path: documentPath2 });
+ wrapper.setProps({ path: documentPath2 });
expect(unsubscribeMock).not.toHaveBeenCalled();
});
diff --git a/src/__tests__/document.initial-state.js b/src/__tests__/document.initial-state.js
index c95f5bd..c8dc315 100644
--- a/src/__tests__/document.initial-state.js
+++ b/src/__tests__/document.initial-state.js
@@ -1,20 +1,22 @@
import React from 'react';
import { mount } from 'enzyme';
-import { FirestoreDocument } from '../';
+import { FirestoreDocument, FirestoreProvider } from '../';
import { createMocksForDocument } from './helpers/firestore-utils';
test('initial state set up correctly', () => {
const {
- firestoreMock,
+ firebaseMock,
documentMock,
onSnapshotMock,
} = createMocksForDocument();
const renderMock = jest.fn().mockReturnValue();
const documentPath = 'users/1';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(documentMock).toHaveBeenCalledTimes(1);
expect(documentMock).toHaveBeenCalledWith(documentPath);
@@ -30,7 +32,7 @@ test('initial state set up correctly', () => {
test('renders child prop', () => {
const {
- firestoreMock,
+ firebaseMock,
documentMock,
onSnapshotMock,
} = createMocksForDocument();
@@ -38,10 +40,9 @@ test('renders child prop', () => {
const documentPath = 'users/1';
mount(
- {renderMock},
- {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- },
+
+ {renderMock},
+ ,
);
expect(documentMock).toHaveBeenCalledTimes(1);
@@ -58,15 +59,17 @@ test('renders child prop', () => {
test('renders nothing if passed no render prop or children', () => {
const {
- firestoreMock,
+ firebaseMock,
documentMock,
onSnapshotMock,
} = createMocksForDocument();
const documentPath = 'users/1';
- mount(, {
- context: { firestoreDatabase: firestoreMock, firestoreCache: {} },
- });
+ mount(
+
+
+ ,
+ );
expect(documentMock).toHaveBeenCalledTimes(1);
expect(documentMock).toHaveBeenCalledWith(documentPath);
diff --git a/src/__tests__/firestore.provides-database.js b/src/__tests__/firestore.provides-database.js
index f42c408..846a930 100644
--- a/src/__tests__/firestore.provides-database.js
+++ b/src/__tests__/firestore.provides-database.js
@@ -1,15 +1,18 @@
import React from 'react';
import { mount } from 'enzyme';
-import { Firestore } from '../';
+import { Firestore, FirestoreProvider } from '../';
+import { createMocksForDocument } from './helpers/firestore-utils';
test('provides the firestore database in render function', () => {
- const firestore = {};
+ const { firebaseMock, firestoreMock } = createMocksForDocument();
const renderMock = jest.fn().mockReturnValue();
- mount(, {
- context: { firestoreDatabase: firestore },
- });
+ mount(
+
+
+ ,
+ );
expect(renderMock).toHaveBeenCalledTimes(1);
- expect(renderMock).toHaveBeenCalledWith({ firestore });
+ expect(renderMock).toHaveBeenCalledWith({ firestore: firestoreMock });
});
diff --git a/src/__tests__/helpers/firestore-utils.js b/src/__tests__/helpers/firestore-utils.js
index 575cd11..04cdf0c 100644
--- a/src/__tests__/helpers/firestore-utils.js
+++ b/src/__tests__/helpers/firestore-utils.js
@@ -66,7 +66,12 @@ function createBaseMocks(snapshot, options) {
doc: documentMock,
};
+ const firebaseMock = {
+ firestore: () => firestoreMock,
+ };
+
return {
+ firebaseMock,
firestoreMock,
collectionMock,
documentMock,
diff --git a/src/__tests__/provider.adds-context.js b/src/__tests__/provider.adds-context.js
deleted file mode 100644
index d6272a1..0000000
--- a/src/__tests__/provider.adds-context.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { mount } from 'enzyme';
-import { FirestoreProvider } from '../';
-
-const createChild = () => {
- // eslint-disable-next-line react/prefer-stateless-function
- class Child extends Component {
- render() {
- return null;
- }
- }
-
- Child.contextTypes = {
- firestoreDatabase: PropTypes.object.isRequired,
- firestoreCache: PropTypes.object.isRequired,
- };
-
- return Child;
-};
-
-test('database and cache are added to child context', () => {
- const Child = createChild();
- const firestore = {};
- firestore.settings = jest.fn().mockReturnValue(firestore);
- const firebase = {
- firestore: jest.fn().mockReturnValueOnce(firestore),
- };
-
- const component = mount(
-
-
- ,
- );
- const child = component.find('Child');
-
- expect(child.instance().context.firestoreDatabase).toBe(firestore);
- expect(child.instance().context.firestoreCache).toBeDefined();
-});
diff --git a/src/__tests__/withRouter.injects-database.js b/src/__tests__/withRouter.injects-database.js
index 04c6801..19c0b0a 100644
--- a/src/__tests__/withRouter.injects-database.js
+++ b/src/__tests__/withRouter.injects-database.js
@@ -1,22 +1,31 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { mount } from 'enzyme';
-import { withFirestore } from '../';
+import { withFirestore, FirestoreProvider } from '../';
+import { createMocksForDocument } from './helpers/firestore-utils';
test('injects component with firestore database', () => {
- const firestore = {};
- const emptyContext = {};
+ const { firebaseMock, firestoreMock } = createMocksForDocument();
const mockFunctionalComponent = jest.fn().mockReturnValue();
const Component = withFirestore(mockFunctionalComponent);
- mount(, {
- context: { firestoreDatabase: firestore },
- childContextTypes: { firestoreDatabase: PropTypes.object.isRequired },
- });
+ mount(
+
+
+ ,
+ );
expect(mockFunctionalComponent).toHaveBeenCalledTimes(1);
expect(mockFunctionalComponent).toHaveBeenCalledWith(
- { firestore },
- emptyContext,
+ { firestore: firestoreMock },
+ {},
+ );
+});
+
+test('throws an error when the FirestoreProvider is missing', () => {
+ const mockFunctionalComponent = jest.fn().mockReturnValue();
+ const Component = withFirestore(mockFunctionalComponent);
+
+ expect(() => mount()).toThrowError(
+ 'FirestoreProvider is missing',
);
});
diff --git a/src/__tests__/withRouter.passes-props.js b/src/__tests__/withRouter.passes-props.js
index a10c3e0..cf0523f 100644
--- a/src/__tests__/withRouter.passes-props.js
+++ b/src/__tests__/withRouter.passes-props.js
@@ -1,23 +1,23 @@
import React from 'react';
-import PropTypes from 'prop-types';
import { mount } from 'enzyme';
-import { withFirestore } from '../';
+import { withFirestore, FirestoreProvider } from '../';
+import { createMocksForDocument } from './helpers/firestore-utils';
test('passes all props down to wrapped component', () => {
- const firestore = {};
- const emptyContext = {};
+ const { firebaseMock, firestoreMock } = createMocksForDocument();
const propsToBePassed = { propA: 'test' };
const mockFunctionalComponent = jest.fn().mockReturnValue();
const Component = withFirestore(mockFunctionalComponent);
- mount(, {
- context: { firestoreDatabase: firestore },
- childContextTypes: { firestoreDatabase: PropTypes.object.isRequired },
- });
+ mount(
+
+
+ ,
+ );
expect(mockFunctionalComponent).toHaveBeenCalledTimes(1);
expect(mockFunctionalComponent).toHaveBeenCalledWith(
- { firestore, ...propsToBePassed },
- emptyContext,
+ { firestore: firestoreMock, ...propsToBePassed },
+ {},
);
});
diff --git a/src/__tests__/withRouter.wrapped-ref.js b/src/__tests__/withRouter.wrapped-ref.js
index 462d164..4e48710 100644
--- a/src/__tests__/withRouter.wrapped-ref.js
+++ b/src/__tests__/withRouter.wrapped-ref.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import { mount } from 'enzyme';
-import { withFirestore } from '../';
+import { withFirestore, FirestoreProvider } from '../';
+import { createMocksForDocument } from './helpers/firestore-utils';
const createChild = () => {
// eslint-disable-next-line react/prefer-stateless-function
@@ -15,27 +15,25 @@ const createChild = () => {
};
test('passes wrappedComponentRef to wrapped component', () => {
- const firestore = {};
+ const { firebaseMock, firestoreMock } = createMocksForDocument();
const otherProps = { testProp: 'test' };
const Child = createChild();
const ComponentWithFirestore = withFirestore(Child);
let wrappedRef;
const component = mount(
- {
- wrappedRef = ref;
- }}
- />,
- {
- context: { firestoreDatabase: firestore },
- childContextTypes: { firestoreDatabase: PropTypes.object.isRequired },
- },
+
+ {
+ wrappedRef = ref;
+ }}
+ />
+ ,
);
const child = component.find(Child);
expect(wrappedRef).toBe(child.instance());
- expect(child.props()).toEqual({ firestore, ...otherProps });
+ expect(child.props()).toEqual({ firestore: firestoreMock, ...otherProps });
});
diff --git a/src/withFirestore.js b/src/withFirestore.js
index 39eba88..e7da9f7 100644
--- a/src/withFirestore.js
+++ b/src/withFirestore.js
@@ -1,24 +1,26 @@
import React from 'react';
import PropTypes from 'prop-types';
import hoistStatics from 'hoist-non-react-statics';
-import Firestore from './Firestore';
+import { FirestoreContext } from './FirestoreProvider';
const withFirestore = Component => {
- const C = props => {
- const { wrappedComponentRef, ...remainingProps } = props;
- return (
- (
+ const C = ({ wrappedComponentRef, ...remainingProps }) => (
+
+ {value => {
+ if (!value) {
+ throw new Error('FirestoreProvider is missing');
+ }
+ const { firestoreDatabase } = value;
+ return (
- )}
- />
- );
- };
-
+ );
+ }}
+
+ );
C.displayName = `withFirestore(${Component.displayName || Component.name})`;
C.WrappedComponent = Component;
C.propTypes = {
diff --git a/yarn.lock b/yarn.lock
index c73c7fa..4f14311 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -63,8 +63,9 @@
to-fast-properties "^2.0.0"
"@types/node@*":
- version "9.3.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5"
+ version "10.12.24"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.24.tgz#b13564af612a22a20b5d95ca40f1bffb3af315cf"
+ integrity sha512-GWWbvt+z9G5otRBW8rssOFgRY87J9N/qbhqfjMZ+gUuL6zoL+Hm6gP/8qQBG4jjimqdaNLCehcVapZ/Fs2WjCQ==
abab@^1.0.3:
version "1.0.4"
@@ -277,6 +278,15 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+array.prototype.flat@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4"
+ integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.10.0"
+ function-bind "^1.1.1"
+
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -284,6 +294,7 @@ arrify@^1.0.0, arrify@^1.0.1:
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1.js@^4.0.0:
version "4.9.2"
@@ -1079,6 +1090,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
boom@2.x.x:
version "2.10.1"
@@ -1326,6 +1338,7 @@ chardet@^0.4.0:
cheerio@^1.0.0-rc.2:
version "1.0.0-rc.2"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
+ integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=
dependencies:
css-select "~1.2.0"
dom-serializer "~0.1.0"
@@ -1441,10 +1454,6 @@ color-name@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-colors@0.5.x:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774"
-
combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
@@ -1459,6 +1468,11 @@ commander@^2.11.0, commander@^2.9.0, commander@~2.13.0:
version "2.13.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+commander@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+ integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
commitizen@^2.9.6:
version "2.9.6"
resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-2.9.6.tgz#c0d00535ef264da7f63737edfda4228983fa2291"
@@ -1537,6 +1551,7 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0:
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+ integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
core-js@^2.4.0, core-js@^2.5.0:
version "2.5.3"
@@ -1545,6 +1560,7 @@ core-js@^2.4.0, core-js@^2.5.0:
core-util-is@1.0.2, 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"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@3.1.0, cosmiconfig@^3.1.0:
version "3.1.0"
@@ -1628,6 +1644,7 @@ crypto-browserify@^3.11.0:
css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
dependencies:
boolbase "~1.0.0"
css-what "2.1"
@@ -1635,8 +1652,9 @@ css-select@~1.2.0:
nth-check "~1.0.1"
css-what@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d"
+ integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
version "0.3.2"
@@ -1737,12 +1755,12 @@ deferred-leveldown@~0.2.0:
dependencies:
abstract-leveldown "~0.12.1"
-define-properties@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
dependencies:
- foreach "^2.0.5"
- object-keys "^1.0.8"
+ object-keys "^1.0.12"
del@^2.0.2:
version "2.2.2"
@@ -1806,6 +1824,7 @@ diffie-hellman@^5.0.0:
discontinuous-range@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
+ integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
doctoc@^1.3.0:
version "1.3.0"
@@ -1834,6 +1853,7 @@ doctrine@^2.0.0, doctrine@^2.0.2:
dom-serializer@0, dom-serializer@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
dependencies:
domelementtype "~1.1.1"
entities "~1.1.1"
@@ -1843,33 +1863,38 @@ domain-browser@^1.1.1:
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
domelementtype@1, domelementtype@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
domelementtype@~1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+ integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
domexception@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0"
domhandler@^2.3.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
dependencies:
domelementtype "1"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
dependencies:
dom-serializer "0"
domelementtype "1"
domutils@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
dependencies:
dom-serializer "0"
domelementtype "1"
@@ -1921,6 +1946,7 @@ emojis-list@^2.0.0:
encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
dependencies:
iconv-lite "~0.4.13"
@@ -1942,49 +1968,58 @@ enhanced-resolve@~0.9.0:
tapable "^0.1.8"
entities@^1.1.1, entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
enzyme-adapter-react-16@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4"
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.9.1.tgz#6d49a3a31c3a0fccf527610f31b837e0f307128a"
+ integrity sha512-Egzogv1y77DUxdnq/CyHxLHaNxmSSKDDSDNNB/EiAXCZVFXdFibaNy2uUuRQ1n24T2m6KH/1Rw16XDRq+1yVEg==
dependencies:
- enzyme-adapter-utils "^1.3.0"
- lodash "^4.17.4"
- object.assign "^4.0.4"
- object.values "^1.0.4"
- prop-types "^15.6.0"
- react-reconciler "^0.7.0"
+ enzyme-adapter-utils "^1.10.0"
+ function.prototype.name "^1.1.0"
+ object.assign "^4.1.0"
+ object.values "^1.1.0"
+ prop-types "^15.6.2"
+ react-is "^16.7.0"
react-test-renderer "^16.0.0-0"
-enzyme-adapter-utils@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7"
+enzyme-adapter-utils@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.0.tgz#5836169f68b9e8733cb5b69cad5da2a49e34f550"
+ integrity sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA==
dependencies:
- lodash "^4.17.4"
- object.assign "^4.0.4"
- prop-types "^15.6.0"
+ function.prototype.name "^1.1.0"
+ object.assign "^4.1.0"
+ object.fromentries "^2.0.0"
+ prop-types "^15.6.2"
+ semver "^5.6.0"
enzyme@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479"
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5"
+ integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw==
dependencies:
+ array.prototype.flat "^1.2.1"
cheerio "^1.0.0-rc.2"
- function.prototype.name "^1.0.3"
- has "^1.0.1"
+ function.prototype.name "^1.1.0"
+ has "^1.0.3"
is-boolean-object "^1.0.0"
- is-callable "^1.1.3"
+ is-callable "^1.1.4"
is-number-object "^1.0.3"
is-string "^1.0.4"
is-subset "^0.1.1"
- lodash "^4.17.4"
- object-inspect "^1.5.0"
+ lodash.escape "^4.0.1"
+ lodash.isequal "^4.5.0"
+ object-inspect "^1.6.0"
object-is "^1.0.1"
object.assign "^4.1.0"
object.entries "^1.0.4"
object.values "^1.0.4"
raf "^3.4.0"
rst-selector-parser "^2.2.3"
+ string.prototype.trim "^1.1.2"
errno@^0.1.1, errno@^0.1.3, errno@~0.1.1:
version "0.1.6"
@@ -1998,7 +2033,19 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0:
+es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-keys "^1.0.12"
+
+es-abstract@^1.5.1, es-abstract@^1.7.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
dependencies:
@@ -2008,13 +2055,14 @@ es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0:
is-callable "^1.1.3"
is-regex "^1.0.4"
-es-to-primitive@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+es-to-primitive@^1.1.1, es-to-primitive@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
dependencies:
- is-callable "^1.1.1"
+ is-callable "^1.1.4"
is-date-object "^1.0.1"
- is-symbol "^1.0.1"
+ is-symbol "^1.0.2"
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
version "0.10.37"
@@ -2434,8 +2482,9 @@ fb-watchman@^2.0.0:
bser "^2.0.0"
fbjs@^0.8.16:
- version "0.8.16"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ version "0.8.17"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+ integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
@@ -2443,7 +2492,7 @@ fbjs@^0.8.16:
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
- ua-parser-js "^0.7.9"
+ ua-parser-js "^0.7.18"
figures@^1.3.5, figures@^1.7.0:
version "1.7.0"
@@ -2553,7 +2602,7 @@ for-own@^0.1.4:
dependencies:
for-in "^1.0.1"
-foreach@^2.0.5, foreach@~2.0.1:
+foreach@~2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
@@ -2621,13 +2670,15 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
mkdirp ">=0.5 0"
rimraf "2"
-function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
+function-bind@^1.0.2, function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-function.prototype.name@^1.0.3:
+function.prototype.name@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327"
+ integrity sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==
dependencies:
define-properties "^1.1.2"
function-bind "^1.1.1"
@@ -2811,16 +2862,18 @@ has-flag@^2.0.0:
has-symbols@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
- function-bind "^1.0.2"
+ function-bind "^1.1.1"
hash-base@^2.0.0:
version "2.0.2"
@@ -2903,7 +2956,19 @@ html-encoding-sniffer@^1.0.1:
dependencies:
whatwg-encoding "^1.0.1"
-htmlparser2@^3.9.1, htmlparser2@~3.9.2:
+htmlparser2@^3.9.1:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
+ integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==
+ dependencies:
+ domelementtype "^1.3.0"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.0.6"
+
+htmlparser2@~3.9.2:
version "3.9.2"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
dependencies:
@@ -2942,10 +3007,17 @@ husky@^0.14.3:
normalize-path "^1.0.0"
strip-indent "^2.0.0"
-iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
+iconv-lite@0.4.19, iconv-lite@^0.4.17:
version "0.4.19"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
idb-wrapper@^1.5.0:
version "1.7.2"
resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2"
@@ -3104,6 +3176,7 @@ is-binary-path@^1.0.0:
is-boolean-object@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+ integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=
is-buffer@^1.1.5:
version "1.1.6"
@@ -3115,9 +3188,10 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
-is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+is-callable@^1.1.3, is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
is-ci@^1.0.10, is-ci@^1.1.0:
version "1.1.0"
@@ -3128,6 +3202,7 @@ is-ci@^1.0.10, is-ci@^1.1.0:
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
is-decimal@^1.0.0:
version "1.0.1"
@@ -3202,6 +3277,7 @@ is-module@^1.0.0:
is-number-object@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+ integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=
is-number@^2.1.0:
version "2.1.0"
@@ -3260,6 +3336,7 @@ is-promise@^2.1.0:
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
dependencies:
has "^1.0.1"
@@ -3280,18 +3357,24 @@ is-resolvable@^1.0.0:
is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
is-string@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
+ integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=
is-subset@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+ integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
-is-symbol@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
is-typedarray@~1.0.0:
version "1.0.0"
@@ -3344,6 +3427,7 @@ isobject@^2.0.0:
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
dependencies:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
@@ -3681,6 +3765,12 @@ jest@^22.0.4:
js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.10.0"
@@ -4095,9 +4185,15 @@ lodash.cond@^4.3.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+lodash.escape@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
+ integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=
+
lodash.flattendeep@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
+ integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
lodash.get@^3.7.0:
version "3.7.0"
@@ -4114,6 +4210,11 @@ lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
lodash.map@^4.5.1:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
@@ -4130,10 +4231,15 @@ lodash@4.17.2:
version "4.17.2"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
-lodash@^4.11.2, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1:
+lodash@^4.11.2, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+lodash@^4.15.0, lodash@^4.17.4:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
log-symbols@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
@@ -4161,7 +4267,14 @@ longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
+loose-envify@^1.0.0, loose-envify@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loose-envify@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
dependencies:
@@ -4314,6 +4427,11 @@ minimist@~0.0.1:
dependencies:
minimist "0.0.8"
+moo@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e"
+ integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -4335,16 +4453,20 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
nearley@^2.7.10:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae"
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7"
+ integrity sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==
dependencies:
- nomnom "~1.6.2"
+ commander "^2.19.0"
+ moo "^0.4.3"
railroad-diagrams "^1.0.0"
- randexp "^0.4.2"
+ randexp "0.4.6"
+ semver "^5.4.1"
node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
@@ -4406,13 +4528,6 @@ node-pre-gyp@^0.6.39:
tar "^2.2.1"
tar-pack "^3.4.0"
-nomnom@~1.6.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971"
- dependencies:
- colors "0.5.x"
- underscore "~1.4.4"
-
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
@@ -4469,8 +4584,9 @@ npmlog@^4.0.2:
set-blocking "~2.0.0"
nth-check@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
dependencies:
boolbase "~1.0.0"
@@ -4489,18 +4605,22 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2:
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-object-inspect@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3"
+object-inspect@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
+ integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
object-is@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
+ integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
-object-keys@^1.0.11, object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object-keys@^1.0.11, object-keys@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
+ integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==
object-keys@~0.2.0:
version "0.2.0"
@@ -4514,9 +4634,10 @@ object-keys@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
-object.assign@^4.0.4, object.assign@^4.1.0:
+object.assign@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
dependencies:
define-properties "^1.1.2"
function-bind "^1.1.1"
@@ -4524,12 +4645,23 @@ object.assign@^4.0.4, object.assign@^4.1.0:
object-keys "^1.0.11"
object.entries@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519"
+ integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.12.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.fromentries@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab"
+ integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==
dependencies:
define-properties "^1.1.2"
- es-abstract "^1.6.1"
- function-bind "^1.1.0"
+ es-abstract "^1.11.0"
+ function-bind "^1.1.1"
has "^1.0.1"
object.getownpropertydescriptors@^2.0.3:
@@ -4546,14 +4678,15 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
-object.values@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
+object.values@^1.0.4, object.values@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+ integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.6.1"
- function-bind "^1.1.0"
- has "^1.0.1"
+ define-properties "^1.1.3"
+ es-abstract "^1.12.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
octal@^1.0.0:
version "1.0.0"
@@ -4801,6 +4934,7 @@ performance-now@^0.2.0:
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pify@^2.0.0:
version "2.3.0"
@@ -4893,6 +5027,12 @@ process-es6@^0.11.2, process-es6@^0.11.3:
process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+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"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
process@^0.11.10:
version "0.11.10"
@@ -4905,6 +5045,7 @@ progress@^2.0.0:
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
@@ -4916,6 +5057,14 @@ prop-types@^15.6.0:
loose-envify "^1.3.1"
object-assign "^4.1.1"
+prop-types@^15.6.2:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
+ integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==
+ dependencies:
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
prr@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
@@ -4967,18 +5116,21 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
raf@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
dependencies:
performance-now "^2.1.0"
railroad-diagrams@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
+ integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
-randexp@^0.4.2:
+randexp@0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
+ integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==
dependencies:
discontinuous-range "1.0.0"
ret "~0.1.10"
@@ -5012,40 +5164,40 @@ rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-dom@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+react-dom@^16.8.1:
+ version "16.8.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4"
+ integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg==
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.0"
+ prop-types "^15.6.2"
+ scheduler "^0.13.1"
-react-reconciler@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d"
- dependencies:
- fbjs "^0.8.16"
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.0"
+react-is@^16.7.0, react-is@^16.8.1:
+ version "16.8.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.1.tgz#a80141e246eb894824fb4f2901c0c50ef31d4cdb"
+ integrity sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA==
-react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
+react-test-renderer@^16.0.0-0, react-test-renderer@^16.8.1:
+ version "16.8.1"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.1.tgz#72845ad9269be526126e97853311982f781767be"
+ integrity sha512-Bd21TN3+YVl6GZwav6O0T6m5UwGfOj+2+xZH5VH93ToD6M5uclN/c+R1DGX49ueG413KZPUx7Kw3sOYz2aJgfg==
dependencies:
- fbjs "^0.8.16"
object-assign "^4.1.1"
- prop-types "^15.6.0"
+ prop-types "^15.6.2"
+ react-is "^16.8.1"
+ scheduler "^0.13.1"
-react@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+react@^16.8.1:
+ version "16.8.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a"
+ integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ==
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.0"
+ prop-types "^15.6.2"
+ scheduler "^0.13.1"
read-pkg-up@^1.0.1:
version "1.0.1"
@@ -5101,7 +5253,7 @@ readable-stream@^1.0.26-4:
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.3:
+readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
dependencies:
@@ -5113,6 +5265,28 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable
string_decoder "~1.0.3"
util-deprecate "~1.0.1"
+readable-stream@^2.0.2:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ 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"
+
+readable-stream@^3.0.6:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
+ integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readable-stream@~1.0.26, readable-stream@~1.0.26-4:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
@@ -5379,6 +5553,7 @@ restore-cursor@^2.0.0:
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
right-align@^0.1.1:
version "0.1.3"
@@ -5480,6 +5655,7 @@ rollup@^0.53.3:
rst-selector-parser@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91"
+ integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=
dependencies:
lodash.flattendeep "^4.4.0"
nearley "^2.7.10"
@@ -5514,10 +5690,20 @@ rxjs@^5.4.2:
dependencies:
symbol-observable "1.0.1"
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+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"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
sane@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56"
@@ -5536,10 +5722,23 @@ sax@^1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+scheduler@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.1.tgz#1a217df1bfaabaf4f1b92a9127d5d732d85a9591"
+ integrity sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+semver@^5.6.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+ integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+
semver@~2.3.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52"
@@ -5555,6 +5754,7 @@ set-immediate-shim@^1.0.1:
setimmediate@^1.0.4, setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
sha.js@^2.4.0, sha.js@^2.4.8:
version "2.4.9"
@@ -5749,9 +5949,26 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
+string.prototype.trim@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
+ integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.0"
+ function-bind "^1.0.2"
+
string_decoder@^1.0.0, string_decoder@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
+ integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
dependencies:
safe-buffer "~5.1.0"
@@ -5759,6 +5976,13 @@ string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
stringify-entities@^1.0.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c"
@@ -6018,9 +6242,10 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-ua-parser-js@^0.7.9:
- version "0.7.17"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+ua-parser-js@^0.7.18:
+ version "0.7.19"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
+ integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==
uglify-js@^2.6, uglify-js@^2.8.29:
version "2.8.29"
@@ -6058,10 +6283,6 @@ unc-path-regex@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
-underscore@~1.4.4:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
-
underscore@~1.8.3:
version "1.8.3"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
@@ -6115,9 +6336,10 @@ 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:
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
util.promisify@^1.0.0:
version "1.0.0"
@@ -6241,8 +6463,9 @@ whatwg-encoding@^1.0.1:
iconv-lite "0.4.19"
whatwg-fetch@>=0.10.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
whatwg-url@^6.3.0:
version "6.4.0"