diff --git a/packages/drawer/.circleci/config.yml b/packages/drawer/.circleci/config.yml
index 6bd370d7..4d20345b 100644
--- a/packages/drawer/.circleci/config.yml
+++ b/packages/drawer/.circleci/config.yml
@@ -55,6 +55,12 @@ jobs:
- store_artifacts:
path: coverage
destination: coverage
+ build:
+ <<: *defaults
+ steps:
+ - attach_workspace:
+ at: ~/project
+ - run: yarn prepare
workflows:
version: 2
@@ -70,3 +76,6 @@ workflows:
- unit-tests:
requires:
- install-dependencies
+ - build:
+ requires:
+ - install-dependencies
diff --git a/packages/drawer/commitlint.config.js b/packages/drawer/commitlint.config.js
new file mode 100644
index 00000000..cc8383f7
--- /dev/null
+++ b/packages/drawer/commitlint.config.js
@@ -0,0 +1,5 @@
+/* eslint-disable import/no-commonjs */
+
+module.exports = {
+ extends: ['@commitlint/config-conventional'],
+};
diff --git a/packages/drawer/example/.babelrc b/packages/drawer/example/.babelrc
index 76d1cd70..8d3a6e8d 100644
--- a/packages/drawer/example/.babelrc
+++ b/packages/drawer/example/.babelrc
@@ -1,5 +1,12 @@
{
"presets": [
"expo"
+ ],
+ "plugins": [
+ ["module-resolver", {
+ "alias": {
+ "react-navigation-drawer": "../src/index"
+ }
+ }]
]
}
diff --git a/packages/drawer/example/.eslintrc b/packages/drawer/example/.eslintrc
index c7e5070d..449f211c 100644
--- a/packages/drawer/example/.eslintrc
+++ b/packages/drawer/example/.eslintrc
@@ -1,7 +1,14 @@
{
- "extends": '../.eslintrc',
+ 'extends': '../.eslintrc',
- "settings": {
- "import/core-modules": [ "react-navigation-drawer", "react-native-gesture-handler", "react-native-vector-icons" ]
- }
+ 'settings':
+ {
+ 'import/core-modules':
+ [
+ 'react-navigation-drawer',
+ 'react-native-gesture-handler',
+ 'react-native-reanimated',
+ 'react-native-vector-icons',
+ ],
+ },
}
diff --git a/packages/drawer/example/package.json b/packages/drawer/example/package.json
index 7d08d577..6b81a624 100644
--- a/packages/drawer/example/package.json
+++ b/packages/drawer/example/package.json
@@ -10,8 +10,8 @@
"eject": "expo eject"
},
"dependencies": {
- "@react-navigation/core": "^3.3.0",
- "@react-navigation/native": "^3.3.0",
+ "@react-navigation/core": "^3.4.0",
+ "@react-navigation/native": "^3.4.1",
"expo": "32.0.6",
"hoist-non-react-statics": "^3.3.0",
"react": "16.5.0",
diff --git a/packages/drawer/example/src/ParallaxDrawer.js b/packages/drawer/example/src/ParallaxDrawer.js
index cbf8fd66..f25ad041 100644
--- a/packages/drawer/example/src/ParallaxDrawer.js
+++ b/packages/drawer/example/src/ParallaxDrawer.js
@@ -1,6 +1,5 @@
import * as React from 'react';
import {
- Animated,
Button,
Dimensions,
TextInput,
@@ -17,6 +16,7 @@ import { createStackNavigator } from 'react-navigation-stack';
import { SafeAreaView } from '@react-navigation/native';
import MaterialIcons from 'react-native-vector-icons/MaterialIcons';
import { createDrawerNavigator } from 'react-navigation-drawer';
+import Animated from 'react-native-reanimated';
import { KeepAwake } from 'expo';
const SampleText = ({ children }) => {children};
@@ -168,9 +168,9 @@ const DraftsStack = createStackNavigator(
const DrawerContents = ({ drawerOpenProgress, navigation }) => {
// `contentComponent` is passed an Animated.Value called drawerOpenProgress
// that can be used to do interesting things like a simple parallax drawe
- const translateX = drawerOpenProgress.interpolate({
+ const translateX = Animated.interpolate(drawerOpenProgress, {
inputRange: [0, 1],
- outputRange: [-50, 0],
+ outputRange: [-100, 0],
});
return (
@@ -210,7 +210,6 @@ function createDrawerExample(options = {}) {
{
overlayColor: 'rgba(0,0,0,0)',
drawerType: 'back',
- useNativeAnimations: true,
contentContainerStyle: {
shadowColor: '#000000',
shadowOpacity: 0.4,
diff --git a/packages/drawer/example/src/SimpleDrawer.js b/packages/drawer/example/src/SimpleDrawer.js
index 07325f92..ab2d78a8 100644
--- a/packages/drawer/example/src/SimpleDrawer.js
+++ b/packages/drawer/example/src/SimpleDrawer.js
@@ -176,7 +176,7 @@ function createDrawerExample(options = {}) {
},
{
initialRouteName: 'Drafts',
- drawerWidth: 210,
+ drawerWidth: '60%',
navigationOptions: {
header: null,
},
diff --git a/packages/drawer/example/src/StyledDrawer.js b/packages/drawer/example/src/StyledDrawer.js
index 69d40da8..19473d93 100644
--- a/packages/drawer/example/src/StyledDrawer.js
+++ b/packages/drawer/example/src/StyledDrawer.js
@@ -88,7 +88,7 @@ const DrawerExample = createDrawerNavigator(
activeTintColor: '#e91e63',
},
drawerType: 'back',
- overlayColor: '#00000000',
+ overlayColor: 'rgba(233, 30, 99, 0.5)',
hideStatusBar: true,
}
);
diff --git a/packages/drawer/example/yarn.lock b/packages/drawer/example/yarn.lock
index 8e3aea11..41f6c043 100644
--- a/packages/drawer/example/yarn.lock
+++ b/packages/drawer/example/yarn.lock
@@ -848,20 +848,20 @@
pouchdb-collections "^1.0.1"
tiny-queue "^0.2.1"
-"@react-navigation/core@^3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.3.0.tgz#a8fa76e1c2a0da588da3d94ec9ea0956b7df753e"
- integrity sha512-jCtvNnJu6CBctIvaGzL82xedWG0IQv+URwZfKQSkoUgiFViSsUhoDWHgnoRXAlWvR8Js7au3hrC/Cwshwhi9/w==
+"@react-navigation/core@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.4.0.tgz#776845f9d4f8b2b9cb99c5d2d4433ebcef290d92"
+ integrity sha512-YAnx9mK6P/zYkvn4YxZL6thaNdouSmD7FUaftFrOAbE7y7cCfH8hmk7BOLoOet6Sh2+UnrpkWX7Kg54cT2Jw+g==
dependencies:
- hoist-non-react-statics "^2.5.5"
+ hoist-non-react-statics "^3.3.0"
path-to-regexp "^1.7.0"
- query-string "^6.2.0"
- react-is "^16.6.3"
+ query-string "^6.4.2"
+ react-is "^16.8.6"
-"@react-navigation/native@^3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.3.0.tgz#def7a94ef17581a404a3de2a3200f986e999dac1"
- integrity sha512-w/+2B0qX441BpNkYb5QoPY8+Q4Q18adGTahVpc6o8Juj6odAxyIJ2RozXk7dCpN/w0dz4B+5ggqMKHVniE6K7w==
+"@react-navigation/native@^3.4.1":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.4.1.tgz#e1fbf334ac834a9f10dd7d9c3af3e36939486089"
+ integrity sha512-pMAPQfvwC4DvhQfsrXKAf+FiU+A5XAh216v17rEePSFcbeOEt7cvewmWxCxydN/vFjJChFiPV+xnjJyJBdPLOg==
dependencies:
hoist-non-react-statics "^3.0.1"
react-native-safe-area-view "^0.13.0"
@@ -3157,7 +3157,7 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
-hoist-non-react-statics@2.5.0, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0, hoist-non-react-statics@^2.5.5, hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.1.0:
+hoist-non-react-statics@2.5.0, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0, hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.1.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40"
integrity sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==
@@ -4831,7 +4831,7 @@ qs@^6.5.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-query-string@^6.2.0:
+query-string@^6.4.2:
version "6.4.2"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.4.2.tgz#8be1dbd105306aebf86022144f575a29d516b713"
integrity sha512-DfJqAen17LfLA3rQ+H5S4uXphrF+ANU1lT2ijds4V/Tj4gZxA3gx5/tg1bz7kYCmwna7LyJNCYqO7jNRzo3aLw==
@@ -4882,7 +4882,7 @@ react-devtools-core@3.3.4:
shell-quote "^1.6.1"
ws "^3.3.1"
-react-is@^16.6.3, react-is@^16.7.0:
+react-is@^16.7.0, react-is@^16.8.6:
version "16.8.6"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
@@ -4906,7 +4906,7 @@ react-native-gesture-handler@~1.0.14:
invariant "^2.2.2"
prop-types "^15.5.10"
-"react-native-maps@github:expo/react-native-maps#v0.22.1-exp.0":
+react-native-maps@expo/react-native-maps#v0.22.1-exp.0:
version "0.22.1"
resolved "https://codeload.github.com/expo/react-native-maps/tar.gz/e6f98ff7272e5d0a7fe974a41f28593af2d77bb2"
diff --git a/packages/drawer/jest-setup.js b/packages/drawer/jest-setup.js
index ab1e3ae4..eb81c11f 100644
--- a/packages/drawer/jest-setup.js
+++ b/packages/drawer/jest-setup.js
@@ -1,16 +1,64 @@
/* eslint-env jest */
-jest.mock('react-native-gesture-handler/DrawerLayout', () => {
- const React = require('react');
- const View = require.requireActual('View');
- const DrawerLayout = React.forwardRef((props, ref) => (
-
- ));
+import NativeModules from 'NativeModules';
- DrawerLayout.positions = {
- Left: 'left',
- Right: 'right',
- };
-
- return DrawerLayout;
+Object.assign(NativeModules, {
+ RNGestureHandlerModule: {
+ attachGestureHandler: jest.fn(),
+ createGestureHandler: jest.fn(),
+ dropGestureHandler: jest.fn(),
+ updateGestureHandler: jest.fn(),
+ State: {},
+ Directions: {},
+ },
+ ReanimatedModule: {
+ createNode: jest.fn(),
+ configureProps: jest.fn(),
+ configureNativeProps: jest.fn(),
+ connectNodes: jest.fn(),
+ disconnectNodes: jest.fn(),
+ addListener: jest.fn(),
+ removeListeners: jest.fn(),
+ },
+ PlatformConstants: {
+ forceTouchAvailable: false,
+ },
});
+
+jest.mock('react-native-reanimated', () => ({
+ __esModule: true,
+ default: {
+ View: require('react-native').Animated.View,
+ Text: require('react-native').Animated.Text,
+ Clock: jest.fn(),
+ Value: jest.fn(),
+ onChange: jest.fn(),
+ interpolate: jest.fn(),
+ abs: jest.fn(),
+ add: jest.fn(),
+ sub: jest.fn(),
+ and: jest.fn(),
+ block: jest.fn(),
+ call: jest.fn(),
+ clockRunning: jest.fn(),
+ cond: jest.fn(),
+ divide: jest.fn(),
+ eq: jest.fn(),
+ event: jest.fn(),
+ greaterThan: jest.fn(),
+ lessThan: jest.fn(),
+ max: jest.fn(),
+ min: jest.fn(),
+ multiply: jest.fn(),
+ neq: jest.fn(),
+ or: jest.fn(),
+ set: jest.fn(),
+ spring: jest.fn(),
+ startClock: jest.fn(),
+ stopClock: jest.fn(),
+ timing: jest.fn(),
+ },
+ Easing: {
+ out: jest.fn(),
+ },
+}));
diff --git a/packages/drawer/package.json b/packages/drawer/package.json
index 0f061157..2b3f78a3 100644
--- a/packages/drawer/package.json
+++ b/packages/drawer/package.json
@@ -14,7 +14,8 @@
"test": "jest",
"lint": "eslint --ext .js,.ts,.tsx .",
"typescript": "tsc --noEmit",
- "bootstrap": "yarn && yarn --cwd example",
+ "example": "yarn --cwd example",
+ "bootstrap": "yarn && yarn example",
"prepare": "bob build"
},
"keywords": [
@@ -38,30 +39,34 @@
"homepage": "https://github.com/react-navigation/react-navigation-drawer#readme",
"devDependencies": {
"@babel/core": "^7.4.3",
+ "@commitlint/config-conventional": "^7.5.0",
"@expo/vector-icons": "^10.0.1",
- "@react-native-community/bob": "^0.3.3",
- "@react-navigation/core": "^3.3.0",
- "@react-navigation/native": "^3.3.0",
+ "@react-native-community/bob": "^0.3.4",
+ "@react-navigation/core": "^3.4.0",
+ "@react-navigation/native": "^3.4.1",
"@types/jest": "^24.0.11",
"@types/react": "^16.8.13",
- "@types/react-native": "^0.57.43",
+ "@types/react-native": "^0.57.49",
"@types/react-test-renderer": "^16.8.1",
"babel-jest": "^24.7.1",
+ "commitlint": "^7.5.2",
"escape-string-regexp": "^1.0.5",
"eslint": "^5.16.0",
"eslint-config-satya164": "^2.4.1",
"eslint-plugin-react-native-globals": "^0.1.0",
"husky": "^1.3.1",
"jest": "^24.7.1",
- "prettier": "^1.16.4",
+ "prettier": "^1.17.0",
"react": "16.5.0",
"react-dom": "16.5.0",
"react-lifecycles-compat": "^3.0.4",
"react-native": "~0.57.1",
"react-native-gesture-handler": "^1.1.0",
+ "react-native-reanimated": "^1.0.1",
"react-native-screens": "^1.0.0-alpha.22",
+ "react-native-testing-library": "^1.7.0",
"react-test-renderer": "16.8.6",
- "typescript": "^3.4.3"
+ "typescript": "^3.4.5"
},
"peerDependencies": {
"@react-navigation/core": "^3.0.0",
@@ -69,6 +74,7 @@
"react": "*",
"react-native": "*",
"react-native-gesture-handler": "^1.0.12",
+ "react-native-reanimated": "^1.0.0",
"react-native-screens": "^1.0.0 || ^1.0.0-alpha"
},
"jest": {
@@ -97,7 +103,8 @@
},
"husky": {
"hooks": {
- "pre-commit": "yarn lint && yarn typescript && yarn test"
+ "pre-commit": "yarn lint && yarn typescript && yarn test",
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"@react-native-community/bob": {
@@ -105,7 +112,8 @@
"output": "lib",
"targets": [
"commonjs",
- "module"
+ "module",
+ "typescript"
]
}
}
diff --git a/packages/drawer/src/index.tsx b/packages/drawer/src/index.tsx
index 1f4f091c..0537142a 100644
--- a/packages/drawer/src/index.tsx
+++ b/packages/drawer/src/index.tsx
@@ -1,15 +1,15 @@
+import * as DrawerAcions from './routers/DrawerActions';
+
/**
* Navigators
*/
-/**
- * Router
- */
-import * as DrawerAcions from './routers/DrawerActions';
-
export {
default as createDrawerNavigator,
} from './navigators/createDrawerNavigator';
+/**
+ * Router
+ */
export { DrawerAcions };
export { default as DrawerRouter } from './routers/DrawerRouter';
diff --git a/packages/drawer/src/navigators/__tests__/createDrawerNavigator.test.tsx b/packages/drawer/src/navigators/__tests__/createDrawerNavigator.test.tsx
index 5a9ed1bf..87e00d5d 100644
--- a/packages/drawer/src/navigators/__tests__/createDrawerNavigator.test.tsx
+++ b/packages/drawer/src/navigators/__tests__/createDrawerNavigator.test.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
import { View } from 'react-native';
-import renderer from 'react-test-renderer';
+import { render } from 'react-native-testing-library';
import { createAppContainer } from '@react-navigation/native';
import createDrawerNavigator from '../createDrawerNavigator';
@@ -21,62 +21,63 @@ class HomeScreen extends React.Component {
it('renders successfully', () => {
const MyDrawerNavigator = createDrawerNavigator({ Home: HomeScreen });
const App = createAppContainer(MyDrawerNavigator);
- const rendered = renderer.create().toJSON();
+ const rendered = render().toJSON();
expect(rendered).toMatchInlineSnapshot(`
-
{
"flex": 1,
}
}
- />
+ >
+
+
+
-
+
+
+
+
+
+
+
+
+
+ Welcome anonymous
+
+
+
+
+
+
+
+
+
+
`);
});
diff --git a/packages/drawer/src/navigators/createDrawerNavigator.tsx b/packages/drawer/src/navigators/createDrawerNavigator.tsx
index 383e6cdc..a318d6ec 100644
--- a/packages/drawer/src/navigators/createDrawerNavigator.tsx
+++ b/packages/drawer/src/navigators/createDrawerNavigator.tsx
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { Dimensions, Platform, ScrollView } from 'react-native';
+import { Dimensions, Platform, ScrollView, I18nManager } from 'react-native';
import { createNavigator } from '@react-navigation/core';
import { SafeAreaView } from '@react-navigation/native';
import DrawerRouter from '../routers/DrawerRouter';
@@ -35,14 +35,12 @@ const DefaultDrawerConfig = {
return Math.min(smallerAxisSize - appBarHeight, maxWidth);
},
contentComponent: defaultContentComponent,
- drawerPosition: 'left',
+ drawerPosition: I18nManager.isRTL ? 'right' : 'left',
keyboardDismissMode: 'on-drag',
drawerBackgroundColor: 'white',
- useNativeAnimations: true,
drawerType: 'front',
hideStatusBar: false,
statusBarAnimation: 'slide',
- overlayColor: 'black',
};
const DrawerNavigator = (routeConfigs: object, config: any = {}) => {
diff --git a/packages/drawer/src/routers/DrawerActions.tsx b/packages/drawer/src/routers/DrawerActions.tsx
index 777ddedf..8234a3d8 100644
--- a/packages/drawer/src/routers/DrawerActions.tsx
+++ b/packages/drawer/src/routers/DrawerActions.tsx
@@ -10,12 +10,7 @@ export const MARK_DRAWER_IDLE = 'Navigation/MARK_DRAWER_IDLE';
export type DrawerActionType =
| typeof OPEN_DRAWER
| typeof CLOSE_DRAWER
- | typeof TOGGLE_DRAWER
- | typeof DRAWER_OPENED
- | typeof DRAWER_CLOSED
- | typeof MARK_DRAWER_ACTIVE
- | typeof MARK_DRAWER_SETTLING
- | typeof MARK_DRAWER_IDLE;
+ | typeof TOGGLE_DRAWER;
export const openDrawer = (payload?: any) => ({
type: OPEN_DRAWER,
@@ -27,21 +22,6 @@ export const closeDrawer = (payload?: any) => ({
...payload,
});
-export const markDrawerActive = (payload?: any) => ({
- type: MARK_DRAWER_ACTIVE,
- ...payload,
-});
-
-export const markDrawerIdle = (payload?: any) => ({
- type: MARK_DRAWER_IDLE,
- ...payload,
-});
-
-export const markDrawerSettling = (payload?: any) => ({
- type: MARK_DRAWER_SETTLING,
- ...payload,
-});
-
export const toggleDrawer = (payload?: any) => ({
type: TOGGLE_DRAWER,
...payload,
diff --git a/packages/drawer/src/routers/DrawerRouter.tsx b/packages/drawer/src/routers/DrawerRouter.tsx
index 6df9da21..d5676097 100644
--- a/packages/drawer/src/routers/DrawerRouter.tsx
+++ b/packages/drawer/src/routers/DrawerRouter.tsx
@@ -15,8 +15,6 @@ type Action = {
type State = Route & {
isDrawerOpen?: any;
- isDrawerIdle?: any;
- drawerMovementDirection?: any;
};
function withDefaultValue(obj: object, key: string, defaultValue: any): any {
@@ -60,12 +58,6 @@ export default (
const switchRouter = SwitchRouter(routeConfigs, config);
- let __id = -1;
- const genId = () => {
- __id++;
- return __id;
- };
-
return {
...switchRouter,
@@ -84,11 +76,6 @@ export default (
return {
...switchRouter.getStateForAction(action, undefined),
isDrawerOpen: false,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- openId: genId(),
- closeId: genId(),
- toggleId: genId(),
};
}
@@ -96,78 +83,27 @@ export default (
if (isRouterTargeted) {
// Only handle actions that are meant for this drawer, as specified by action.key.
-
- if (action.type === DrawerActions.DRAWER_CLOSED) {
- return {
- ...state,
- isDrawerOpen: false,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- };
- }
-
- if (action.type === DrawerActions.DRAWER_OPENED) {
- return {
- ...state,
- isDrawerOpen: true,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- };
- }
-
- if (action.type === DrawerActions.CLOSE_DRAWER) {
- return {
- ...state,
- closeId: genId(),
- };
- }
-
- if (action.type === DrawerActions.MARK_DRAWER_SETTLING) {
- return {
- ...state,
- isDrawerIdle: false,
- drawerMovementDirection: action.willShow ? 'opening' : 'closing',
- };
- }
-
- if (action.type === DrawerActions.MARK_DRAWER_ACTIVE) {
- return {
- ...state,
- isDrawerIdle: false,
- drawerMovementDirection: null,
- };
- }
-
- if (action.type === DrawerActions.MARK_DRAWER_IDLE) {
- return {
- ...state,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- };
- }
-
if (
- action.type === NavigationActions.BACK &&
- (state.isDrawerOpen || !state.isDrawerIdle) &&
- state.drawerMovementDirection !== 'closing'
+ action.type === DrawerActions.CLOSE_DRAWER ||
+ (action.type === NavigationActions.BACK && state.isDrawerOpen)
) {
return {
...state,
- closeId: genId(),
+ isDrawerOpen: false,
};
}
if (action.type === DrawerActions.OPEN_DRAWER) {
return {
...state,
- openId: genId(),
+ isDrawerOpen: true,
};
}
if (action.type === DrawerActions.TOGGLE_DRAWER) {
return {
...state,
- toggleId: genId(),
+ isDrawerOpen: !state.isDrawerOpen,
};
}
}
@@ -185,11 +121,11 @@ export default (
// If any navigation has happened, and the drawer is maybe open, make sure to close it
if (
getActiveRouteKey(switchedState) !== getActiveRouteKey(state) &&
- (state.isDrawerOpen || state.drawerMovementDirection !== 'closing')
+ state.isDrawerOpen
) {
return {
...switchedState,
- closeId: genId(),
+ isDrawerOpen: false,
};
}
diff --git a/packages/drawer/src/routers/__tests__/DrawerRouter.test.tsx b/packages/drawer/src/routers/__tests__/DrawerRouter.test.tsx
index 93042e7d..c7fe062e 100644
--- a/packages/drawer/src/routers/__tests__/DrawerRouter.test.tsx
+++ b/packages/drawer/src/routers/__tests__/DrawerRouter.test.tsx
@@ -12,143 +12,136 @@ import * as DrawerActions from '../../routers/DrawerActions';
const INIT_ACTION = { type: NavigationActions.INIT };
-describe('DrawerRouter', () => {
- it('Handles basic drawer logic and fires close on switch', () => {
- const ScreenA = () =>
;
- const ScreenB = () => ;
- const router = DrawerRouter({
- Foo: { screen: ScreenA },
- Bar: { screen: ScreenB },
- });
- const state = router.getStateForAction(INIT_ACTION);
- const expectedState = {
- index: 0,
- isTransitioning: false,
- routes: [
- { key: 'Foo', routeName: 'Foo', params: undefined },
- { key: 'Bar', routeName: 'Bar', params: undefined },
- ],
- isDrawerOpen: false,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- openId: 0,
- closeId: 1,
- toggleId: 2,
- };
- expect(state).toEqual(expectedState);
- const state2 = router.getStateForAction(
- { type: NavigationActions.NAVIGATE, routeName: 'Bar' },
- state
- );
- const expectedState2 = {
- index: 1,
- isTransitioning: false,
- routes: [
- { key: 'Foo', routeName: 'Foo', params: undefined },
- { key: 'Bar', routeName: 'Bar', params: undefined },
- ],
- isDrawerOpen: false,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- openId: 0,
- closeId: 3,
- toggleId: 2,
- };
- expect(state2).toEqual(expectedState2);
- expect(router.getComponentForState(expectedState)).toEqual(ScreenA);
- expect(router.getComponentForState(expectedState2)).toEqual(ScreenB);
+it('handles basic drawer logic and fires close on switch', () => {
+ const ScreenA = () => ;
+ const ScreenB = () => ;
+ const router = DrawerRouter({
+ Foo: { screen: ScreenA },
+ Bar: { screen: ScreenB },
});
+ const state = router.getStateForAction(INIT_ACTION);
+ const expectedState = {
+ index: 0,
+ isTransitioning: false,
+ routes: [
+ { key: 'Foo', routeName: 'Foo', params: undefined },
+ { key: 'Bar', routeName: 'Bar', params: undefined },
+ ],
+ isDrawerOpen: false,
+ };
+ expect(state).toEqual(expectedState);
+ const state2 = router.getStateForAction(
+ { type: NavigationActions.NAVIGATE, routeName: 'Bar' },
+ state
+ );
+ const expectedState2 = {
+ index: 1,
+ isTransitioning: false,
+ routes: [
+ { key: 'Foo', routeName: 'Foo', params: undefined },
+ { key: 'Bar', routeName: 'Bar', params: undefined },
+ ],
+ isDrawerOpen: false,
+ };
+ expect(state2).toEqual(expectedState2);
+ expect(router.getComponentForState(expectedState)).toEqual(ScreenA);
+ expect(router.getComponentForState(expectedState2)).toEqual(ScreenB);
+});
- it('Handles initial route navigation', () => {
- const FooScreen = () => ;
- const BarScreen = () => ;
- const router = DrawerRouter(
- {
- Foo: {
- screen: FooScreen,
- },
- Bar: {
- screen: BarScreen,
- },
+it('handles initial route navigation', () => {
+ const FooScreen = () => ;
+ const BarScreen = () => ;
+ const router = DrawerRouter(
+ {
+ Foo: {
+ screen: FooScreen,
},
- { initialRouteName: 'Bar' }
- );
- const state = router.getStateForAction({
- type: NavigationActions.NAVIGATE,
- routeName: 'Foo',
- });
- expect(state).toEqual({
- index: 0,
- isDrawerOpen: false,
- isDrawerIdle: true,
- drawerMovementDirection: null,
- isTransitioning: false,
- openId: 0,
- closeId: 1,
- toggleId: 2,
- routes: [
- {
- key: 'Foo',
- params: undefined,
- routeName: 'Foo',
- },
- {
- key: 'Bar',
- params: undefined,
- routeName: 'Bar',
- },
- ],
- });
+ Bar: {
+ screen: BarScreen,
+ },
+ },
+ { initialRouteName: 'Bar' }
+ );
+ const state = router.getStateForAction({
+ type: NavigationActions.NAVIGATE,
+ routeName: 'Foo',
});
-
- it('Drawer opens closes and toggles', () => {
- const ScreenA = () => ;
- const ScreenB = () => ;
- const router = DrawerRouter({
- Foo: { screen: ScreenA },
- Bar: { screen: ScreenB },
- });
- const state = router.getStateForAction(INIT_ACTION);
- expect(state.toggleId).toEqual(2);
- const state2 = router.getStateForAction(
- { type: DrawerActions.OPEN_DRAWER },
- state
- );
- expect(state2.openId).toEqual(3);
- const state3 = router.getStateForAction(
- { type: DrawerActions.CLOSE_DRAWER },
- state2
- );
- expect(state3.closeId).toEqual(4);
- const state4 = router.getStateForAction(
- { type: DrawerActions.TOGGLE_DRAWER },
- state3
- );
- expect(state4.toggleId).toEqual(5);
- });
-
- it('Drawer opens closes with key targeted', () => {
- const ScreenA = () => ;
- const ScreenB = () => ;
- const router = DrawerRouter({
- Foo: { screen: ScreenA },
- Bar: { screen: ScreenB },
- });
- const state = router.getStateForAction(INIT_ACTION);
- const state2 = router.getStateForAction(
- { type: DrawerActions.OPEN_DRAWER, key: 'wrong' },
- state
- );
- expect(state2.openId).toEqual(0);
- const state3 = router.getStateForAction(
- { type: DrawerActions.OPEN_DRAWER, key: state.key },
- state2
- );
- expect(state3.openId).toEqual(3);
+ expect(state).toEqual({
+ index: 0,
+ isDrawerOpen: false,
+ isTransitioning: false,
+ routes: [
+ {
+ key: 'Foo',
+ params: undefined,
+ routeName: 'Foo',
+ },
+ {
+ key: 'Bar',
+ params: undefined,
+ routeName: 'Bar',
+ },
+ ],
});
});
-it('Nested routers bubble up blocked actions', () => {
+it('drawer opens, closes and toggles', () => {
+ const ScreenA = () => ;
+ const ScreenB = () => ;
+ const router = DrawerRouter({
+ Foo: { screen: ScreenA },
+ Bar: { screen: ScreenB },
+ });
+ const state = router.getStateForAction(INIT_ACTION);
+
+ expect(state.isDrawerOpen).toEqual(false);
+
+ const state2 = router.getStateForAction(
+ { type: DrawerActions.OPEN_DRAWER },
+ state
+ );
+
+ expect(state2.isDrawerOpen).toEqual(true);
+
+ const state3 = router.getStateForAction(
+ { type: DrawerActions.CLOSE_DRAWER },
+ state2
+ );
+
+ expect(state3.isDrawerOpen).toEqual(false);
+
+ const state4 = router.getStateForAction(
+ { type: DrawerActions.TOGGLE_DRAWER },
+ state3
+ );
+
+ expect(state4.isDrawerOpen).toEqual(true);
+});
+
+it('drawer opens, closes with key targeted', () => {
+ const ScreenA = () => ;
+ const ScreenB = () => ;
+ const router = DrawerRouter({
+ Foo: { screen: ScreenA },
+ Bar: { screen: ScreenB },
+ });
+ const state = router.getStateForAction(INIT_ACTION);
+ const state2 = router.getStateForAction(
+ { type: DrawerActions.OPEN_DRAWER, key: 'wrong' },
+ state
+ );
+
+ expect(state2.isDrawerOpen).toEqual(false);
+
+ const state3 = router.getStateForAction(
+ { type: DrawerActions.OPEN_DRAWER, key: state.key },
+ state2
+ );
+
+ expect(state3.isDrawerOpen).toEqual(true);
+});
+
+it('nested routers bubble up blocked actions', () => {
const ScreenA = () => ;
ScreenA.router = {
getStateForAction(action: { type: string }, lastState: any) {
@@ -167,7 +160,7 @@ it('Nested routers bubble up blocked actions', () => {
expect(state2).toEqual(null);
});
-it('Drawer does not fire close when child routers return new state', () => {
+it('drawer does not fire close when child routers return new state', () => {
const ScreenA = () => ;
ScreenA.router = {
getStateForAction(
@@ -184,14 +177,14 @@ it('Drawer does not fire close when child routers return new state', () => {
});
const state = router.getStateForAction(INIT_ACTION);
- expect(state.closeId).toEqual(1);
+ expect(state.isDrawerOpen).toEqual(false);
const state2 = router.getStateForAction({ type: 'CHILD_ACTION' }, state);
- expect(state2.closeId).toEqual(1);
+ expect(state2.isDrawerOpen).toEqual(false);
expect(state2.routes[0].changed).toEqual(true);
});
-it('DrawerRouter will close drawer on child navigaton, not on child param changes', () => {
+it('drawerRouter will close drawer on child navigaton, not on child param changes', () => {
class FooView extends React.Component {
render() {
return ;
@@ -217,13 +210,13 @@ it('DrawerRouter will close drawer on child navigaton, not on child param change
DrawerActions.openDrawer(),
emptyState
);
- expect(initState.openId).toBe(3);
+ expect(initState.isDrawerOpen).toBe(true);
const state0 = router.getStateForAction(
NavigationActions.navigate({ routeName: 'Quo' }),
initState
);
- expect(state0.closeId).toBe(4);
+ expect(state0.isDrawerOpen).toBe(false);
const initSwitchState = initState.routes[initState.index];
const initQuxState = initSwitchState.routes[initSwitchState.index];
@@ -237,7 +230,7 @@ it('DrawerRouter will close drawer on child navigaton, not on child param change
);
const state1switchState = state1.routes[state1.index];
const state1quxState = state1switchState.routes[state1switchState.index];
- expect(state1.closeId).toBe(1); // don't fire close
+ expect(state1.isDrawerOpen).toBe(true); // don't fire close
expect(state1quxState.params.foo).toEqual('bar');
});
@@ -266,12 +259,6 @@ it('goBack closes drawer when inside of stack', () => {
);
expect(state3.index).toEqual(1);
expect(state3.routes[1].isDrawerOpen).toEqual(true);
- expect(state3.routes[1].closeId).toEqual(1); // changed
const state4 = router.getStateForAction(NavigationActions.back(), state3);
- expect(state4.routes[1].closeId).toEqual(4);
- const state5 = router.getStateForAction(
- { type: DrawerActions.DRAWER_CLOSED },
- state4
- );
- expect(state5.routes[1].isDrawerOpen).toEqual(false);
+ expect(state4.routes[1].isDrawerOpen).toEqual(false);
});
diff --git a/packages/drawer/src/types.tsx b/packages/drawer/src/types.tsx
index a04d64a7..a077deb2 100644
--- a/packages/drawer/src/types.tsx
+++ b/packages/drawer/src/types.tsx
@@ -17,10 +17,6 @@ export type Navigation = {
key: string;
index: number;
routes: Route[];
- openId: string;
- closeId: string;
- toggleId: string;
- isDrawerIdle: boolean;
isDrawerOpen: boolean;
};
openDrawer: () => void;
diff --git a/packages/drawer/src/views/Drawer.tsx b/packages/drawer/src/views/Drawer.tsx
new file mode 100644
index 00000000..a41a44f5
--- /dev/null
+++ b/packages/drawer/src/views/Drawer.tsx
@@ -0,0 +1,586 @@
+import * as React from 'react';
+import {
+ StyleSheet,
+ ViewStyle,
+ LayoutChangeEvent,
+ I18nManager,
+ Platform,
+ Keyboard,
+ StatusBar,
+} from 'react-native';
+import {
+ PanGestureHandler,
+ TapGestureHandler,
+ State,
+ TapGestureHandlerStateChangeEvent,
+} from 'react-native-gesture-handler';
+import Animated from 'react-native-reanimated';
+
+const {
+ Clock,
+ Value,
+ onChange,
+ clockRunning,
+ startClock,
+ stopClock,
+ interpolate,
+ spring,
+ abs,
+ add,
+ and,
+ block,
+ call,
+ cond,
+ divide,
+ eq,
+ event,
+ greaterThan,
+ lessThan,
+ max,
+ min,
+ multiply,
+ neq,
+ or,
+ set,
+ sub,
+} = Animated;
+
+const TRUE = 1;
+const FALSE = 0;
+const NOOP = 0;
+const UNSET = -1;
+
+const PROGRESS_EPSILON = 0.05;
+
+const DIRECTION_LEFT = 1;
+const DIRECTION_RIGHT = -1;
+
+const SWIPE_DISTANCE_THRESHOLD_DEFAULT = 60;
+
+const SWIPE_DISTANCE_MINIMUM = 5;
+
+const SPRING_CONFIG = {
+ damping: 30,
+ mass: 0.5,
+ stiffness: 150,
+ overshootClamping: true,
+ restSpeedThreshold: 0.001,
+ restDisplacementThreshold: 0.001,
+};
+
+type Binary = 0 | 1;
+
+type Renderer = (props: { progress: Animated.Node }) => React.ReactNode;
+
+type Props = {
+ open: boolean;
+ onOpen: () => void;
+ onClose: () => void;
+ onGestureRef?: (ref: PanGestureHandler | null) => void;
+ locked: boolean;
+ drawerPosition: 'left' | 'right';
+ drawerType: 'front' | 'back' | 'slide';
+ keyboardDismissMode: 'none' | 'on-drag';
+ swipeEdgeWidth: number;
+ swipeDistanceThreshold?: number;
+ swipeVelocityThreshold: number;
+ hideStatusBar: boolean;
+ statusBarAnimation: 'slide' | 'none' | 'fade';
+ overlayStyle?: ViewStyle;
+ drawerStyle?: ViewStyle;
+ contentContainerStyle?: ViewStyle;
+ renderDrawerContent: Renderer;
+ renderSceneContent: Renderer;
+};
+
+export default class DrawerView extends React.PureComponent {
+ static defaultProps = {
+ locked: false,
+ drawerPostion: I18nManager.isRTL ? 'left' : 'right',
+ drawerType: 'front',
+ swipeEdgeWidth: 32,
+ swipeVelocityThreshold: 500,
+ keyboardDismissMode: 'on-drag',
+ hideStatusBar: false,
+ statusBarAnimation: 'slide',
+ };
+
+ componentDidUpdate(prevProps: Props) {
+ const {
+ open,
+ drawerPosition,
+ drawerType,
+ swipeDistanceThreshold,
+ swipeVelocityThreshold,
+ hideStatusBar,
+ } = this.props;
+
+ if (
+ // If we're not in the middle of a transition, sync the drawer's open state
+ typeof this.pendingOpenValue !== 'boolean' ||
+ open !== this.pendingOpenValue
+ ) {
+ this.toggleDrawer(open);
+ }
+
+ this.pendingOpenValue = undefined;
+
+ if (open !== prevProps.open && hideStatusBar) {
+ this.toggleStatusBar(open);
+ }
+
+ if (prevProps.drawerPosition !== drawerPosition) {
+ this.drawerPosition.setValue(
+ drawerPosition === 'right' ? DIRECTION_RIGHT : DIRECTION_LEFT
+ );
+ }
+
+ if (prevProps.drawerType !== drawerType) {
+ this.isDrawerTypeFront.setValue(drawerType === 'front' ? TRUE : FALSE);
+ }
+
+ if (prevProps.swipeDistanceThreshold !== swipeDistanceThreshold) {
+ this.swipeDistanceThreshold.setValue(
+ swipeDistanceThreshold !== undefined
+ ? swipeDistanceThreshold
+ : SWIPE_DISTANCE_THRESHOLD_DEFAULT
+ );
+ }
+
+ if (prevProps.swipeVelocityThreshold !== swipeVelocityThreshold) {
+ this.swipeVelocityThreshold.setValue(swipeVelocityThreshold);
+ }
+ }
+
+ componentWillUnmount() {
+ this.toggleStatusBar(false);
+ }
+
+ private clock = new Clock();
+
+ private isDrawerTypeFront = new Value(
+ this.props.drawerType === 'front' ? TRUE : FALSE
+ );
+
+ private isOpen = new Value(this.props.open ? TRUE : FALSE);
+ private nextIsOpen = new Value(UNSET);
+ private isSwiping = new Value(FALSE);
+
+ private gestureState = new Value(State.UNDETERMINED);
+ private touchX = new Value(0);
+ private velocityX = new Value(0);
+ private gestureX = new Value(0);
+ private offsetX = new Value(0);
+ private position = new Value(0);
+
+ private containerWidth = new Value(0);
+ private drawerWidth = new Value(0);
+ private drawerOpacity = new Value(0);
+ private drawerPosition = new Value(
+ this.props.drawerPosition === 'right' ? DIRECTION_RIGHT : DIRECTION_LEFT
+ );
+
+ // Comment stolen from react-native-gesture-handler/DrawerLayout
+ //
+ // While closing the drawer when user starts gesture outside of its area (in greyed
+ // out part of the window), we want the drawer to follow only once finger reaches the
+ // edge of the drawer.
+ // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by
+ // dots. The touch gesture starts at '*' and moves left, touch path is indicated by
+ // an arrow pointing left
+ // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|
+ // +---------------+ +---------------+ +---------------+ +---------------+
+ //
+ // For the above to work properly we define animated value that will keep start position
+ // of the gesture. Then we use that value to calculate how much we need to subtract from
+ // the dragX. If the gesture started on the greyed out area we take the distance from the
+ // edge of the drawer to the start position. Otherwise we don't subtract at all and the
+ // drawer be pulled back as soon as you start the pan.
+ //
+ // This is used only when drawerType is "front"
+ private touchDistanceFromDrawer = cond(
+ this.isDrawerTypeFront,
+ cond(
+ eq(this.drawerPosition, DIRECTION_LEFT),
+ max(
+ // Distance of touch start from left screen edge - Drawer width
+ sub(sub(this.touchX, this.gestureX), this.drawerWidth),
+ 0
+ ),
+ min(
+ multiply(
+ // Distance of drawer from left screen edge - Touch start point
+ sub(
+ sub(this.containerWidth, this.drawerWidth),
+ sub(this.touchX, this.gestureX)
+ ),
+ DIRECTION_RIGHT
+ ),
+ 0
+ )
+ ),
+ 0
+ );
+
+ private swipeDistanceThreshold = new Value(
+ this.props.swipeDistanceThreshold !== undefined
+ ? this.props.swipeDistanceThreshold
+ : SWIPE_DISTANCE_THRESHOLD_DEFAULT
+ );
+ private swipeVelocityThreshold = new Value(
+ this.props.swipeVelocityThreshold
+ );
+
+ private currentOpenValue: boolean = this.props.open;
+ private pendingOpenValue: boolean | undefined;
+
+ private isStatusBarHidden: boolean = false;
+
+ private transitionTo = (isOpen: number | Animated.Node) => {
+ const toValue = new Value(0);
+ const frameTime = new Value(0);
+
+ const state = {
+ position: this.position,
+ time: new Value(0),
+ finished: new Value(FALSE),
+ };
+
+ return block([
+ cond(clockRunning(this.clock), NOOP, [
+ // Animation wasn't running before
+ // Set the initial values and start the clock
+ set(toValue, multiply(isOpen, this.drawerWidth, this.drawerPosition)),
+ set(frameTime, 0),
+ set(state.time, 0),
+ set(state.finished, FALSE),
+ set(this.isOpen, isOpen),
+ startClock(this.clock),
+ ]),
+ spring(
+ this.clock,
+ { ...state, velocity: this.velocityX },
+ { ...SPRING_CONFIG, toValue }
+ ),
+ cond(state.finished, [
+ // Reset gesture and velocity from previous gesture
+ set(this.touchX, 0),
+ set(this.gestureX, 0),
+ set(this.velocityX, 0),
+ set(this.offsetX, 0),
+ // When the animation finishes, stop the clock
+ stopClock(this.clock),
+ call([this.isOpen], ([value]: ReadonlyArray) => {
+ const open = Boolean(value);
+
+ if (open !== this.props.open) {
+ // Sync drawer's state after animation finished
+ // This shouldn't be necessary, but there seems to be an issue on iOS
+ this.toggleDrawer(this.props.open);
+ }
+ }),
+ ]),
+ ]);
+ };
+
+ private dragX = block([
+ onChange(
+ this.isOpen,
+ call([this.isOpen], ([value]: ReadonlyArray) => {
+ const open = Boolean(value);
+
+ this.currentOpenValue = open;
+
+ // Without this check, the drawer can go to an infinite update <-> animate loop for sync updates
+ if (open !== this.props.open) {
+ // If the mode changed, update state
+ if (open) {
+ this.props.onOpen();
+ } else {
+ this.props.onClose();
+ }
+
+ this.pendingOpenValue = open;
+
+ // Force componentDidUpdate to fire, whether user does a setState or not
+ // This allows us to detect when the user drops the update and revert back
+ // It's necessary to make sure that the state stays in sync
+ this.forceUpdate();
+ }
+ })
+ ),
+ onChange(
+ this.nextIsOpen,
+ cond(neq(this.nextIsOpen, UNSET), [
+ // Stop any running animations
+ cond(clockRunning(this.clock), stopClock(this.clock)),
+ // Update the open value to trigger the transition
+ set(this.isOpen, this.nextIsOpen),
+ set(this.nextIsOpen, UNSET),
+ ])
+ ),
+ // This block must be after the this.isOpen listener since we check for current value
+ onChange(
+ this.isSwiping,
+ // Listen to updates for this value only when it changes
+ // Without `onChange`, this will fire even if the value didn't change
+ // We don't want to call the listeners if the value didn't change
+ call([this.isSwiping], ([value]: ReadonlyArray) => {
+ const { keyboardDismissMode } = this.props;
+
+ if (value === TRUE) {
+ if (keyboardDismissMode === 'on-drag') {
+ Keyboard.dismiss();
+ }
+
+ this.toggleStatusBar(true);
+ } else {
+ this.toggleStatusBar(this.currentOpenValue);
+ }
+ })
+ ),
+ cond(
+ eq(this.gestureState, State.ACTIVE),
+ [
+ cond(this.isSwiping, NOOP, [
+ // We weren't dragging before, set it to true
+ set(this.isSwiping, TRUE),
+ // Also update the drag offset to the last position
+ set(this.offsetX, this.position),
+ ]),
+ // Update position with previous offset + gesture distance
+ set(
+ this.position,
+ add(this.offsetX, this.gestureX, this.touchDistanceFromDrawer)
+ ),
+ // Stop animations while we're dragging
+ stopClock(this.clock),
+ ],
+ [
+ set(this.isSwiping, FALSE),
+ set(this.touchX, 0),
+ this.transitionTo(
+ cond(
+ or(
+ and(
+ greaterThan(abs(this.gestureX), SWIPE_DISTANCE_MINIMUM),
+ greaterThan(abs(this.velocityX), this.swipeVelocityThreshold)
+ ),
+ greaterThan(abs(this.gestureX), this.swipeDistanceThreshold)
+ ),
+ cond(
+ eq(this.drawerPosition, DIRECTION_LEFT),
+ // If swiped to right, open the drawer, otherwise close it
+ greaterThan(
+ cond(eq(this.velocityX, 0), this.gestureX, this.velocityX),
+ 0
+ ),
+ // If swiped to left, open the drawer, otherwise close it
+ lessThan(
+ cond(eq(this.velocityX, 0), this.gestureX, this.velocityX),
+ 0
+ )
+ ),
+ this.isOpen
+ )
+ ),
+ ]
+ ),
+ this.position,
+ ]);
+
+ private translateX = cond(
+ eq(this.drawerPosition, DIRECTION_RIGHT),
+ min(max(multiply(this.drawerWidth, -1), this.dragX), 0),
+ max(min(this.drawerWidth, this.dragX), 0)
+ );
+
+ private progress = cond(
+ // Check if the drawer width is available to avoid division by zero
+ eq(this.drawerWidth, 0),
+ 0,
+ abs(divide(this.translateX, this.drawerWidth))
+ );
+
+ private handleGestureEvent = event([
+ {
+ nativeEvent: {
+ x: this.touchX,
+ translationX: this.gestureX,
+ velocityX: this.velocityX,
+ state: this.gestureState,
+ },
+ },
+ ]);
+
+ private handleTapStateChange = ({
+ nativeEvent,
+ }: TapGestureHandlerStateChangeEvent) => {
+ if (nativeEvent.oldState === State.ACTIVE && !this.props.locked) {
+ this.toggleDrawer(false);
+ }
+ };
+
+ private handleContainerLayout = (e: LayoutChangeEvent) =>
+ this.containerWidth.setValue(e.nativeEvent.layout.width);
+
+ private handleDrawerLayout = (e: LayoutChangeEvent) => {
+ this.drawerWidth.setValue(e.nativeEvent.layout.width);
+ this.toggleDrawer(this.props.open);
+
+ // Until layout is available, drawer is hidden with opacity: 0 by default
+ // Show it in the next frame when layout is available
+ // If we don't delay it until the next frame, there's a visible flicker
+ requestAnimationFrame(() => this.drawerOpacity.setValue(1));
+ };
+
+ private toggleDrawer = (open: boolean) => {
+ this.nextIsOpen.setValue(open ? TRUE : FALSE);
+
+ // This value will also be set shortly after as changing this.nextIsOpen changes this.isOpen
+ // However, there's a race condition on Android, so we need to set a bit earlier
+ this.currentOpenValue = open;
+ };
+
+ private toggleStatusBar = (hidden: boolean) => {
+ const { hideStatusBar, statusBarAnimation } = this.props;
+
+ if (hideStatusBar && this.isStatusBarHidden !== hidden) {
+ this.isStatusBarHidden = hidden;
+ StatusBar.setHidden(hidden, statusBarAnimation);
+ }
+ };
+
+ render() {
+ const {
+ open,
+ locked,
+ drawerPosition,
+ drawerType,
+ swipeEdgeWidth,
+ contentContainerStyle,
+ drawerStyle,
+ overlayStyle,
+ onGestureRef,
+ renderDrawerContent,
+ renderSceneContent,
+ } = this.props;
+
+ const right = drawerPosition === 'right';
+
+ const contentTranslateX = drawerType === 'front' ? 0 : this.translateX;
+ const drawerTranslateX =
+ drawerType === 'back'
+ ? I18nManager.isRTL
+ ? multiply(this.drawerWidth, DIRECTION_RIGHT)
+ : this.drawerWidth
+ : this.translateX;
+
+ const offset = I18nManager.isRTL ? '100%' : multiply(this.drawerWidth, -1);
+
+ // FIXME: Currently hitSlop is broken when on Android when drawer is on right
+ // https://github.com/kmagiera/react-native-gesture-handler/issues/569
+ const hitSlop = right
+ ? // Extend hitSlop to the side of the screen when drawer is closed
+ // This lets the user drag the drawer from the side of the screen
+ { right: 0, width: open ? undefined : swipeEdgeWidth }
+ : { left: 0, width: open ? undefined : swipeEdgeWidth };
+
+ return (
+
+
+
+ {renderSceneContent({ progress: this.progress })}
+
+
+
+
+
+ {renderDrawerContent({ progress: this.progress })}
+
+
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ container: {
+ backgroundColor: 'white',
+ position: 'absolute',
+ top: 0,
+ bottom: 0,
+ width: '80%',
+ maxWidth: '100%',
+ },
+ overlay: {
+ ...StyleSheet.absoluteFillObject,
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
+ },
+ content: {
+ flex: 1,
+ },
+ main: {
+ flex: 1,
+ overflow: 'hidden',
+ },
+});
diff --git a/packages/drawer/src/views/DrawerView.tsx b/packages/drawer/src/views/DrawerView.tsx
index 56610325..c00732c2 100644
--- a/packages/drawer/src/views/DrawerView.tsx
+++ b/packages/drawer/src/views/DrawerView.tsx
@@ -1,30 +1,28 @@
import * as React from 'react';
-import { Dimensions, StyleSheet, ViewStyle, Animated } from 'react-native';
+import { Dimensions, StyleSheet, ViewStyle } from 'react-native';
import { SceneView } from '@react-navigation/core';
-import DrawerLayout from 'react-native-gesture-handler/DrawerLayout';
import { ScreenContainer } from 'react-native-screens';
import * as DrawerActions from '../routers/DrawerActions';
import DrawerSidebar, { ContentComponentProps } from './DrawerSidebar';
import DrawerGestureContext from '../utils/DrawerGestureContext';
-import ResourceSavingScene from '../views/ResourceSavingScene';
+import ResourceSavingScene from './ResourceSavingScene';
+import Drawer from './Drawer';
import { Navigation } from '../types';
+import { PanGestureHandler } from 'react-native-gesture-handler';
type DrawerOptions = {
drawerBackgroundColor?: string;
overlayColor?: string;
minSwipeDistance?: number;
drawerPosition: 'left' | 'right';
+ drawerType: 'front' | 'back' | 'slide';
drawerLockMode?: 'unlocked' | 'locked-closed' | 'locked-open';
keyboardDismissMode?: 'on-drag' | 'none';
- drawerType: 'front' | 'back' | 'slide';
drawerWidth: number | (() => number);
statusBarAnimation: 'slide' | 'none' | 'fade';
- useNativeAnimations?: boolean;
onDrawerClose?: () => void;
onDrawerOpen?: () => void;
- onDrawerStateChanged?: () => void;
- drawerContainerStyle?: ViewStyle;
contentContainerStyle?: ViewStyle;
edgeWidth: number;
hideStatusBar?: boolean;
@@ -82,90 +80,36 @@ export default class DrawerView extends React.PureComponent {
};
componentDidMount() {
- Dimensions.addEventListener('change', this._updateWidth);
- }
-
- componentDidUpdate(prevProps: Props) {
- const {
- openId,
- closeId,
- toggleId,
- isDrawerOpen,
- } = this.props.navigation.state;
- const {
- openId: prevOpenId,
- closeId: prevCloseId,
- toggleId: prevToggleId,
- } = prevProps.navigation.state;
-
- let prevIds = [prevOpenId, prevCloseId, prevToggleId];
- let changedIds = [openId, closeId, toggleId]
- .filter(id => !prevIds.includes(id))
- // @ts-ignore
- .sort((a, b) => a > b);
-
- changedIds.forEach(id => {
- if (id === openId) {
- this._drawer.openDrawer();
- } else if (id === closeId) {
- this._drawer.closeDrawer();
- } else if (id === toggleId) {
- if (isDrawerOpen) {
- this._drawer.closeDrawer();
- } else {
- this._drawer.openDrawer();
- }
- }
- });
+ Dimensions.addEventListener('change', this.updateWidth);
}
componentWillUnmount() {
- Dimensions.removeEventListener('change', this._updateWidth);
+ Dimensions.removeEventListener('change', this.updateWidth);
}
- _drawer: typeof DrawerLayout;
+ private drawerGestureRef = React.createRef();
- drawerGestureRef = React.createRef();
+ private handleDrawerOpen = () => {
+ const { navigation } = this.props;
- _handleDrawerStateChange = (newState: string, willShow: boolean) => {
- if (newState === 'Idle') {
- if (!this.props.navigation.state.isDrawerIdle) {
- this.props.navigation.dispatch({
- type: DrawerActions.MARK_DRAWER_IDLE,
- key: this.props.navigation.state.key,
- });
- }
- } else if (newState === 'Settling') {
- this.props.navigation.dispatch({
- type: DrawerActions.MARK_DRAWER_SETTLING,
- key: this.props.navigation.state.key,
- willShow,
- });
- } else {
- if (this.props.navigation.state.isDrawerIdle) {
- this.props.navigation.dispatch({
- type: DrawerActions.MARK_DRAWER_ACTIVE,
- key: this.props.navigation.state.key,
- });
- }
- }
+ navigation.dispatch(
+ DrawerActions.openDrawer({
+ key: navigation.state.key,
+ })
+ );
};
- _handleDrawerOpen = () => {
- this.props.navigation.dispatch({
- type: DrawerActions.DRAWER_OPENED,
- key: this.props.navigation.state.key,
- });
+ private handleDrawerClose = () => {
+ const { navigation } = this.props;
+
+ navigation.dispatch(
+ DrawerActions.closeDrawer({
+ key: navigation.state.key,
+ })
+ );
};
- _handleDrawerClose = () => {
- this.props.navigation.dispatch({
- type: DrawerActions.DRAWER_CLOSED,
- key: this.props.navigation.state.key,
- });
- };
-
- _updateWidth = () => {
+ private updateWidth = () => {
const drawerWidth =
typeof this.props.navigationConfig.drawerWidth === 'function'
? this.props.navigationConfig.drawerWidth()
@@ -176,27 +120,23 @@ export default class DrawerView extends React.PureComponent {
}
};
- _renderNavigationView = (
- drawerOpenProgress: Animated.AnimatedInterpolation
- ) => {
+ private renderNavigationView = ({ progress }: any) => {
return (
-
-
-
+
);
};
- _renderContent = () => {
+ private renderContent = () => {
let { lazy, navigation } = this.props;
let { loaded } = this.state;
let { routes } = navigation.state;
@@ -214,7 +154,7 @@ export default class DrawerView extends React.PureComponent {
);
} else {
return (
-
+
{routes.map((route, index) => {
if (lazy && !loaded.includes(index)) {
// Don't render a screen if we've never navigated to it
@@ -246,67 +186,68 @@ export default class DrawerView extends React.PureComponent {
}
};
- _setDrawerGestureRef = (ref: any) => {
+ private setDrawerGestureRef = (ref: PanGestureHandler | null) => {
// @ts-ignore
this.drawerGestureRef.current = ref;
};
render() {
- const { navigation, screenProps } = this.props;
+ const { navigation } = this.props;
+ const {
+ drawerType,
+ drawerBackgroundColor,
+ overlayColor,
+ contentContainerStyle,
+ edgeWidth,
+ minSwipeDistance,
+ hideStatusBar,
+ statusBarAnimation,
+ } = this.props.navigationConfig;
const activeKey = navigation.state.routes[navigation.state.index].key;
const { drawerLockMode } = this.props.descriptors[activeKey].options;
+ const isOpen =
+ drawerLockMode === 'locked-closed'
+ ? false
+ : drawerLockMode === 'locked-open'
+ ? true
+ : this.props.navigation.state.isDrawerOpen;
+
return (
- {
- this._drawer = c;
- }}
- onGestureRef={this._setDrawerGestureRef}
- drawerLockMode={
- drawerLockMode ||
- (typeof screenProps === 'object' &&
- screenProps != null &&
- // @ts-ignore
- screenProps.drawerLockMode) ||
- this.props.navigationConfig.drawerLockMode
- }
- drawerBackgroundColor={
- this.props.navigationConfig.drawerBackgroundColor
- }
- keyboardDismissMode={this.props.navigationConfig.keyboardDismissMode}
- drawerWidth={this.state.drawerWidth}
- onDrawerOpen={this._handleDrawerOpen}
- onDrawerClose={this._handleDrawerClose}
- onDrawerStateChanged={this._handleDrawerStateChange}
- useNativeAnimations={this.props.navigationConfig.useNativeAnimations}
- renderNavigationView={this._renderNavigationView}
- drawerPosition={
- this.props.navigationConfig.drawerPosition === 'right'
- ? DrawerLayout.positions.Right
- : DrawerLayout.positions.Left
- }
- /* props specific to react-native-gesture-handler/DrawerLayout */
- drawerType={this.props.navigationConfig.drawerType}
- edgeWidth={this.props.navigationConfig.edgeWidth}
- hideStatusBar={this.props.navigationConfig.hideStatusBar}
- statusBarAnimation={this.props.navigationConfig.statusBarAnimation}
- minSwipeDistance={this.props.navigationConfig.minSwipeDistance}
- overlayColor={this.props.navigationConfig.overlayColor}
- drawerContainerStyle={this.props.navigationConfig.drawerContainerStyle}
- contentContainerStyle={
- this.props.navigationConfig.contentContainerStyle
- }
- >
-
- {this._renderContent()}
-
-
+
+
+
);
}
}
const styles = StyleSheet.create({
- pages: {
+ content: {
flex: 1,
},
});
diff --git a/packages/drawer/types/react-native-gesture-handler.d.ts b/packages/drawer/types/react-native-gesture-handler.d.ts
deleted file mode 100644
index 907266a2..00000000
--- a/packages/drawer/types/react-native-gesture-handler.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-declare module 'react-native-gesture-handler/DrawerLayout';
diff --git a/packages/drawer/yarn.lock b/packages/drawer/yarn.lock
index d56e5078..5b011dff 100644
--- a/packages/drawer/yarn.lock
+++ b/packages/drawer/yarn.lock
@@ -198,7 +198,14 @@
"@babel/template" "^7.1.0"
"@babel/types" "^7.0.0"
-"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0":
+"@babel/helper-split-export-declaration@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
+ integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55"
integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==
@@ -238,6 +245,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b"
integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ==
+"@babel/parser@^7.1.2":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77"
+ integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==
+
"@babel/plugin-external-helpers@^7.0.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4"
@@ -614,7 +626,7 @@
dependencies:
regenerator-runtime "^0.13.2"
-"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
+"@babel/template@^7.0.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==
@@ -623,6 +635,15 @@
"@babel/parser" "^7.4.0"
"@babel/types" "^7.4.0"
+"@babel/template@^7.1.0":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
+ integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.1.2"
+ "@babel/types" "^7.1.2"
+
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3":
version "7.4.3"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84"
@@ -638,7 +659,16 @@
globals "^11.1.0"
lodash "^4.17.11"
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0":
+"@babel/types@^7.0.0", "@babel/types@^7.1.2":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d"
+ integrity sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.10"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c"
integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==
@@ -655,6 +685,137 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
+"@commitlint/cli@^7.5.2":
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-7.5.2.tgz#2475cd8f7ed3b2f9c2ab96c06bc24d61d23f8716"
+ integrity sha512-UQdW/wNb+XeANoYYLyuKEDIfWKSzdhJkPQZ8ie/IjfMNnsP+B23bkX4Ati+6U8zgz0yyngoxWl+3lfExiIL4hQ==
+ dependencies:
+ "@commitlint/format" "^7.5.0"
+ "@commitlint/lint" "^7.5.2"
+ "@commitlint/load" "^7.5.0"
+ "@commitlint/read" "^7.5.0"
+ babel-polyfill "6.26.0"
+ chalk "2.3.1"
+ get-stdin "5.0.1"
+ lodash "4.17.11"
+ meow "5.0.0"
+ resolve-from "4.0.0"
+ resolve-global "0.1.0"
+
+"@commitlint/config-conventional@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-7.5.0.tgz#3afd4e3e34e5c2f6ec6af03e78ae924fed883ce7"
+ integrity sha512-odLgBfQ5xntFAmMfAmDY2C4EWhW+cSTbvbsRS7seb55DCa3IaxxSHHC9eXrR+hN/BdUT5vqAxdX1PkR996sq9Q==
+
+"@commitlint/ensure@^7.5.2":
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-7.5.2.tgz#57bb7dcbf1e9913e27c3b294325d0d68dd14cebf"
+ integrity sha512-ZMJKHhSJC789chKy0kWp8EWbCpLPy6vKa+fopUVx+tWL7H8AeBbibXlqAnybg+HWNcb/RD7ORROx0IsgrK4IYA==
+ dependencies:
+ lodash "4.17.11"
+
+"@commitlint/execute-rule@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-7.5.0.tgz#c9cfbab71eb962e1c46e78d76375e32754ab1e38"
+ integrity sha512-K66aoly8mxSHmBA/Y8bKSPPcCAR4GpJEsvHaLDYOG7GsyChu8NgCD53L8GUqPW8lBCWwnmCiSL+RlOkNHJ0Gag==
+ dependencies:
+ babel-runtime "6.26.0"
+
+"@commitlint/format@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-7.5.0.tgz#57a2b92dc58a3409b2be67c4c8c10bd1b28e9fe8"
+ integrity sha512-DEeQXfTLUm9kARliCBfw3SlQRAYjK2aXeRAUMs1HPhLA2tjNFFGv6LOpFFNdiu/WV+o1ojcgIvBBjpHaVT+Tvw==
+ dependencies:
+ babel-runtime "^6.23.0"
+ chalk "^2.0.1"
+
+"@commitlint/is-ignored@^7.5.1":
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-7.5.1.tgz#c4f7ffc1c8b4cf9dc3204d22ef8e78ff82536d67"
+ integrity sha512-8JZCgy6bWSnjOT5cTTiyEAGp+Y4+5CUknhVbyiPxTRbjy6yF0aMKs1gMTfHrNHTKsasgmkCyPQd4C2eOPceuKA==
+ dependencies:
+ semver "5.6.0"
+
+"@commitlint/lint@^7.5.2":
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-7.5.2.tgz#26cb819c74f8770413c4f6ef1e7abf1b739eda77"
+ integrity sha512-DY/UfGFDquMno+5c6+tE50rMxpjdQK3CRG+nktgYlVz1UAqeUD+bRc3pvX5HwAsuGvyDrWAjtszHtEDeYJKcjw==
+ dependencies:
+ "@commitlint/is-ignored" "^7.5.1"
+ "@commitlint/parse" "^7.5.0"
+ "@commitlint/rules" "^7.5.2"
+ babel-runtime "^6.23.0"
+ lodash "4.17.11"
+
+"@commitlint/load@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-7.5.0.tgz#2b225b97d631c2235d8b2084bc2fefb4d4d66719"
+ integrity sha512-fhBER/rzPsteM6zq5qqMiOi+A2bHKCE/0PKmOzYgaqTKcG9c1SsOle9phPemW85to8Gxd2YgUOVLsZkCMltLtA==
+ dependencies:
+ "@commitlint/execute-rule" "^7.5.0"
+ "@commitlint/resolve-extends" "^7.5.0"
+ babel-runtime "^6.23.0"
+ cosmiconfig "^4.0.0"
+ lodash "4.17.11"
+ resolve-from "^4.0.0"
+
+"@commitlint/message@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-7.5.0.tgz#2572fad648c769dd210374c8b95fb37124302bc5"
+ integrity sha512-5YOhsqy/MgHH7vyDsmmzO6Jr3ygr1pXbCm9NR3XB51wjg55Kd6/6dVlkhS/FmDp99pfwTdHb0TyeDFEjP98waw==
+
+"@commitlint/parse@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-7.5.0.tgz#d9374266493e5229ec61d92316d28e02419c600f"
+ integrity sha512-hWASM8SBFTBtlFkKrEtD1qW6yTe2BsfoRiMKuYyRCTd+739TUF17og5vgQVuWttbGP0gXaciW44NygS2YjZmfA==
+ dependencies:
+ conventional-changelog-angular "^1.3.3"
+ conventional-commits-parser "^2.1.0"
+ lodash "^4.17.11"
+
+"@commitlint/read@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-7.5.0.tgz#35d563b0f3075da2ce6945978996b16fb4acb0f8"
+ integrity sha512-uqGFCKZGnBUCTkxoCCJp4MfWUkegXkyT0T0RVM9diyG6uNWPWlMH1509sjLFlyeJKG+cSyYGG/d6T103ScMb4Q==
+ dependencies:
+ "@commitlint/top-level" "^7.5.0"
+ "@marionebl/sander" "^0.6.0"
+ babel-runtime "^6.23.0"
+ git-raw-commits "^1.3.0"
+
+"@commitlint/resolve-extends@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-7.5.0.tgz#d95a3058e83ddbaef5e3045835b9a3a1fba3422c"
+ integrity sha512-FRIyPuqGvGa03OT4VgOHakizcw8YR5rdm77JsZff1rSnpxk6i+025I6qMeHqCIr5FaVIA0kR3FlC+MJFUs165A==
+ dependencies:
+ babel-runtime "6.26.0"
+ import-fresh "^3.0.0"
+ lodash "4.17.11"
+ resolve-from "^4.0.0"
+ resolve-global "^0.1.0"
+
+"@commitlint/rules@^7.5.2":
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-7.5.2.tgz#da03d754625b2e67c0a6b8b9ab89eae1952a4f2e"
+ integrity sha512-eDN1UFPcBOjdnlI3syuo7y99SjGH/dUV6S9NvBocAye8ln5dfKiI2shhWochJhl36r/kYWU8Wrvl2NZJL3c52g==
+ dependencies:
+ "@commitlint/ensure" "^7.5.2"
+ "@commitlint/message" "^7.5.0"
+ "@commitlint/to-lines" "^7.5.0"
+ babel-runtime "^6.23.0"
+
+"@commitlint/to-lines@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-7.5.0.tgz#a24410d25bb85a5fff3b8d610277b3145f899766"
+ integrity sha512-ZQ3LxPNuQ/J7q42hkiPWN5fUIjWae85H2HHoBB+/Rw1fo+oehvr4Xyt+Oa9Mx5WbBnev/wXnUFjXgoadv1RZ5A==
+
+"@commitlint/top-level@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-7.5.0.tgz#01e740167e3d15110794192cd754f49f27d4a16d"
+ integrity sha512-oTu185GufTYHjTXPHu6k6HL7iuASOvDOtQizZWRSxj0VXuoki6e0HzvGZsRsycDTOn04Q9hVu+PhF83IUwRpeg==
+ dependencies:
+ find-up "^2.1.0"
+
"@expo/vector-icons@^10.0.1":
version "10.0.1"
resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-10.0.1.tgz#dbb0a9ab68b53aa6cbbc04b48421e4db862535d9"
@@ -806,10 +967,19 @@
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/yargs" "^12.0.9"
-"@react-native-community/bob@^0.3.3":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@react-native-community/bob/-/bob-0.3.3.tgz#ffcf7a16b773722b8c69345d9f5d822458f44529"
- integrity sha512-v6FHHwOBIx6BH5Wxm0YfESZH7qyRpSj8CXYBgepGDUKKp8gxGYSjsJHnYZjoJgki0JjVLmGTHozJ8sFHBLwxww==
+"@marionebl/sander@^0.6.0":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b"
+ integrity sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=
+ dependencies:
+ graceful-fs "^4.1.3"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.2"
+
+"@react-native-community/bob@^0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@react-native-community/bob/-/bob-0.3.4.tgz#dd04498cf8edc8ae515f32eb63413f5aa83a72f8"
+ integrity sha512-esZGZwcwuwTm8bAp33jtzvPfPfVpt+wxDl0mlaLuTceao/aeAGs0XPm51SZkPnc4HOv4YBiDJBlc3HWXcadu+g==
dependencies:
"@babel/core" "^7.4.0"
chalk "^2.4.2"
@@ -822,20 +992,20 @@
metro-react-native-babel-preset "^0.53.1"
yargs "^13.2.2"
-"@react-navigation/core@^3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.3.0.tgz#a8fa76e1c2a0da588da3d94ec9ea0956b7df753e"
- integrity sha512-jCtvNnJu6CBctIvaGzL82xedWG0IQv+URwZfKQSkoUgiFViSsUhoDWHgnoRXAlWvR8Js7au3hrC/Cwshwhi9/w==
+"@react-navigation/core@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.4.0.tgz#776845f9d4f8b2b9cb99c5d2d4433ebcef290d92"
+ integrity sha512-YAnx9mK6P/zYkvn4YxZL6thaNdouSmD7FUaftFrOAbE7y7cCfH8hmk7BOLoOet6Sh2+UnrpkWX7Kg54cT2Jw+g==
dependencies:
- hoist-non-react-statics "^2.5.5"
+ hoist-non-react-statics "^3.3.0"
path-to-regexp "^1.7.0"
- query-string "^6.2.0"
- react-is "^16.6.3"
+ query-string "^6.4.2"
+ react-is "^16.8.6"
-"@react-navigation/native@^3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.3.0.tgz#def7a94ef17581a404a3de2a3200f986e999dac1"
- integrity sha512-w/+2B0qX441BpNkYb5QoPY8+Q4Q18adGTahVpc6o8Juj6odAxyIJ2RozXk7dCpN/w0dz4B+5ggqMKHVniE6K7w==
+"@react-navigation/native@^3.4.1":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.4.1.tgz#e1fbf334ac834a9f10dd7d9c3af3e36939486089"
+ integrity sha512-pMAPQfvwC4DvhQfsrXKAf+FiU+A5XAh216v17rEePSFcbeOEt7cvewmWxCxydN/vFjJChFiPV+xnjJyJBdPLOg==
dependencies:
hoist-non-react-statics "^3.0.1"
react-native-safe-area-view "^0.13.0"
@@ -896,10 +1066,10 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.0.tgz#4c48fed958d6dcf9487195a0ef6456d5f6e0163a"
integrity sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==
-"@types/react-native@^0.57.43":
- version "0.57.43"
- resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.57.43.tgz#a4d3fa7be905a8e28b7682220335dacefffd816f"
- integrity sha512-hYt5a+Kj/Cy0102b+WZpNhnm1AWNz6HnVYwk41BSDZpDoJweo1BuJv1FStd6ClzCdTPJlfImF8ZqpM2xDoO2aA==
+"@types/react-native@^0.57.49":
+ version "0.57.49"
+ resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.57.49.tgz#eef43fba8149c6591201edcde9930cb30169b97f"
+ integrity sha512-Qv9goNNMTMo/KQNV6KrkJkRi8+X+JnkVws3ST1yW//iloRqkxreYHxQb0aFFXI+Cj/TRsEimszK82eujBn4wNw==
dependencies:
"@types/prop-types" "*"
"@types/react" "*"
@@ -956,6 +1126,14 @@
lodash.unescape "4.0.1"
semver "5.5.0"
+JSONStream@^1.0.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
abab@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
@@ -993,16 +1171,21 @@ acorn-jsx@^5.0.0:
integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
acorn-walk@^6.0.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
- integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc"
+ integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==
acorn@^5.5.3:
version "5.7.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
-acorn@^6.0.1, acorn@^6.0.7:
+acorn@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4"
+ integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==
+
+acorn@^6.0.7:
version "6.1.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
@@ -1167,6 +1350,16 @@ array-filter@~0.0.0:
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+
array-includes@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
@@ -1327,6 +1520,15 @@ babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
+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-fbjs@^3.0.1, babel-preset-fbjs@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.2.0.tgz#c0e6347d3e0379ed84b3c2434d3467567aa05297"
@@ -1368,6 +1570,14 @@ babel-preset-jest@^24.6.0:
"@babel/plugin-syntax-object-rest-spread" "^7.0.0"
babel-plugin-jest-hoist "^24.6.0"
+babel-runtime@6.26.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
bail@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
@@ -1535,6 +1745,15 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+camelcase-keys@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+ integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+ dependencies:
+ camelcase "^4.1.0"
+ map-obj "^2.0.0"
+ quick-lru "^1.0.0"
+
camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
@@ -1564,6 +1783,15 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+chalk@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
+ integrity sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==
+ dependencies:
+ ansi-styles "^3.2.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.2.0"
+
chalk@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1716,11 +1944,28 @@ commander@~2.13.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
+commitlint@^7.5.2:
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/commitlint/-/commitlint-7.5.2.tgz#75ebee72175e451f37132113d410f095ea24c56c"
+ integrity sha512-AnLHmX0E8Y+MulPGOWFwSPG02kKd3GI0daQ7GeJ8blKo+2OrgBRPbnU70vV6rcdz2lwe5pE+shlu8Dx9ftIoxA==
+ dependencies:
+ "@commitlint/cli" "^7.5.2"
+ read-pkg "3.0.0"
+ resolve-pkg "1.0.0"
+
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+compare-func@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
+ integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^3.0.0"
+
compare-versions@^3.2.1:
version "3.4.0"
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26"
@@ -1786,6 +2031,27 @@ contains-path@^0.1.0:
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+conventional-changelog-angular@^1.3.3:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f"
+ integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==
+ dependencies:
+ compare-func "^1.3.1"
+ q "^1.5.1"
+
+conventional-commits-parser@^2.1.0:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e"
+ integrity sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.0"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+ trim-off-newlines "^1.0.0"
+
convert-source-map@^1.1.0, convert-source-map@^1.4.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
@@ -1803,7 +2069,7 @@ core-js@^1.0.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-core-js@^2.2.2, core-js@^2.4.1:
+core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0:
version "2.6.5"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
@@ -1818,6 +2084,16 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+cosmiconfig@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
+ integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.9.0"
+ parse-json "^4.0.0"
+ require-from-string "^2.0.1"
+
cosmiconfig@^5.0.5, cosmiconfig@^5.0.7, cosmiconfig@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8"
@@ -1874,6 +2150,20 @@ csstype@^2.2.0:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.3.tgz#b701e5968245bf9b08d54ac83d00b624e622a9fa"
integrity sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dargs@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
+ integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
+ dependencies:
+ number-is-nan "^1.0.0"
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -1904,7 +2194,15 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
dependencies:
ms "^2.1.1"
-decamelize@^1.1.1, decamelize@^1.2.0:
+decamelize-keys@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -2046,6 +2344,13 @@ domexception@^1.0.1:
dependencies:
webidl-conversions "^4.0.2"
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
+ dependencies:
+ is-obj "^1.0.0"
+
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -2103,7 +2408,7 @@ errorhandler@^1.5.0:
accepts "~1.3.3"
escape-html "~1.0.3"
-es-abstract@^1.11.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
+es-abstract@^1.11.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==
@@ -2115,7 +2420,18 @@ es-abstract@^1.11.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
is-regex "^1.0.4"
object-keys "^1.0.12"
-es-to-primitive@^1.2.0:
+es-abstract@^1.5.1, es-abstract@^1.7.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+ integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+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==
@@ -2905,6 +3221,11 @@ get-caller-file@^2.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-stdin@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+ integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
+
get-stdin@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
@@ -2934,6 +3255,17 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
+git-raw-commits@^1.3.0:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff"
+ integrity sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==
+ dependencies:
+ dargs "^4.0.1"
+ lodash.template "^4.0.2"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+
glob-base@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
@@ -2949,7 +3281,7 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
-glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
@@ -2961,6 +3293,13 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
global@^4.3.0:
version "4.3.2"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
@@ -2969,7 +3308,12 @@ global@^4.3.0:
min-document "^2.19.0"
process "~0.5.1"
-globals@^11.1.0, globals@^11.7.0:
+globals@^11.1.0:
+ version "11.8.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d"
+ integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==
+
+globals@^11.7.0:
version "11.11.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
@@ -2985,7 +3329,12 @@ globby@^6.1.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+graceful-fs@^4.1.15:
version "4.1.15"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
@@ -3079,12 +3428,12 @@ has@^1.0.1, has@^1.0.3:
dependencies:
function-bind "^1.1.1"
-hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.5:
+hoist-non-react-statics@^2.3.1:
version "2.5.5"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
-hoist-non-react-statics@^3.0.1:
+hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
@@ -3196,6 +3545,11 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -3209,7 +3563,7 @@ inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@~1.3.0:
+ini@^1.3.4, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
@@ -3307,7 +3661,7 @@ is-buffer@^1.1.4, is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-callable@^1.1.4:
+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==
@@ -3459,6 +3813,11 @@ is-number@^4.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
is-path-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.0.0.tgz#d4777a8e227a00096a31f030db3770f84b116c02"
@@ -3524,6 +3883,13 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.0"
+is-text-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ dependencies:
+ text-extensions "^1.0.0"
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -4050,7 +4416,7 @@ jest@^24.7.1:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-js-yaml@^3.12.0, js-yaml@^3.13.0:
+js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.9.0:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@@ -4168,6 +4534,11 @@ jsonify@~0.0.0:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -4294,6 +4665,11 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
lodash.pad@^4.1.0:
version "4.5.1"
resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70"
@@ -4314,6 +4690,21 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+lodash.template@^4.0.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
@@ -4324,7 +4715,7 @@ lodash.unescape@4.0.1:
resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
-lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.6.1:
+lodash@4.17.11, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
@@ -4336,6 +4727,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
lru-cache@^4.0.1:
version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
@@ -4378,6 +4777,16 @@ map-cache@^0.2.2:
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+map-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+ integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
map-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -4411,6 +4820,36 @@ mem@^4.0.0:
mimic-fn "^2.0.0"
p-is-promise "^2.0.0"
+meow@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4"
+ integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+ yargs-parser "^10.0.0"
+
+meow@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
+ integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist "^1.1.3"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+
merge-stream@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
@@ -4751,12 +5190,20 @@ minimatch@^3.0.3, minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
+minimist-options@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+ integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@^1.1.1, minimist@^1.2.0:
+minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
@@ -4931,7 +5378,7 @@ nopt@^4.0.1:
abbrev "1"
osenv "^0.1.4"
-normalize-package-data@^2.3.2:
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -5314,7 +5761,7 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-path-parse@^1.0.6:
+path-parse@^1.0.5, path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
@@ -5456,10 +5903,10 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
-prettier@^1.16.4:
- version "1.16.4"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
- integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
+prettier@^1.17.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008"
+ integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==
pretty-format@^23.4.1:
version "23.6.0"
@@ -5469,7 +5916,7 @@ pretty-format@^23.4.1:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
-pretty-format@^24.7.0:
+pretty-format@^24.0.0, pretty-format@^24.7.0:
version "24.7.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.7.0.tgz#d23106bc2edcd776079c2daa5da02bcb12ed0c10"
integrity sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==
@@ -5556,12 +6003,17 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-query-string@^6.2.0:
+query-string@^6.4.2:
version "6.4.2"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.4.2.tgz#8be1dbd105306aebf86022144f575a29d516b713"
integrity sha512-DfJqAen17LfLA3rQ+H5S4uXphrF+ANU1lT2ijds4V/Tj4gZxA3gx5/tg1bz7kYCmwna7LyJNCYqO7jNRzo3aLw==
@@ -5570,6 +6022,11 @@ query-string@^6.2.0:
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
+quick-lru@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+ integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
randomatic@^3.0.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
@@ -5622,7 +6079,7 @@ react-dom@16.5.0:
prop-types "^15.6.2"
schedule "^0.3.0"
-react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
+react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
version "16.8.6"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
@@ -5641,6 +6098,11 @@ react-native-gesture-handler@^1.1.0:
invariant "^2.2.2"
prop-types "^15.5.10"
+react-native-reanimated@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.0.1.tgz#5ecb6a2f6dad0351077ac9b771ca943b7ad6feda"
+ integrity sha512-RENoo6/sJc3FApP7vJ1Js7WyDuTVh97bbr5aMjJyw3kqpR2/JDHyL/dQFfOvSSAc+VjitpR9/CfPPad7tLRiIA==
+
react-native-safe-area-view@^0.13.0:
version "0.13.1"
resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.13.1.tgz#834bbb6d22f76a7ff07de56725ee5667ba1386b0"
@@ -5648,11 +6110,23 @@ react-native-safe-area-view@^0.13.0:
dependencies:
hoist-non-react-statics "^2.3.1"
-"react-native-screens@^1.0.0 || ^1.0.0-alpha", react-native-screens@^1.0.0-alpha.22:
+"react-native-screens@^1.0.0 || ^1.0.0-alpha":
+ version "1.0.0-alpha.19"
+ resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-1.0.0-alpha.19.tgz#ecf3c9023e169b7013266d40b9c5599f37667f6d"
+ integrity sha512-+a7GdwzLWYWYVUJMg+XuyBoRFGD8GdGyBfebuTNBY+xwUZpTXCaK/GlLGL6EE3h0iBHZu83do7zViEailWRNyA==
+
+react-native-screens@^1.0.0-alpha.22:
version "1.0.0-alpha.22"
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-1.0.0-alpha.22.tgz#7a120377b52aa9bbb94d0b8541a014026be9289b"
integrity sha512-kSyAt0AeVU6N7ZonfV6dP6iZF8B7Bce+tk3eujXhzBGsLg0VSLnU7uE9VqJF0xdQrHR91ZjGgVMieo/8df9KTA==
+react-native-testing-library@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/react-native-testing-library/-/react-native-testing-library-1.7.0.tgz#8b53d5361faaa276bf67cd0e50dab1d2e26754ad"
+ integrity sha512-aciXmBjZ8GXbkgwBTyXUBSUBqYyIa/m+mZM3ZqU44pfeu+LihuvpljucSQaUutbUEywKb2sgEJWeS8GwEBa09w==
+ dependencies:
+ pretty-format "^24.0.0"
+
react-native@~0.57.1:
version "0.57.8"
resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.57.8.tgz#1a840fbe144cd3902cc14313a783ce28efc48cb9"
@@ -5760,6 +6234,14 @@ read-pkg-up@^2.0.0:
find-up "^2.0.0"
read-pkg "^2.0.0"
+read-pkg-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^3.0.0"
+
read-pkg-up@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
@@ -5768,6 +6250,15 @@ read-pkg-up@^4.0.0:
find-up "^3.0.0"
read-pkg "^3.0.0"
+read-pkg@3.0.0, read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
read-pkg@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
@@ -5777,15 +6268,6 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
path-type "^2.0.0"
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
-
read-pkg@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
@@ -5815,6 +6297,14 @@ realpath-native@^1.1.0:
dependencies:
util.promisify "^1.0.0"
+redent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+ integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
+ dependencies:
+ indent-string "^3.0.0"
+ strip-indent "^2.0.0"
+
regenerate-unicode-properties@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662"
@@ -5827,6 +6317,11 @@ regenerate@^1.4.0:
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"
@@ -5976,6 +6471,11 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+require-from-string@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
@@ -5998,15 +6498,34 @@ resolve-cwd@^2.0.0:
dependencies:
resolve-from "^3.0.0"
+resolve-from@4.0.0, resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+ integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
+
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
-resolve-from@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
- integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve-global@0.1.0, resolve-global@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-0.1.0.tgz#8fb02cfd5b7db20118e886311f15af95bd15fbd9"
+ integrity sha1-j7As/Vt9sgEY6IYxHxWvlb0V+9k=
+ dependencies:
+ global-dirs "^0.1.0"
+
+resolve-pkg@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-1.0.0.tgz#e19a15e78aca2e124461dc92b2e3943ef93494d9"
+ integrity sha1-4ZoV54rKLhJEYdySsuOUPvk0lNk=
+ dependencies:
+ resolve-from "^2.0.0"
resolve-url@^0.2.1:
version "0.2.1"
@@ -6018,13 +6537,20 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0:
+resolve@^1.10.0, resolve@^1.8.1, resolve@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
dependencies:
path-parse "^1.0.6"
+resolve@^1.3.2, resolve@^1.5.0:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
+ dependencies:
+ path-parse "^1.0.5"
+
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -6038,13 +6564,20 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
+rimraf@2.6.3, rimraf@^2.5.2, rimraf@^2.6.2, rimraf@^2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
dependencies:
glob "^7.1.3"
+rimraf@^2.5.4, rimraf@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+ dependencies:
+ glob "^7.0.5"
+
rimraf@~2.2.6:
version "2.2.8"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
@@ -6179,6 +6712,11 @@ semver@5.5.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+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==
+
send@0.16.2:
version "0.16.2"
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
@@ -6415,6 +6953,13 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
+split2@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
+ integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
+ dependencies:
+ through2 "^2.0.2"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -6562,6 +7107,11 @@ strip-eof@^1.0.0:
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+ integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+
strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
@@ -6572,7 +7122,7 @@ supports-color@^2.0.0:
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-supports-color@^5.3.0:
+supports-color@^5.2.0, supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -6632,6 +7182,11 @@ test-exclude@^5.0.0:
read-pkg-up "^4.0.0"
require-main-filename "^1.0.1"
+text-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -6642,7 +7197,7 @@ throat@^4.0.0, throat@^4.1.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
-through2@^2.0.0:
+through2@^2.0.0, through2@^2.0.2:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
@@ -6650,7 +7205,7 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
-through@^2.3.6:
+"through@>=2.2.7 <3", through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
@@ -6725,6 +7280,16 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
+trim-newlines@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+ integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+ integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+
trim-right@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
@@ -6786,10 +7351,10 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@^3.4.3:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.3.tgz#0eb320e4ace9b10eadf5bc6103286b0f8b7c224f"
- integrity sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==
+typescript@^3.4.5:
+ version "3.4.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99"
+ integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==
ua-parser-js@^0.7.18:
version "0.7.19"
@@ -7256,6 +7821,13 @@ yallist@^3.0.0, yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+yargs-parser@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+ integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
+ dependencies:
+ camelcase "^4.1.0"
+
yargs-parser@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"