├── .eslintignore
├── .eslintrc
├── .github
└── workflows
│ └── format_eslint.yml
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── index.d.ts
├── index.js
├── package.json
├── src
└── MapViewDirections.js
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | **/node_modules/**
2 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | parser: babel-eslint
2 | parserOptions:
3 | sourceType: "module"
4 | ecmaVersion: 6
5 | ecmaFeatures:
6 | jsx: true
7 |
8 | env:
9 | react-native/react-native: true
10 |
11 | globals:
12 | __DEV__: true
13 | __PROD__: true
14 | React: false
15 |
16 | extends:
17 | - eslint:recommended
18 | - plugin:react/recommended
19 |
20 | rules:
21 | indent:
22 | - error
23 | - tab
24 | comma-dangle:
25 | - error
26 | - always-multiline
27 | semi: 2
28 | no-use-before-define: 2
29 | no-useless-constructor: 2
30 | react/no-array-index-key: 2
31 | react/no-deprecated: 2
32 | react/no-did-mount-set-state: 2
33 | react/no-did-update-set-state: 2
34 | react/no-direct-mutation-state: 2
35 | react/no-find-dom-node: 2
36 | react/no-is-mounted: 2
37 | react/no-multi-comp: 2
38 | react/no-redundant-should-component-update: 2
39 | react/no-string-refs: 2
40 | react/no-unused-prop-types: 2
41 | react/jsx-closing-bracket-location: 2
42 | react/jsx-closing-tag-location: 2
43 | react/jsx-indent:
44 | - error
45 | - tab
46 | react/jsx-indent-props:
47 | - error
48 | - tab
49 | react/jsx-key: 2
50 | react/jsx-no-bind: 2
51 | react/jsx-no-comment-textnodes: 2
52 | react/jsx-no-duplicate-props: 2
53 | react/jsx-no-undef: 2
54 | react/jsx-one-expression-per-line: 2
55 | react/jsx-tag-spacing: 2
56 | react/prefer-es6-class: 2
57 | react/prefer-stateless-function: 1
58 | react/prop-types: 2
59 | react/require-render-return: 2
60 | react/self-closing-comp:
61 | - error
62 | - component: true
63 | react/style-prop-object: 2
64 | react-native/no-unused-styles: 2
65 | react-native/no-inline-styles: 2
66 | react-native/no-color-literals: 1
67 |
68 | plugins:
69 | - react
70 | - react-native
--------------------------------------------------------------------------------
/.github/workflows/format_eslint.yml:
--------------------------------------------------------------------------------
1 | name: Format (eslint)
2 |
3 | on:
4 | pull_request:
5 | paths:
6 | - '**.js'
7 |
8 | jobs:
9 | eslint:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v1
13 |
14 | - name: Install
15 | run: yarn --non-interactive --silent --ignore-scripts --production=false install
16 | env:
17 | CI: true
18 |
19 | - name: Run prettier
20 | run: yarn lint --fix
21 |
22 | - uses: stefanzweifel/git-auto-commit-action@v2.1.0
23 | with:
24 | commit_message: "🚨 Fix Lint Errors"
25 | branch: ${{ github.head_ref }}
26 | env:
27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 | project.xcworkspace
24 |
25 | # Android/IntelliJ
26 | #
27 | build/
28 | .idea
29 | .gradle
30 | local.properties
31 | *.iml
32 |
33 | # node.js
34 | #
35 | node_modules/
36 | npm-debug.log
37 | yarn-error.log
38 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .github
2 | .eslintignore
3 | .eslintrc
4 | v2.md
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # `react-native-maps-directions` Changelog
2 |
3 | ## 1.9.0 – 2022-07-27
4 |
5 | - Fix: `timePrecision` prop type to `MapViewDirectionsTimePrecision`
6 | - Add `legs` in `onReady` callback;
7 | - Add types in `onReady`return;
8 | - Compatibility with `react-native-maps` 1.0.0
9 |
10 | ## 1.8.0 - 2020-04-14
11 |
12 | - Add `waypointOrder` in `onReady` callback (#139)
13 |
14 | ## 1.7.6 - 2020-03-17
15 |
16 | - Improve error handling in case a request to the Google Maps Directions API fails (#132)
17 | - Improve error handling when no `apikey` prop is given
18 |
19 | ## 1.7.5 - 2020-03-17
20 |
21 | - Fix “Cannot set property 'map' of undefined” error (#130 #131 #132)
22 |
23 | ## 1.7.4 - 2020-03-14
24 |
25 | - Add `channel` and `timePrecision` props to reduce the cost of Google maps (#129, thanks @rohitbansa)
26 |
27 | ## 1.7.3 - 2019-10-02
28 |
29 | - Add `precision` prop to allow one to choose between the ”Steps Polyline” and “Overview Polyline”
30 |
31 | ## 1.7.2 - 2019-10-02
32 |
33 | - Fix bug where duration was wrongfully calculated when using waypoints
34 | - Fix bug where not all legs of a route were drawn
35 |
36 | ## 1.7.1 - 2019-10-02
37 |
38 | - Fall back to standard duration in case “duration with traffic” is not given
39 | - Use “Steps polyline”, instead of “Overview polyline” (regression fix)
40 | - Update dependencies
41 |
42 | ## 1.7.0 - 2019-05-17
43 |
44 | - Add `optimizeWaypoints` prop to allow use of waypoints optimization.
45 | - Add `region` prop.
46 | - Return “Duration with traffic” as `duration`
47 | - Return `fare` in `onReady`
48 |
49 |
50 | ## 1.6.0 - 2018-03-09
51 |
52 | - Add `directionsServiceBaseUrl` prop to allow customisation of service to use.
53 |
54 | ## 1.5.0 - 2018-02-23
55 |
56 | - Add support for `resetOnChange` prop to prevent glitches whenn recalculating (#21)
57 | - Add `onStart` callback prop to know when routing starts
58 |
59 | ## 1.4.1 - 2018-01-31
60 |
61 | - Fix a bug where new origin/destination objects (with same values) trigger an endless loop (#13)
62 |
63 | ## 1.4.0 - 2018-01-07
64 |
65 | - Add support for waypoints (#10)
66 |
67 | ## 1.3.0 - 2017-12-21
68 |
69 | - Fix “Unmouting while a fetch is still in progress yields a warning” #5
70 |
71 | ## 1.2.0 - 2017-12-12
72 |
73 | - Add `language` and `mode` props
74 |
75 | ## 1.1.0 - 2017-11-23
76 |
77 | - Add `onReady` and `onError` events/callbacks
78 |
79 | ## 1.0.0 - 2017-11-19
80 |
81 | - initial release
82 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017 Bram(us) Van Damme - http://www.bram.us/
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # `react-native-maps-directions`
2 |
3 | [](https://www.npmjs.com/package/react-native-maps-directions)
4 | [](https://www.npmtrends.com/react-native-maps-directions)
5 | [](https://github.com/bramus/react-native-maps-directions/graphs/contributors)
6 | [](https://github.com/bramus/react-native-maps-directions)
7 | [](LICENSE.md)
8 |
9 | Directions component for [`react-native-maps`](https://github.com/airbnb/react-native-maps/) – Draw a route between two coordinates, powered by the Google Maps Directions API
10 |
11 | 
12 |
13 | ## Installation
14 |
15 | Install `react-native-maps-directions` as a dependency using either
16 |
17 | - [Node's `npm`](https://nodejs.org/en/download/)
18 |
19 | ```
20 | npm install react-native-maps-directions
21 | ```
22 |
23 | - [Yarn](https://yarnpkg.com/en/docs/install)
24 |
25 | ```
26 | yarn add react-native-maps-directions
27 | ```
28 |
29 | ## Basic Usage
30 |
31 | Import `MapViewDirections` and render it as a child of a `MapView` component. The mandatory `MapViewDirections` props are:
32 |
33 | - `origin`: The origin location to start routing from
34 | - `destination`: The destination location to start routing to
35 | - `apikey`: Your Google Maps Directions API Key _(request one [here](https://developers.google.com/maps/documentation/directions/get-api-key); if you're using an existing Google Maps API Key make sure you've enabled the Google Maps Directions API for that key using the [Google API Console](https://console.developers.google.com/apis/))_.
36 |
37 | ```js
38 | import MapViewDirections from 'react-native-maps-directions';
39 |
40 | const origin = {latitude: 37.3318456, longitude: -122.0296002};
41 | const destination = {latitude: 37.771707, longitude: -122.4053769};
42 | const GOOGLE_MAPS_APIKEY = '…';
43 |
44 |
45 |
50 |
51 | ```
52 |
53 | Once the directions in between `destination` and `origin` has been fetched, a `MapView.Polyline` between the two will be drawn. Whenever one of both changes, new directions will be fetched and rendered.
54 |
55 | ## Component API
56 |
57 | ### Props
58 |
59 | | Prop | Type | Default | Note
60 | |---|---|---|---|
61 | | `origin` | `LatLng` or `String` | | The origin location to start routing from.
62 | | `destination` | `LatLng` or `String` | | The destination location to start routing to.
63 | | `apikey` | `String` | | Your Google Maps API Key _(request one [here](https://developers.google.com/maps/documentation/directions/get-api-key); if you're using an existing Google Maps API Key make sure you've enabled the Google Maps Directions API for that key using the [Google API Console](https://console.developers.google.com/apis/) by hitting the “Enable APIs and Services“ button)_.
64 | | `waypoints` | [`LatLng` or `String`] | `[]` | Array of waypoints to use between origin and destination.
65 | | `language` | `String` | `"en"` | The language to use when calculating directions. See [here](https://developers.google.com/maps/documentation/javascript/localization) for more info.
66 | | `mode` | `String` | `"DRIVING"` | Which transportation mode to use when calculating directions. Allowed values are `"DRIVING"`, `"BICYCLING"`, `"WALKING"`, and `"TRANSIT"`. _(See [here](https://developers.google.com/maps/documentation/javascript/examples/directions-travel-modes) for more info)_.
67 | | `resetOnChange` | `boolean` | `true` | Tweak if the rendered `MapView.Polyline` should reset or not when calculating the route between `origin` and `destionation`. Set to `false` if you see the directions line glitching.
68 | | `optimizeWaypoints` | `boolean` | `false` | Set it to true if you would like Google Maps to re-order all the waypoints to optimize the route for the fastest route. Please be aware that if this option is enabled, you will be billed at a higher rate by Google as stated [here](https://developers.google.com/maps/documentation/javascript/directions#Waypoints).
69 | | `splitWaypoints` | `boolean` | `false` | Directions API has a [limit](https://developers.google.com/maps/documentation/directions/usage-and-billing#directions-advanced) of 10 or 25 (depends on the billing plan) waypoints per route. When exceeding this limit you will be billed at a higher reate by Google. Set this to `true` if you would like to automatically split waypoints into multiple routes, thus bypassing this waypoints limit.
70 | | `directionsServiceBaseUrl` | `string` | _(Google's)_ | Base URL of the Directions Service (API) you are using. By default the Google Directions API is used (`"https://maps.googleapis.com/maps/api/directions/json"`). Usually you won't need to change this.
71 | | `region` | `String` | | If you are using strings for **origin** or **destination**, sometimes you will get an incorrect route because Google Maps API needs the region where this places belong to. See [here](https://developers.google.com/maps/documentation/javascript/localization#Region) for more info.
72 | | `precision` | `String` | `"low"` | The precision level of detail of the drawn polyline. Allowed values are "high", and "low". Setting to "low" will yield a polyline that is an approximate (smoothed) path of the resulting directions. Setting to "high" may cause a hit in performance in case a complex route is returned.
73 | | `timePrecision` | `String` | `"none"` | The timePrecision to get Realtime traffic info. Allowed values are "none", and "now". Defaults to "none".
74 | | `channel` | `String` | `null` | If you include the channel parameter in your requests, you can generate a Successful Requests report that shows a breakdown of your application's API requests across different applications that use the same client ID (such as externally facing access vs. internally facing access).
75 | #### More props
76 |
77 | Since the result rendered on screen is a `MapView.Polyline` component, all [`MapView.Polyline` props](https://github.com/airbnb/react-native-maps/blob/master/docs/polyline.md#props) – except for `coordinates` – are also accepted.
78 |
79 | ```js
80 |
81 |
88 |
89 | ```
90 |
91 | #### An extra note on `origin` and `destination`
92 |
93 | The values for the `origin` and `destination` props can take several forms. They can either be:
94 |
95 | - Coordinates in the form of an object with `latitude` and `longitude` keys
96 | - Coordinates in the form of a string with `latitude` and `longitude` values separated by a comma
97 | - Strings representing an address
98 | - Strings representing a location
99 | - Strings containing a Place Id from the Google Maps Place API prefixed with `place_id:`
100 |
101 | All examples below have the same `origin` location, represented in the formats mentioned above:
102 |
103 | ```js
104 |
105 |
106 |
107 |
108 |
109 | ```
110 |
111 | Note: The `origin` and `destination` props don't need to use the same representation, you may mix them.
112 |
113 | Tip: Don't forget to tweak the `language` prop when using localized location names.
114 |
115 | ### Events/Callbacks
116 |
117 | | Event Name | Returns | Notes
118 | |---|---|---|
119 | | `onStart` | `{ origin, destination, waypoints: [] }` | Callback that is called when the routing has started.
120 | | `onReady` | `{ distance: Number, duration: Number, coordinates: [], fare: Object, waypointOrder: [[]] }` | Callback that is called when the routing has succesfully finished. Note: distance returned in kilometers and duration in minutes.
121 | | `onError` | `errorMessage` | Callback that is called in case the routing has failed.
122 |
123 | ## Extended Example
124 |
125 | This example will draw a route between AirBnB's Office and Apple's HQ
126 |
127 | ```js
128 | import React, { Component } from 'react';
129 | import { Dimensions, StyleSheet } from 'react-native';
130 | import MapView from 'react-native-maps';
131 | import MapViewDirections from 'react-native-maps-directions';
132 |
133 | const { width, height } = Dimensions.get('window');
134 | const ASPECT_RATIO = width / height;
135 | const LATITUDE = 37.771707;
136 | const LONGITUDE = -122.4053769;
137 | const LATITUDE_DELTA = 0.0922;
138 | const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO;
139 |
140 | const GOOGLE_MAPS_APIKEY = '…';
141 |
142 | class Example extends Component {
143 |
144 | constructor(props) {
145 | super(props);
146 |
147 | // AirBnB's Office, and Apple Park
148 | this.state = {
149 | coordinates: [
150 | {
151 | latitude: 37.3317876,
152 | longitude: -122.0054812,
153 | },
154 | {
155 | latitude: 37.771707,
156 | longitude: -122.4053769,
157 | },
158 | ],
159 | };
160 |
161 | this.mapView = null;
162 | }
163 |
164 | onMapPress = (e) => {
165 | this.setState({
166 | coordinates: [
167 | ...this.state.coordinates,
168 | e.nativeEvent.coordinate,
169 | ],
170 | });
171 | }
172 |
173 | render() {
174 | return (
175 | this.mapView = c}
184 | onPress={this.onMapPress}
185 | >
186 | {this.state.coordinates.map((coordinate, index) =>
187 |
188 | )}
189 | {(this.state.coordinates.length >= 2) && (
190 | 2) ? this.state.coordinates.slice(1, -1): undefined}
193 | destination={this.state.coordinates[this.state.coordinates.length-1]}
194 | apikey={GOOGLE_MAPS_APIKEY}
195 | strokeWidth={3}
196 | strokeColor="hotpink"
197 | optimizeWaypoints={true}
198 | onStart={(params) => {
199 | console.log(`Started routing between "${params.origin}" and "${params.destination}"`);
200 | }}
201 | onReady={result => {
202 | console.log(`Distance: ${result.distance} km`)
203 | console.log(`Duration: ${result.duration} min.`)
204 |
205 | this.mapView.fitToCoordinates(result.coordinates, {
206 | edgePadding: {
207 | right: (width / 20),
208 | bottom: (height / 20),
209 | left: (width / 20),
210 | top: (height / 20),
211 | }
212 | });
213 | }}
214 | onError={(errorMessage) => {
215 | // console.log('GOT AN ERROR');
216 | }}
217 | />
218 | )}
219 |
220 | );
221 | }
222 | }
223 |
224 | export default Example;
225 | ```
226 |
227 | ## Example App
228 |
229 | An example app can be found in a separate repo, located at [https://github.com/bramus/react-native-maps-directions-example](https://github.com/bramus/react-native-maps-directions-example).
230 |
231 | ## Changelog
232 |
233 | Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
234 |
235 | ## Credits
236 |
237 | - Bram(us) Van Damme ([https://www.bram.us/](https://www.bram.us/))
238 | - [All Contributors](../../contributors)
239 |
240 | This code is inspired upon the article [React Native Maps with Google Directions Api](https://medium.com/@ali_oguzhan/react-native-maps-with-google-directions-api-bc716ed7a366) by [Ali Oğuzhan Yıldız](https://github.com/alioguzhan).
241 |
242 | ## License
243 |
244 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
245 |
--------------------------------------------------------------------------------
/index.d.ts:
--------------------------------------------------------------------------------
1 | declare module "react-native-maps-directions" {
2 | // Type definitions for react-native-maps-directions 1.6
3 | // Project: https://github.com/bramus/react-native-maps-directions
4 | // Definitions by: Ali Oguzhan Yildiz
5 | // Definitions by: Chris Shaffer (methodbox)
6 | // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
7 | // TypeScript Version: 3.3
8 |
9 | import * as React from "react";
10 |
11 | export type MapDirectionsLegs =[
12 | {
13 | distance: {
14 | text: string,
15 | value: number
16 | },
17 | duration: {
18 | text: string,
19 | value: number
20 | },
21 | end_address: string,
22 | end_location: {
23 | lat: number,
24 | lng: number
25 | },
26 | start_address: string,
27 | start_location: {
28 | lat: number,
29 | lng: number
30 | },
31 | steps: [{
32 | distance: {
33 | text: string,
34 | value: number
35 | },
36 | duration: {
37 | text: string,
38 | value: number
39 | },
40 | end_location: {
41 | lat: number,
42 | lng: number
43 | },
44 | start_location: {
45 | lat: number,
46 | lng: number
47 | },
48 | html_instructions: string,
49 | polyline: {
50 | points: string
51 | },
52 | travel_mode: string,
53 | maneuver: string | undefined
54 | }],
55 | traffic_speed_entry: [],
56 | via_waypoint: [],
57 | }]
58 |
59 | export type MapDirectionsResponse = {
60 | coordinates: [
61 | {
62 | latitude: number,
63 | longitude: number
64 | }],
65 | distance: number,
66 | duration: number,
67 | fares: [],
68 | legs: MapDirectionsLegs,
69 | waypointOrder: [[number]]
70 | }
71 |
72 |
73 |
74 |
75 | export type MapViewDirectionsOrigin =
76 | | string
77 | | {
78 | latitude: number;
79 | longitude: number;
80 | };
81 |
82 | export type MapViewDirectionsWaypoints =
83 | | string
84 | | {
85 | latitude: number;
86 | longitude: number;
87 | };
88 |
89 | export type MapViewDirectionsDestination =
90 | | string
91 | | {
92 | latitude: number;
93 | longitude: number;
94 | };
95 |
96 | export type MapViewDirectionsMode =
97 | | "DRIVING"
98 | | "BICYCLING"
99 | | "TRANSIT"
100 | | "WALKING";
101 |
102 | export type MapViewDirectionsPrecision =
103 | | "high"
104 | | "low";
105 |
106 | export type MapViewDirectionsTimePrecision =
107 | | "now"
108 | | "none";
109 |
110 | export interface MapViewDirectionsProps {
111 | /**
112 | * The origin location to start routing from.
113 | */
114 | origin?: MapViewDirectionsOrigin;
115 | /**
116 | * Array of waypoints to use between origin and destination.
117 | */
118 | waypoints?: MapViewDirectionsWaypoints[];
119 | /**
120 | * The destination location to start routing to.
121 | */
122 | destination?: MapViewDirectionsDestination;
123 | /**
124 | * Your Google Maps API Key
125 | */
126 | apikey: string;
127 | /**
128 | * Callback that is called when the routing has started.
129 | */
130 | onStart?: (...args: any[]) => any;
131 | /**
132 | * Callback that is called when the routing has succesfully finished.
133 | */
134 | onReady?: (...args: MapDirectionsResponse[]) => any;
135 | /**
136 | * Callback that is called in case the routing has failed.
137 | */
138 | onError?: (...args: any[]) => any;
139 | /**
140 | * Which transportation mode to use when calculating directions.
141 | * Allowed values are "DRIVING", "BICYCLING", "WALKING", and "TRANSIT".
142 | */
143 | mode?: MapViewDirectionsMode;
144 | /**
145 | * The precision to draw the polyline with.
146 | * Allowed values are "high", and "low".
147 | * Defaults to "low"
148 | */
149 | precision?: MapViewDirectionsPrecision;
150 | /**
151 | * The timePrecision to get Realtime traffic info.
152 | * Allowed values are "none", and "now".
153 | * Defaults to "none"
154 | */
155 | timePrecision?: MapViewDirectionsTimePrecision;
156 | /**
157 | * If you include the channel parameter in your requests,
158 | * you can generate a Successful Requests report that shows a breakdown
159 | * of your application's API requests across different applications that
160 | * use the same client ID (such as externally facing access vs. internally
161 | * facing access).
162 | */
163 | channel?: string;
164 | /**
165 | * The language to use when calculating directions.
166 | */
167 | language?: string;
168 | /**
169 | * Tweak if the rendered MapView. Polyline should reset or not
170 | * when calculating the route between origin and destionation.
171 | * Set to false if you see the directions line glitching.
172 | */
173 | resetOnChange?: boolean;
174 | /**
175 | * Set it to true if you would like Google Maps to re-order all the
176 | * waypoints to optimize the route for the fastest route.
177 | * Please be aware that if this option is enabled,
178 | * you will be billed for a higher rate by Google
179 | */
180 | optimizeWaypoints?: boolean;
181 | /**
182 | * Directions API has a limit of 10 or 25 (depends on the billing plan)
183 | * waypoints per route. So waypoints array size is limited to those numbers.
184 | * Set this to true if you would like to automatically split waypoints to
185 | * multiple routes and by that avoid waypoints limit.
186 | */
187 | splitWaypoints?: boolean;
188 | /**
189 | * Base URL of the Directions Service (API) you are using.
190 | * By default the Google Directions API is used
191 | * ("https://maps.googleapis.com/maps/api/directions/json").
192 | * Usually you won't need to change this.
193 | */
194 | directionsServiceBaseUrl?: string;
195 | /**
196 | * If you are using strings for origin or destination,
197 | * sometimes you will get an incorrect route because
198 | * Google Maps API needs the region where this places belong to.
199 | */
200 | region?: string;
201 | /**
202 | * @number
203 | * The stroke width to use for the path - the line displayed
204 | * by polyline between two navigation points.
205 | * Default: 1
206 | */
207 | strokeWidth?: number;
208 | /**
209 | * @string
210 | * The stroke color to use for the path.
211 | * Default: "#000"
212 | */
213 | strokeColor?: string;
214 | /**
215 | * @Array
216 | * The stroke colors to use for the path (iOS only).
217 | * Must be the same length as coordinates.
218 | * Default: null
219 | */
220 | strokeColors?: Array;
221 | /**
222 | * @string
223 | * The line cap style to apply to the open ends of the path.
224 | * Possible values are butt, round or square.
225 | * Note: lineCap is not yet supported for GoogleMaps provider on iOS.
226 | * Default: "round"
227 | */
228 | lineCap?: string;
229 | /**
230 | * @string
231 | * The line join style to apply to corners of the path.
232 | * Possible values are miter, round or bevel.
233 | * Default: "round"
234 | */
235 | lineJoin?: string;
236 | /**
237 | * @number
238 | * The limiting value that helps avoid spikes at junctions
239 | * between connected line segments. The miter limit helps you avoid
240 | * spikes in paths that use the miter lineJoin style. If the ratio of
241 | * the miter length—that is, the diagonal length of the miter join—to
242 | * the line thickness exceeds the miter limit, the joint is converted
243 | * to a bevel join. The default miter limit is 10, which results in the
244 | * conversion of miters whose angle at the joint is less than 11 degrees.
245 | */
246 | miterLimit?: number;
247 | /**
248 | * @boolean
249 | * Boolean to indicate whether to draw each segment of the line as a geodesic
250 | * as opposed to straight lines on the Mercator projection. A geodesic is the
251 | * shortest path between two points on the Earth's surface.
252 | * The geodesic curve is constructed assuming the Earth is a sphere.
253 | */
254 | geodesic?: boolean;
255 | /**
256 | * @number
257 | * (iOS only) The offset (in points) at which to start drawing the
258 | * dash pattern. Use this property to start drawing a dashed line
259 | * partway through a segment or gap. For example, a phase value of 6 for
260 | * the patter 5-2-3-2 would cause drawing to begin in the middle of the first gap.
261 | * Default: 0
262 | */
263 | lineDashPhase?: number;
264 | /**
265 | * @Array
266 | * An array of numbers specifying the dash pattern to use for the path.
267 | * The array contains one or more numbers that indicate the lengths (measured in points)
268 | * of the line segments and gaps in the pattern. The values in the array alternate,
269 | * starting with the first line segment length, followed by the first gap length,
270 | * followed by the second line segment length, and so on.
271 | * Default: null
272 | */
273 | lineDashPattern?: Array;
274 | /**
275 | * @boolean
276 | * Boolean to allow a polyline to be tappable and use the onPress function.
277 | */
278 | tappable?: boolean;
279 | }
280 |
281 | export default class MapViewDirections extends React.Component<
282 | MapViewDirectionsProps,
283 | any
284 | > {
285 | render(): JSX.Element;
286 | }
287 | }
288 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | import MapViewDirections from './src/MapViewDirections';
2 |
3 | export default MapViewDirections;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-maps-directions",
3 | "version": "1.9.0",
4 | "description": "Directions Component for react-native-maps",
5 | "main": "index.js",
6 | "scripts": {
7 | "lint": "eslint .",
8 | "lint:watch": "esw --watch"
9 | },
10 | "author": {
11 | "name": "Bramus!",
12 | "email": "bramus@bram.us",
13 | "url": "https://www.bram.us/"
14 | },
15 | "repository": "https://github.com/bramus/react-native-maps-directions",
16 | "keywords": [
17 | "react-native",
18 | "react-native-component",
19 | "react-native-maps",
20 | "directions",
21 | "google-maps",
22 | "ios",
23 | "android"
24 | ],
25 | "license": "MIT",
26 | "bugs": {
27 | "url": "https://github.com/bramus/react-native-maps-directions/issues"
28 | },
29 | "homepage": "https://github.com/bramus/react-native-maps-directions",
30 | "peerDependencies": {
31 | "react": "*",
32 | "react-native": "*",
33 | "react-native-maps": ">=1.0.0"
34 | },
35 | "private": false,
36 | "dependencies": {
37 | "lodash.isequal": "^4.5.0",
38 | "prop-types": "^15.6.0"
39 | },
40 | "devDependencies": {
41 | "babel-eslint": "^8.0.2",
42 | "eslint": "^4.11.0",
43 | "eslint-plugin-react": "^7.5.1",
44 | "eslint-plugin-react-native": "^3.2.0"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/MapViewDirections.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import PropTypes from 'prop-types';
3 | import { Polyline } from 'react-native-maps';
4 | import isEqual from 'lodash.isequal';
5 |
6 | const WAYPOINT_LIMIT = 10;
7 |
8 | class MapViewDirections extends Component {
9 |
10 | constructor(props) {
11 | super(props);
12 |
13 | this.state = {
14 | coordinates: null,
15 | distance: null,
16 | duration: null,
17 | };
18 | }
19 |
20 | componentDidMount() {
21 | this.fetchAndRenderRoute(this.props);
22 | }
23 |
24 | componentDidUpdate(prevProps) {
25 | if (!isEqual(prevProps.origin, this.props.origin) || !isEqual(prevProps.destination, this.props.destination) || !isEqual(prevProps.waypoints, this.props.waypoints) || !isEqual(prevProps.mode, this.props.mode) || !isEqual(prevProps.precision, this.props.precision) || !isEqual(prevProps.splitWaypoints, this.props.splitWaypoints)) {
26 | if (this.props.resetOnChange === false) {
27 | this.fetchAndRenderRoute(this.props);
28 | } else {
29 | this.resetState(() => {
30 | this.fetchAndRenderRoute(this.props);
31 | });
32 | }
33 | }
34 | }
35 |
36 | resetState = (cb = null) => {
37 | this.setState({
38 | coordinates: null,
39 | distance: null,
40 | duration: null,
41 | }, cb);
42 | }
43 |
44 | decode(t) {
45 | let points = [];
46 | for (let step of t) {
47 | let encoded = step.polyline.points;
48 | let index = 0, len = encoded.length;
49 | let lat = 0, lng = 0;
50 | while (index < len) {
51 | let b, shift = 0, result = 0;
52 | do {
53 | b = encoded.charAt(index++).charCodeAt(0) - 63;
54 | result |= (b & 0x1f) << shift;
55 | shift += 5;
56 | } while (b >= 0x20);
57 |
58 | let dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
59 | lat += dlat;
60 | shift = 0;
61 | result = 0;
62 | do {
63 | b = encoded.charAt(index++).charCodeAt(0) - 63;
64 | result |= (b & 0x1f) << shift;
65 | shift += 5;
66 | } while (b >= 0x20);
67 | let dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
68 | lng += dlng;
69 |
70 | points.push({ latitude: (lat / 1E5), longitude: (lng / 1E5) });
71 | }
72 | }
73 | return points;
74 | }
75 |
76 | fetchAndRenderRoute = (props) => {
77 |
78 | let {
79 | origin: initialOrigin,
80 | destination: initialDestination,
81 | waypoints: initialWaypoints = [],
82 | apikey,
83 | onStart,
84 | onReady,
85 | onError,
86 | mode = 'DRIVING',
87 | language = 'en',
88 | optimizeWaypoints,
89 | splitWaypoints,
90 | directionsServiceBaseUrl = 'https://maps.googleapis.com/maps/api/directions/json',
91 | region,
92 | precision = 'low',
93 | timePrecision = 'none',
94 | channel,
95 | } = props;
96 |
97 | if (!apikey) {
98 | console.warn(`MapViewDirections Error: Missing API Key`); // eslint-disable-line no-console
99 | return;
100 | }
101 |
102 | if (!initialOrigin || !initialDestination) {
103 | return;
104 | }
105 |
106 | const timePrecisionString = timePrecision==='none' ? '' : timePrecision;
107 |
108 | // Routes array which we'll be filling.
109 | // We'll perform a Directions API Request for reach route
110 | const routes = [];
111 |
112 | // We need to split the waypoints in chunks, in order to not exceede the max waypoint limit
113 | // ~> Chunk up the waypoints, yielding multiple routes
114 | if (splitWaypoints && initialWaypoints && initialWaypoints.length > WAYPOINT_LIMIT) {
115 | // Split up waypoints in chunks with chunksize WAYPOINT_LIMIT
116 | const chunckedWaypoints = initialWaypoints.reduce((accumulator, waypoint, index) => {
117 | const numChunk = Math.floor(index / WAYPOINT_LIMIT);
118 | accumulator[numChunk] = [].concat((accumulator[numChunk] || []), waypoint);
119 | return accumulator;
120 | }, []);
121 |
122 | // Create routes for each chunk, using:
123 | // - Endpoints of previous chunks as startpoints for the route (except for the first chunk, which uses initialOrigin)
124 | // - Startpoints of next chunks as endpoints for the route (except for the last chunk, which uses initialDestination)
125 | for (let i = 0; i < chunckedWaypoints.length; i++) {
126 | routes.push({
127 | waypoints: chunckedWaypoints[i],
128 | origin: (i === 0) ? initialOrigin : chunckedWaypoints[i-1][chunckedWaypoints[i-1].length - 1],
129 | destination: (i === chunckedWaypoints.length - 1) ? initialDestination : chunckedWaypoints[i+1][0],
130 | });
131 | }
132 | }
133 |
134 | // No splitting of the waypoints is requested/needed.
135 | // ~> Use one single route
136 | else {
137 | routes.push({
138 | waypoints: initialWaypoints,
139 | origin: initialOrigin,
140 | destination: initialDestination,
141 | });
142 | }
143 |
144 | // Perform a Directions API Request for each route
145 | Promise.all(routes.map((route, index) => {
146 | let {
147 | origin,
148 | destination,
149 | waypoints,
150 | } = route;
151 |
152 | if (origin.latitude && origin.longitude) {
153 | origin = `${origin.latitude},${origin.longitude}`;
154 | }
155 |
156 | if (destination.latitude && destination.longitude) {
157 | destination = `${destination.latitude},${destination.longitude}`;
158 | }
159 |
160 | waypoints = waypoints
161 | .map(waypoint => (waypoint.latitude && waypoint.longitude) ? `${waypoint.latitude},${waypoint.longitude}` : waypoint)
162 | .join('|');
163 |
164 | if (optimizeWaypoints) {
165 | waypoints = `optimize:true|${waypoints}`;
166 | }
167 |
168 | if (index === 0) {
169 | onStart && onStart({
170 | origin,
171 | destination,
172 | waypoints: initialWaypoints,
173 | });
174 | }
175 |
176 | return (
177 | this.fetchRoute(directionsServiceBaseUrl, origin, waypoints, destination, apikey, mode, language, region, precision, timePrecisionString, channel)
178 | .then(result => {
179 | return result;
180 | })
181 | .catch(errorMessage => {
182 | return Promise.reject(errorMessage);
183 | })
184 | );
185 | })).then(results => {
186 | // Combine all Directions API Request results into one
187 | const result = results.reduce((acc, { distance, duration, coordinates, fare, legs, waypointOrder }) => {
188 | acc.coordinates = [
189 | ...acc.coordinates,
190 | ...coordinates,
191 | ];
192 | acc.distance += distance;
193 | acc.duration += duration;
194 | acc.fares = [
195 | ...acc.fares,
196 | fare,
197 | ];
198 | acc.legs = legs;
199 | acc.waypointOrder = [
200 | ...acc.waypointOrder,
201 | waypointOrder,
202 | ];
203 |
204 | return acc;
205 | }, {
206 | coordinates: [],
207 | distance: 0,
208 | duration: 0,
209 | fares: [],
210 | legs: [],
211 | waypointOrder: [],
212 | });
213 |
214 | // Plot it out and call the onReady callback
215 | this.setState({
216 | coordinates: result.coordinates,
217 | }, function() {
218 | if (onReady) {
219 | onReady(result);
220 | }
221 | });
222 | })
223 | .catch(errorMessage => {
224 | this.resetState();
225 | console.warn(`MapViewDirections Error: ${errorMessage}`); // eslint-disable-line no-console
226 | onError && onError(errorMessage);
227 | });
228 | }
229 |
230 | fetchRoute(directionsServiceBaseUrl, origin, waypoints, destination, apikey, mode, language, region, precision, timePrecision, channel) {
231 |
232 | // Define the URL to call. Only add default parameters to the URL if it's a string.
233 | let url = directionsServiceBaseUrl;
234 | if (typeof (directionsServiceBaseUrl) === 'string') {
235 | url += `?origin=${origin}&waypoints=${waypoints}&destination=${destination}&key=${apikey}&mode=${mode.toLowerCase()}&language=${language}®ion=${region}`;
236 | if(timePrecision){
237 | url+=`&departure_time=${timePrecision}`;
238 | }
239 | if(channel){
240 | url+=`&channel=${channel}`;
241 | }
242 | }
243 |
244 | return fetch(url)
245 | .then(response => response.json())
246 | .then(json => {
247 |
248 | if (json.status !== 'OK') {
249 | const errorMessage = json.error_message || json.status || 'Unknown error';
250 | return Promise.reject(errorMessage);
251 | }
252 |
253 | if (json.routes.length) {
254 |
255 | const route = json.routes[0];
256 |
257 | return Promise.resolve({
258 | distance: route.legs.reduce((carry, curr) => {
259 | return carry + curr.distance.value;
260 | }, 0) / 1000,
261 | duration: route.legs.reduce((carry, curr) => {
262 | return carry + (curr.duration_in_traffic ? curr.duration_in_traffic.value : curr.duration.value);
263 | }, 0) / 60,
264 | coordinates: (
265 | (precision === 'low') ?
266 | this.decode([{polyline: route.overview_polyline}]) :
267 | route.legs.reduce((carry, curr) => {
268 | return [
269 | ...carry,
270 | ...this.decode(curr.steps),
271 | ];
272 | }, [])
273 | ),
274 | fare: route.fare,
275 | waypointOrder: route.waypoint_order,
276 | legs: route.legs,
277 | });
278 |
279 | } else {
280 | return Promise.reject();
281 | }
282 | })
283 | .catch(err => {
284 | return Promise.reject(`Error on GMAPS route request: ${err}`);
285 | });
286 | }
287 |
288 | render() {
289 | const { coordinates } = this.state;
290 |
291 | if (!coordinates) {
292 | return null;
293 | }
294 |
295 | const {
296 | origin, // eslint-disable-line no-unused-vars
297 | waypoints, // eslint-disable-line no-unused-vars
298 | splitWaypoints, // eslint-disable-line no-unused-vars
299 | destination, // eslint-disable-line no-unused-vars
300 | apikey, // eslint-disable-line no-unused-vars
301 | onReady, // eslint-disable-line no-unused-vars
302 | onError, // eslint-disable-line no-unused-vars
303 | mode, // eslint-disable-line no-unused-vars
304 | language, // eslint-disable-line no-unused-vars
305 | region, // eslint-disable-line no-unused-vars
306 | precision, // eslint-disable-line no-unused-vars
307 | ...props
308 | } = this.props;
309 |
310 | return (
311 |
312 | );
313 | }
314 |
315 | }
316 |
317 | MapViewDirections.propTypes = {
318 | origin: PropTypes.oneOfType([
319 | PropTypes.string,
320 | PropTypes.shape({
321 | latitude: PropTypes.number.isRequired,
322 | longitude: PropTypes.number.isRequired,
323 | }),
324 | ]),
325 | waypoints: PropTypes.arrayOf(
326 | PropTypes.oneOfType([
327 | PropTypes.string,
328 | PropTypes.shape({
329 | latitude: PropTypes.number.isRequired,
330 | longitude: PropTypes.number.isRequired,
331 | }),
332 | ]),
333 | ),
334 | destination: PropTypes.oneOfType([
335 | PropTypes.string,
336 | PropTypes.shape({
337 | latitude: PropTypes.number.isRequired,
338 | longitude: PropTypes.number.isRequired,
339 | }),
340 | ]),
341 | apikey: PropTypes.string.isRequired,
342 | onStart: PropTypes.func,
343 | onReady: PropTypes.func,
344 | onError: PropTypes.func,
345 | mode: PropTypes.oneOf(['DRIVING', 'BICYCLING', 'TRANSIT', 'WALKING']),
346 | language: PropTypes.string,
347 | resetOnChange: PropTypes.bool,
348 | optimizeWaypoints: PropTypes.bool,
349 | splitWaypoints: PropTypes.bool,
350 | directionsServiceBaseUrl: PropTypes.string,
351 | region: PropTypes.string,
352 | precision: PropTypes.oneOf(['high', 'low']),
353 | timePrecision: PropTypes.oneOf(['now', 'none']),
354 | channel: PropTypes.string,
355 | };
356 |
357 | export default MapViewDirections;
358 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@7.0.0-beta.32", "@babel/code-frame@^7.0.0-beta.31":
6 | version "7.0.0-beta.32"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz#04f231b8ec70370df830d9926ce0f5add074ec4c"
8 | dependencies:
9 | chalk "^2.0.0"
10 | esutils "^2.0.2"
11 | js-tokens "^3.0.0"
12 |
13 | "@babel/helper-function-name@7.0.0-beta.32":
14 | version "7.0.0-beta.32"
15 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz#6161af4419f1b4e3ed2d28c0c79c160e218be1f3"
16 | dependencies:
17 | "@babel/helper-get-function-arity" "7.0.0-beta.32"
18 | "@babel/template" "7.0.0-beta.32"
19 | "@babel/types" "7.0.0-beta.32"
20 |
21 | "@babel/helper-get-function-arity@7.0.0-beta.32":
22 | version "7.0.0-beta.32"
23 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz#93721a99db3757de575a83bab7c453299abca568"
24 | dependencies:
25 | "@babel/types" "7.0.0-beta.32"
26 |
27 | "@babel/template@7.0.0-beta.32":
28 | version "7.0.0-beta.32"
29 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.32.tgz#e1d9fdbd2a7bcf128f2f920744a67dab18072495"
30 | dependencies:
31 | "@babel/code-frame" "7.0.0-beta.32"
32 | "@babel/types" "7.0.0-beta.32"
33 | babylon "7.0.0-beta.32"
34 | lodash "^4.2.0"
35 |
36 | "@babel/traverse@^7.0.0-beta.31":
37 | version "7.0.0-beta.32"
38 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.32.tgz#b78b754c6e1af3360626183738e4c7a05951bc99"
39 | dependencies:
40 | "@babel/code-frame" "7.0.0-beta.32"
41 | "@babel/helper-function-name" "7.0.0-beta.32"
42 | "@babel/types" "7.0.0-beta.32"
43 | babylon "7.0.0-beta.32"
44 | debug "^3.0.1"
45 | globals "^10.0.0"
46 | invariant "^2.2.0"
47 | lodash "^4.2.0"
48 |
49 | "@babel/types@7.0.0-beta.32", "@babel/types@^7.0.0-beta.31":
50 | version "7.0.0-beta.32"
51 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff"
52 | dependencies:
53 | esutils "^2.0.2"
54 | lodash "^4.2.0"
55 | to-fast-properties "^2.0.0"
56 |
57 | acorn-jsx@^3.0.0:
58 | version "3.0.1"
59 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
60 | dependencies:
61 | acorn "^3.0.4"
62 |
63 | acorn@^3.0.4:
64 | version "3.3.0"
65 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
66 |
67 | acorn@^5.2.1:
68 | version "5.2.1"
69 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
70 |
71 | ajv-keywords@^2.1.0:
72 | version "2.1.1"
73 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
74 |
75 | ajv@^5.2.3, ajv@^5.3.0:
76 | version "5.4.0"
77 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.4.0.tgz#32d1cf08dbc80c432f426f12e10b2511f6b46474"
78 | dependencies:
79 | co "^4.6.0"
80 | fast-deep-equal "^1.0.0"
81 | fast-json-stable-stringify "^2.0.0"
82 | json-schema-traverse "^0.3.0"
83 |
84 | ansi-escapes@^3.0.0:
85 | version "3.0.0"
86 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
87 |
88 | ansi-regex@^2.0.0:
89 | version "2.1.1"
90 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
91 |
92 | ansi-regex@^3.0.0:
93 | version "3.0.0"
94 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
95 |
96 | ansi-styles@^2.2.1:
97 | version "2.2.1"
98 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
99 |
100 | ansi-styles@^3.1.0:
101 | version "3.2.0"
102 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
103 | dependencies:
104 | color-convert "^1.9.0"
105 |
106 | argparse@^1.0.7:
107 | version "1.0.10"
108 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
109 | dependencies:
110 | sprintf-js "~1.0.2"
111 |
112 | array-includes@^3.0.3:
113 | version "3.0.3"
114 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
115 | dependencies:
116 | define-properties "^1.1.2"
117 | es-abstract "^1.7.0"
118 |
119 | array-union@^1.0.1:
120 | version "1.0.2"
121 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
122 | dependencies:
123 | array-uniq "^1.0.1"
124 |
125 | array-uniq@^1.0.1:
126 | version "1.0.3"
127 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
128 |
129 | arrify@^1.0.0:
130 | version "1.0.1"
131 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
132 |
133 | asap@~2.0.3:
134 | version "2.0.6"
135 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
136 |
137 | babel-code-frame@^6.22.0:
138 | version "6.26.0"
139 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
140 | dependencies:
141 | chalk "^1.1.3"
142 | esutils "^2.0.2"
143 | js-tokens "^3.0.2"
144 |
145 | babel-eslint@^8.0.2:
146 | version "8.0.2"
147 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.2.tgz#e44fb9a037d749486071d52d65312f5c20aa7530"
148 | dependencies:
149 | "@babel/code-frame" "^7.0.0-beta.31"
150 | "@babel/traverse" "^7.0.0-beta.31"
151 | "@babel/types" "^7.0.0-beta.31"
152 | babylon "^7.0.0-beta.31"
153 |
154 | babylon@7.0.0-beta.32, babylon@^7.0.0-beta.31:
155 | version "7.0.0-beta.32"
156 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.32.tgz#e9033cb077f64d6895f4125968b37dc0a8c3bc6e"
157 |
158 | balanced-match@^1.0.0:
159 | version "1.0.0"
160 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
161 |
162 | brace-expansion@^1.1.7:
163 | version "1.1.8"
164 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
165 | dependencies:
166 | balanced-match "^1.0.0"
167 | concat-map "0.0.1"
168 |
169 | caller-path@^0.1.0:
170 | version "0.1.0"
171 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
172 | dependencies:
173 | callsites "^0.2.0"
174 |
175 | callsites@^0.2.0:
176 | version "0.2.0"
177 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
178 |
179 | chalk@^1.1.3:
180 | version "1.1.3"
181 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
182 | dependencies:
183 | ansi-styles "^2.2.1"
184 | escape-string-regexp "^1.0.2"
185 | has-ansi "^2.0.0"
186 | strip-ansi "^3.0.0"
187 | supports-color "^2.0.0"
188 |
189 | chalk@^2.0.0, chalk@^2.1.0:
190 | version "2.3.0"
191 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
192 | dependencies:
193 | ansi-styles "^3.1.0"
194 | escape-string-regexp "^1.0.5"
195 | supports-color "^4.0.0"
196 |
197 | chardet@^0.4.0:
198 | version "0.4.0"
199 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.0.tgz#0bbe1355ac44d7a3ed4a925707c4ef70f8190f6c"
200 |
201 | circular-json@^0.3.1:
202 | version "0.3.3"
203 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
204 |
205 | cli-cursor@^2.1.0:
206 | version "2.1.0"
207 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
208 | dependencies:
209 | restore-cursor "^2.0.0"
210 |
211 | cli-width@^2.0.0:
212 | version "2.2.0"
213 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
214 |
215 | co@^4.6.0:
216 | version "4.6.0"
217 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
218 |
219 | color-convert@^1.9.0:
220 | version "1.9.1"
221 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
222 | dependencies:
223 | color-name "^1.1.1"
224 |
225 | color-name@^1.1.1:
226 | version "1.1.3"
227 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
228 |
229 | concat-map@0.0.1:
230 | version "0.0.1"
231 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
232 |
233 | concat-stream@^1.6.0:
234 | version "1.6.0"
235 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
236 | dependencies:
237 | inherits "^2.0.3"
238 | readable-stream "^2.2.2"
239 | typedarray "^0.0.6"
240 |
241 | core-js@^1.0.0:
242 | version "1.2.7"
243 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
244 |
245 | core-util-is@~1.0.0:
246 | version "1.0.2"
247 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
248 |
249 | cross-spawn@^5.1.0:
250 | version "5.1.0"
251 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
252 | dependencies:
253 | lru-cache "^4.0.1"
254 | shebang-command "^1.2.0"
255 | which "^1.2.9"
256 |
257 | debug@^3.0.1, debug@^3.1.0:
258 | version "3.2.6"
259 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
260 | dependencies:
261 | ms "^2.1.1"
262 |
263 | deep-is@~0.1.3:
264 | version "0.1.3"
265 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
266 |
267 | define-properties@^1.1.2:
268 | version "1.1.2"
269 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
270 | dependencies:
271 | foreach "^2.0.5"
272 | object-keys "^1.0.8"
273 |
274 | del@^2.0.2:
275 | version "2.2.2"
276 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
277 | dependencies:
278 | globby "^5.0.0"
279 | is-path-cwd "^1.0.0"
280 | is-path-in-cwd "^1.0.0"
281 | object-assign "^4.0.1"
282 | pify "^2.0.0"
283 | pinkie-promise "^2.0.0"
284 | rimraf "^2.2.8"
285 |
286 | doctrine@^2.0.0, doctrine@^2.1.0:
287 | version "2.1.0"
288 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
289 | dependencies:
290 | esutils "^2.0.2"
291 |
292 | encoding@^0.1.11:
293 | version "0.1.12"
294 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
295 | dependencies:
296 | iconv-lite "~0.4.13"
297 |
298 | es-abstract@^1.7.0:
299 | version "1.9.0"
300 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
301 | dependencies:
302 | es-to-primitive "^1.1.1"
303 | function-bind "^1.1.1"
304 | has "^1.0.1"
305 | is-callable "^1.1.3"
306 | is-regex "^1.0.4"
307 |
308 | es-to-primitive@^1.1.1:
309 | version "1.1.1"
310 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
311 | dependencies:
312 | is-callable "^1.1.1"
313 | is-date-object "^1.0.1"
314 | is-symbol "^1.0.1"
315 |
316 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
317 | version "1.0.5"
318 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
319 |
320 | eslint-plugin-react-native@^3.2.0:
321 | version "3.2.0"
322 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.2.0.tgz#3ec47907858bd07275248bef2de3142ee5c1efb1"
323 |
324 | eslint-plugin-react@^7.5.1:
325 | version "7.5.1"
326 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b"
327 | dependencies:
328 | doctrine "^2.0.0"
329 | has "^1.0.1"
330 | jsx-ast-utils "^2.0.0"
331 | prop-types "^15.6.0"
332 |
333 | eslint-scope@^3.7.1:
334 | version "3.7.1"
335 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
336 | dependencies:
337 | esrecurse "^4.1.0"
338 | estraverse "^4.1.1"
339 |
340 | eslint-visitor-keys@^1.0.0:
341 | version "1.0.0"
342 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
343 |
344 | eslint@^4.11.0:
345 | version "4.18.2"
346 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45"
347 | dependencies:
348 | ajv "^5.3.0"
349 | babel-code-frame "^6.22.0"
350 | chalk "^2.1.0"
351 | concat-stream "^1.6.0"
352 | cross-spawn "^5.1.0"
353 | debug "^3.1.0"
354 | doctrine "^2.1.0"
355 | eslint-scope "^3.7.1"
356 | eslint-visitor-keys "^1.0.0"
357 | espree "^3.5.2"
358 | esquery "^1.0.0"
359 | esutils "^2.0.2"
360 | file-entry-cache "^2.0.0"
361 | functional-red-black-tree "^1.0.1"
362 | glob "^7.1.2"
363 | globals "^11.0.1"
364 | ignore "^3.3.3"
365 | imurmurhash "^0.1.4"
366 | inquirer "^3.0.6"
367 | is-resolvable "^1.0.0"
368 | js-yaml "^3.9.1"
369 | json-stable-stringify-without-jsonify "^1.0.1"
370 | levn "^0.3.0"
371 | lodash "^4.17.4"
372 | minimatch "^3.0.2"
373 | mkdirp "^0.5.1"
374 | natural-compare "^1.4.0"
375 | optionator "^0.8.2"
376 | path-is-inside "^1.0.2"
377 | pluralize "^7.0.0"
378 | progress "^2.0.0"
379 | require-uncached "^1.0.3"
380 | semver "^5.3.0"
381 | strip-ansi "^4.0.0"
382 | strip-json-comments "~2.0.1"
383 | table "4.0.2"
384 | text-table "~0.2.0"
385 |
386 | espree@^3.5.2:
387 | version "3.5.2"
388 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
389 | dependencies:
390 | acorn "^5.2.1"
391 | acorn-jsx "^3.0.0"
392 |
393 | esprima@^4.0.0:
394 | version "4.0.1"
395 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
396 |
397 | esquery@^1.0.0:
398 | version "1.0.0"
399 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
400 | dependencies:
401 | estraverse "^4.0.0"
402 |
403 | esrecurse@^4.1.0:
404 | version "4.2.0"
405 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
406 | dependencies:
407 | estraverse "^4.1.0"
408 | object-assign "^4.0.1"
409 |
410 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
411 | version "4.2.0"
412 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
413 |
414 | esutils@^2.0.2:
415 | version "2.0.2"
416 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
417 |
418 | external-editor@^2.0.4:
419 | version "2.1.0"
420 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
421 | dependencies:
422 | chardet "^0.4.0"
423 | iconv-lite "^0.4.17"
424 | tmp "^0.0.33"
425 |
426 | fast-deep-equal@^1.0.0:
427 | version "1.0.0"
428 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
429 |
430 | fast-json-stable-stringify@^2.0.0:
431 | version "2.0.0"
432 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
433 |
434 | fast-levenshtein@~2.0.4:
435 | version "2.0.6"
436 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
437 |
438 | fbjs@^0.8.16:
439 | version "0.8.16"
440 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
441 | dependencies:
442 | core-js "^1.0.0"
443 | isomorphic-fetch "^2.1.1"
444 | loose-envify "^1.0.0"
445 | object-assign "^4.1.0"
446 | promise "^7.1.1"
447 | setimmediate "^1.0.5"
448 | ua-parser-js "^0.7.9"
449 |
450 | figures@^2.0.0:
451 | version "2.0.0"
452 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
453 | dependencies:
454 | escape-string-regexp "^1.0.5"
455 |
456 | file-entry-cache@^2.0.0:
457 | version "2.0.0"
458 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
459 | dependencies:
460 | flat-cache "^1.2.1"
461 | object-assign "^4.0.1"
462 |
463 | flat-cache@^1.2.1:
464 | version "1.3.0"
465 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
466 | dependencies:
467 | circular-json "^0.3.1"
468 | del "^2.0.2"
469 | graceful-fs "^4.1.2"
470 | write "^0.2.1"
471 |
472 | foreach@^2.0.5:
473 | version "2.0.5"
474 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
475 |
476 | fs.realpath@^1.0.0:
477 | version "1.0.0"
478 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
479 |
480 | function-bind@^1.0.2, function-bind@^1.1.1:
481 | version "1.1.1"
482 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
483 |
484 | functional-red-black-tree@^1.0.1:
485 | version "1.0.1"
486 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
487 |
488 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
489 | version "7.1.2"
490 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
491 | dependencies:
492 | fs.realpath "^1.0.0"
493 | inflight "^1.0.4"
494 | inherits "2"
495 | minimatch "^3.0.4"
496 | once "^1.3.0"
497 | path-is-absolute "^1.0.0"
498 |
499 | globals@^10.0.0:
500 | version "10.4.0"
501 | resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
502 |
503 | globals@^11.0.1:
504 | version "11.12.0"
505 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
506 |
507 | globby@^5.0.0:
508 | version "5.0.0"
509 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
510 | dependencies:
511 | array-union "^1.0.1"
512 | arrify "^1.0.0"
513 | glob "^7.0.3"
514 | object-assign "^4.0.1"
515 | pify "^2.0.0"
516 | pinkie-promise "^2.0.0"
517 |
518 | graceful-fs@^4.1.2:
519 | version "4.1.11"
520 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
521 |
522 | has-ansi@^2.0.0:
523 | version "2.0.0"
524 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
525 | dependencies:
526 | ansi-regex "^2.0.0"
527 |
528 | has-flag@^2.0.0:
529 | version "2.0.0"
530 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
531 |
532 | has@^1.0.1:
533 | version "1.0.1"
534 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
535 | dependencies:
536 | function-bind "^1.0.2"
537 |
538 | iconv-lite@^0.4.17, iconv-lite@~0.4.13:
539 | version "0.4.19"
540 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
541 |
542 | ignore@^3.3.3:
543 | version "3.3.7"
544 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
545 |
546 | imurmurhash@^0.1.4:
547 | version "0.1.4"
548 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
549 |
550 | inflight@^1.0.4:
551 | version "1.0.6"
552 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
553 | dependencies:
554 | once "^1.3.0"
555 | wrappy "1"
556 |
557 | inherits@2, inherits@^2.0.3, inherits@~2.0.3:
558 | version "2.0.3"
559 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
560 |
561 | inquirer@^3.0.6:
562 | version "3.3.0"
563 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
564 | dependencies:
565 | ansi-escapes "^3.0.0"
566 | chalk "^2.0.0"
567 | cli-cursor "^2.1.0"
568 | cli-width "^2.0.0"
569 | external-editor "^2.0.4"
570 | figures "^2.0.0"
571 | lodash "^4.3.0"
572 | mute-stream "0.0.7"
573 | run-async "^2.2.0"
574 | rx-lite "^4.0.8"
575 | rx-lite-aggregates "^4.0.8"
576 | string-width "^2.1.0"
577 | strip-ansi "^4.0.0"
578 | through "^2.3.6"
579 |
580 | invariant@^2.2.0:
581 | version "2.2.2"
582 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
583 | dependencies:
584 | loose-envify "^1.0.0"
585 |
586 | is-callable@^1.1.1, is-callable@^1.1.3:
587 | version "1.1.3"
588 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
589 |
590 | is-date-object@^1.0.1:
591 | version "1.0.1"
592 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
593 |
594 | is-fullwidth-code-point@^2.0.0:
595 | version "2.0.0"
596 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
597 |
598 | is-path-cwd@^1.0.0:
599 | version "1.0.0"
600 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
601 |
602 | is-path-in-cwd@^1.0.0:
603 | version "1.0.0"
604 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
605 | dependencies:
606 | is-path-inside "^1.0.0"
607 |
608 | is-path-inside@^1.0.0:
609 | version "1.0.0"
610 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
611 | dependencies:
612 | path-is-inside "^1.0.1"
613 |
614 | is-promise@^2.1.0:
615 | version "2.1.0"
616 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
617 |
618 | is-regex@^1.0.4:
619 | version "1.0.4"
620 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
621 | dependencies:
622 | has "^1.0.1"
623 |
624 | is-resolvable@^1.0.0:
625 | version "1.0.0"
626 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
627 | dependencies:
628 | tryit "^1.0.1"
629 |
630 | is-stream@^1.0.1:
631 | version "1.1.0"
632 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
633 |
634 | is-symbol@^1.0.1:
635 | version "1.0.1"
636 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
637 |
638 | isarray@~1.0.0:
639 | version "1.0.0"
640 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
641 |
642 | isexe@^2.0.0:
643 | version "2.0.0"
644 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
645 |
646 | isomorphic-fetch@^2.1.1:
647 | version "2.2.1"
648 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
649 | dependencies:
650 | node-fetch "^1.0.1"
651 | whatwg-fetch ">=0.10.0"
652 |
653 | js-tokens@^3.0.0, js-tokens@^3.0.2:
654 | version "3.0.2"
655 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
656 |
657 | js-yaml@^3.9.1:
658 | version "3.13.1"
659 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
660 | dependencies:
661 | argparse "^1.0.7"
662 | esprima "^4.0.0"
663 |
664 | json-schema-traverse@^0.3.0:
665 | version "0.3.1"
666 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
667 |
668 | json-stable-stringify-without-jsonify@^1.0.1:
669 | version "1.0.1"
670 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
671 |
672 | jsx-ast-utils@^2.0.0:
673 | version "2.0.1"
674 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
675 | dependencies:
676 | array-includes "^3.0.3"
677 |
678 | levn@^0.3.0, levn@~0.3.0:
679 | version "0.3.0"
680 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
681 | dependencies:
682 | prelude-ls "~1.1.2"
683 | type-check "~0.3.2"
684 |
685 | lodash.isequal@^4.5.0:
686 | version "4.5.0"
687 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
688 |
689 | lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
690 | version "4.17.15"
691 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
692 |
693 | loose-envify@^1.0.0, loose-envify@^1.3.1:
694 | version "1.3.1"
695 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
696 | dependencies:
697 | js-tokens "^3.0.0"
698 |
699 | lru-cache@^4.0.1:
700 | version "4.1.1"
701 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
702 | dependencies:
703 | pseudomap "^1.0.2"
704 | yallist "^2.1.2"
705 |
706 | mimic-fn@^1.0.0:
707 | version "1.1.0"
708 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
709 |
710 | minimatch@^3.0.2, minimatch@^3.0.4:
711 | version "3.0.4"
712 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
713 | dependencies:
714 | brace-expansion "^1.1.7"
715 |
716 | minimist@0.0.8:
717 | version "0.0.8"
718 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
719 |
720 | mkdirp@^0.5.1:
721 | version "0.5.1"
722 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
723 | dependencies:
724 | minimist "0.0.8"
725 |
726 | ms@^2.1.1:
727 | version "2.1.2"
728 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
729 |
730 | mute-stream@0.0.7:
731 | version "0.0.7"
732 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
733 |
734 | natural-compare@^1.4.0:
735 | version "1.4.0"
736 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
737 |
738 | node-fetch@^1.0.1:
739 | version "1.7.3"
740 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
741 | dependencies:
742 | encoding "^0.1.11"
743 | is-stream "^1.0.1"
744 |
745 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
746 | version "4.1.1"
747 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
748 |
749 | object-keys@^1.0.8:
750 | version "1.0.11"
751 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
752 |
753 | once@^1.3.0:
754 | version "1.4.0"
755 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
756 | dependencies:
757 | wrappy "1"
758 |
759 | onetime@^2.0.0:
760 | version "2.0.1"
761 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
762 | dependencies:
763 | mimic-fn "^1.0.0"
764 |
765 | optionator@^0.8.2:
766 | version "0.8.2"
767 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
768 | dependencies:
769 | deep-is "~0.1.3"
770 | fast-levenshtein "~2.0.4"
771 | levn "~0.3.0"
772 | prelude-ls "~1.1.2"
773 | type-check "~0.3.2"
774 | wordwrap "~1.0.0"
775 |
776 | os-tmpdir@~1.0.2:
777 | version "1.0.2"
778 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
779 |
780 | path-is-absolute@^1.0.0:
781 | version "1.0.1"
782 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
783 |
784 | path-is-inside@^1.0.1, path-is-inside@^1.0.2:
785 | version "1.0.2"
786 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
787 |
788 | pify@^2.0.0:
789 | version "2.3.0"
790 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
791 |
792 | pinkie-promise@^2.0.0:
793 | version "2.0.1"
794 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
795 | dependencies:
796 | pinkie "^2.0.0"
797 |
798 | pinkie@^2.0.0:
799 | version "2.0.4"
800 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
801 |
802 | pluralize@^7.0.0:
803 | version "7.0.0"
804 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
805 |
806 | prelude-ls@~1.1.2:
807 | version "1.1.2"
808 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
809 |
810 | process-nextick-args@~1.0.6:
811 | version "1.0.7"
812 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
813 |
814 | progress@^2.0.0:
815 | version "2.0.0"
816 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
817 |
818 | promise@^7.1.1:
819 | version "7.3.1"
820 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
821 | dependencies:
822 | asap "~2.0.3"
823 |
824 | prop-types@^15.6.0:
825 | version "15.6.0"
826 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
827 | dependencies:
828 | fbjs "^0.8.16"
829 | loose-envify "^1.3.1"
830 | object-assign "^4.1.1"
831 |
832 | pseudomap@^1.0.2:
833 | version "1.0.2"
834 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
835 |
836 | readable-stream@^2.2.2:
837 | version "2.3.3"
838 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
839 | dependencies:
840 | core-util-is "~1.0.0"
841 | inherits "~2.0.3"
842 | isarray "~1.0.0"
843 | process-nextick-args "~1.0.6"
844 | safe-buffer "~5.1.1"
845 | string_decoder "~1.0.3"
846 | util-deprecate "~1.0.1"
847 |
848 | require-uncached@^1.0.3:
849 | version "1.0.3"
850 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
851 | dependencies:
852 | caller-path "^0.1.0"
853 | resolve-from "^1.0.0"
854 |
855 | resolve-from@^1.0.0:
856 | version "1.0.1"
857 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
858 |
859 | restore-cursor@^2.0.0:
860 | version "2.0.0"
861 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
862 | dependencies:
863 | onetime "^2.0.0"
864 | signal-exit "^3.0.2"
865 |
866 | rimraf@^2.2.8:
867 | version "2.6.2"
868 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
869 | dependencies:
870 | glob "^7.0.5"
871 |
872 | run-async@^2.2.0:
873 | version "2.3.0"
874 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
875 | dependencies:
876 | is-promise "^2.1.0"
877 |
878 | rx-lite-aggregates@^4.0.8:
879 | version "4.0.8"
880 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
881 | dependencies:
882 | rx-lite "*"
883 |
884 | rx-lite@*, rx-lite@^4.0.8:
885 | version "4.0.8"
886 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
887 |
888 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
889 | version "5.1.1"
890 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
891 |
892 | semver@^5.3.0:
893 | version "5.4.1"
894 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
895 |
896 | setimmediate@^1.0.5:
897 | version "1.0.5"
898 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
899 |
900 | shebang-command@^1.2.0:
901 | version "1.2.0"
902 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
903 | dependencies:
904 | shebang-regex "^1.0.0"
905 |
906 | shebang-regex@^1.0.0:
907 | version "1.0.0"
908 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
909 |
910 | signal-exit@^3.0.2:
911 | version "3.0.2"
912 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
913 |
914 | slice-ansi@1.0.0:
915 | version "1.0.0"
916 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
917 | dependencies:
918 | is-fullwidth-code-point "^2.0.0"
919 |
920 | sprintf-js@~1.0.2:
921 | version "1.0.3"
922 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
923 |
924 | string-width@^2.1.0, string-width@^2.1.1:
925 | version "2.1.1"
926 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
927 | dependencies:
928 | is-fullwidth-code-point "^2.0.0"
929 | strip-ansi "^4.0.0"
930 |
931 | string_decoder@~1.0.3:
932 | version "1.0.3"
933 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
934 | dependencies:
935 | safe-buffer "~5.1.0"
936 |
937 | strip-ansi@^3.0.0:
938 | version "3.0.1"
939 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
940 | dependencies:
941 | ansi-regex "^2.0.0"
942 |
943 | strip-ansi@^4.0.0:
944 | version "4.0.0"
945 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
946 | dependencies:
947 | ansi-regex "^3.0.0"
948 |
949 | strip-json-comments@~2.0.1:
950 | version "2.0.1"
951 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
952 |
953 | supports-color@^2.0.0:
954 | version "2.0.0"
955 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
956 |
957 | supports-color@^4.0.0:
958 | version "4.5.0"
959 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
960 | dependencies:
961 | has-flag "^2.0.0"
962 |
963 | table@4.0.2:
964 | version "4.0.2"
965 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
966 | dependencies:
967 | ajv "^5.2.3"
968 | ajv-keywords "^2.1.0"
969 | chalk "^2.1.0"
970 | lodash "^4.17.4"
971 | slice-ansi "1.0.0"
972 | string-width "^2.1.1"
973 |
974 | text-table@~0.2.0:
975 | version "0.2.0"
976 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
977 |
978 | through@^2.3.6:
979 | version "2.3.8"
980 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
981 |
982 | tmp@^0.0.33:
983 | version "0.0.33"
984 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
985 | dependencies:
986 | os-tmpdir "~1.0.2"
987 |
988 | to-fast-properties@^2.0.0:
989 | version "2.0.0"
990 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
991 |
992 | tryit@^1.0.1:
993 | version "1.0.3"
994 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
995 |
996 | type-check@~0.3.2:
997 | version "0.3.2"
998 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
999 | dependencies:
1000 | prelude-ls "~1.1.2"
1001 |
1002 | typedarray@^0.0.6:
1003 | version "0.0.6"
1004 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1005 |
1006 | ua-parser-js@^0.7.9:
1007 | version "0.7.17"
1008 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
1009 |
1010 | util-deprecate@~1.0.1:
1011 | version "1.0.2"
1012 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1013 |
1014 | whatwg-fetch@>=0.10.0:
1015 | version "2.0.3"
1016 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
1017 |
1018 | which@^1.2.9:
1019 | version "1.3.0"
1020 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1021 | dependencies:
1022 | isexe "^2.0.0"
1023 |
1024 | wordwrap@~1.0.0:
1025 | version "1.0.0"
1026 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1027 |
1028 | wrappy@1:
1029 | version "1.0.2"
1030 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1031 |
1032 | write@^0.2.1:
1033 | version "0.2.1"
1034 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1035 | dependencies:
1036 | mkdirp "^0.5.1"
1037 |
1038 | yallist@^2.1.2:
1039 | version "2.1.2"
1040 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
1041 |
--------------------------------------------------------------------------------