├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── babel.config.js ├── example ├── README.md ├── app │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ └── manifest.json │ ├── src │ │ ├── App.css │ │ ├── App.js │ │ ├── App.test.js │ │ ├── Navbar.js │ │ ├── charts │ │ │ ├── BasicBarChart.js │ │ │ ├── LiveChart.js │ │ │ ├── MixedLineBarChart.js │ │ │ ├── MultiDatasetBarChart.js │ │ │ ├── RealtimeTimeseriesChart.js │ │ │ ├── StyledBarChart.js │ │ │ └── index.js │ │ ├── index.css │ │ ├── index.js │ │ └── logo.svg │ └── yarn.lock ├── hasura │ ├── config.yaml │ └── migrations │ │ ├── 1552117082230_init.up.sql │ │ ├── 1552117082230_init.up.yaml │ │ ├── 1552349794748_create_relationship_comments_public_table_articles.down.yaml │ │ ├── 1552349794748_create_relationship_comments_public_table_articles.up.yaml │ │ ├── 1552436653783_alter_table_public_stocks_add_column_uuid.down.yaml │ │ ├── 1552436653783_alter_table_public_stocks_add_column_uuid.up.yaml │ │ ├── 1552436714359_run_sql_migration.down.yaml │ │ └── 1552436714359_run_sql_migration.up.yaml └── scripts │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── index.js │ ├── package-lock.json │ ├── package.json │ └── yarn.lock ├── how-it-works.md ├── package.json ├── rollup.config.js ├── src ├── array-fields.js ├── converter.js └── index.js ├── test ├── data.test.js └── index.test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | bundle 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | example 3 | bundle 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Hasura 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphql2chartjs - Instant realtime charts using GraphQL 2 | 3 | `graphql2chartjs` reshapes your GraphQL data as per the [ChartJS](https://chartjs.org) API. This makes it easy to query a GraphQL API and render the output as a ChartJS chart. 4 | 5 | For example, if you're using Postgres and [Hasura](https://hasura.io), this is what using `graphql2chartjs` looks like: 6 | 7 | ![graphql2chartjs](https://storage.googleapis.com/graphql-engine-cdn.hasura.io/img/graphql2chartjs-explained.png) 8 | 9 | 10 | 11 | ## Demos & sandbox 12 | We've set up a GraphQL server with continuously changing data, so that you can try graphql2chartjs out easily. 13 | 14 | 15 | |[View live charts](https://graphql2chartjs-examples.herokuapp.com) | [Edit in sandbox](https://codesandbox.io/s/p2wpj1o8pj) | [Open GraphiQL](https://g2c-examples-graphiql.herokuapp.com/) | 16 | |---|---|---| 17 | 18 | ![realtime chart with live data](https://storage.googleapis.com/graphql-engine-cdn.hasura.io/assets/graphql2chartjs/live-chart.gif) 19 | 20 | The demo above cover the following types of charts: [basic](https://graphql2chartjs-examples.herokuapp.com/#bar), [multiple datasets](https://graphql2chartjs-examples.herokuapp.com/#multi-bar), [mixed chart-types](https://graphql2chartjs-examples.herokuapp.com/#mixed), [realtime chart with live data](https://graphql2chartjs-examples.herokuapp.com/#live-chart), [realtime time-series](https://graphql2chartjs-examples.herokuapp.com/#timeseries-chart) 21 | 22 | ## Usage with Hasura 23 | Hasura gives you an instant realtime GraphQL API on an existing Postgres database. You can create views to capture analytics and aggregations on your database and instantly turn them into charts. 24 | 25 | Watch this video below to see a demo/tutorial of using Hasura with an existing Postgres database, creating views and building charts. 26 | 27 |
28 | 29 | youtube video demo 30 | 31 |
32 | 33 | 34 | ## Example usage with react, apollo and react-chartjs-2 35 | 36 | ```javascript 37 | import {Query} from 'react-apollo'; 38 | import gql from 'graphql-tag'; 39 | import graphql2chartjs from 'graphql2chartjs'; 40 | import {Bar} from 'react-chartjs-2'; 41 | 42 | const Chart = () => ( 43 | 52 | {({data} => { 53 | if (data) { 54 | const g2c = new graphql2chartjs(data, 'bar'); 55 | return (); 56 | } 57 | return null; 58 | } 59 | 60 | ); 61 | ``` 62 | 63 | ## Mapping GraphQL queries to ChartJS charts 64 | 65 | Different types of charts need different structures in their datasets. 66 | 67 | For example a bar chart dataset needs labels and data associated for each label; the ChartJS API refers to this as `label` and `data`. Once you alias fields in your graphql query to `label` and `data`, and pass the response through `graphql2chartjs`, your dataset is ready to be used by bar chart in chartjs. 68 | 69 | ### Bar / Line / Doughnut / Pie / Radar / Polar Area / Area 70 | 71 | Charts of this type need 2 data inputs, `label` and `data`. 72 | ```graphql 73 | query { 74 | ArticleLikes : articles { 75 | label: title 76 | data: likes 77 | } 78 | } 79 | ``` 80 | 81 | ### Scatter / Bubble 82 | 83 | Charts of this type need 2 data inputs: `data_x`, `data_y` (and `data_r` for bubble). 84 | ```graphql 85 | query { 86 | ArticleLikesVsComments : articles { 87 | data_x: num_likes 88 | data_y: num_comments 89 | } 90 | } 91 | ``` 92 | 93 | ### Time series (line / bar) 94 | 95 | Charts of this type need 2 data inputs, `data_x` or `data_t` and `data_y`. Note that there is no `label`. 96 | 97 | ```graphql 98 | query { 99 | StockPrices : stockprice { 100 | data_t: created 101 | data_y: price 102 | } 103 | } 104 | ``` 105 | 106 | ## graphql2chartjs usage 107 | 108 | graphql2chartjs works in 3 steps: 109 | 110 | 1. Initialise graphql2chartjs: `const g2c = new graphql2chartjs()` 111 | 2. Add data from your graphql response: `g2c.add(graphqlResponse.data, 'line')` 112 | 3. Set your chart data to the data properly of the graphql2chartjs instance: `g2c.data` 113 | 114 | ### Step 1: Initialiase with data: `new graphql2chartjs()` 115 | 116 | #### Option 1: Initialise with data and chart type 117 | 118 | **`graphql2chartjs(data, chartType)`** 119 | 120 | ```javascript 121 | const g2c = new graphql2chartjs(data, 'bar'); 122 | ``` 123 | 124 | - `data`: This is your GraphQL response. This data should have fields `label`, `data` etc. as per the GraphQL querying described above. 125 | - `chartType`: This is a string that represents valid values of what your chart type is. Valid values include `'line'`, `'bar'`, `'radar'`, `'doughnut'`, `'pie'`, `'polarArea'`, `'bubble'`, `'scatter'`. 126 | 127 | **Notes:** 128 | - This is the simplest way of using `graphql2chartjs` 129 | - If you have multiple datasets, all of the datasets will be rendered automatically as the same type of chart 130 | - To customise the UI options of the rendered chart like colors or to create a mixed type chart (one dataset is rendered as a line chart, another as a bar chart) use the next initialisation method instead of this one. 131 | 132 | 133 | #### Option 2: Initialise with data and a transform function 134 | 135 | **`graphql2chartjs(data, transform)`** 136 | 137 | The transformation function can add chartjs dataset props or even modify the record data: 138 | 139 | ```javascript 140 | const g2c = new graphql2chartjs(data, (datasetName, dataPoint) => { 141 | return { 142 | chartType: 'bar', 143 | backgroundColor: 'yellow' 144 | }; 145 | }); 146 | ``` 147 | 148 | - `transform(datasetName, dataPoint)`: This function defined by you can take the name of the dataset and the data record that comes from the GraphQL response and returns an object that can should have the `chartType` key and optionally other keys that specify other dataset properties. 149 | - The object returned by this function should look like the following: 150 | ```javascript 151 | { 152 | chartType: 'line', // Or 'line', 'bar', 'radar', 'doughnut', 'pie', 'polarArea', 'bubble', 'scatter' 153 | 154 | } 155 | ``` 156 | - `chartType`: This should be a string value, one of: `'line'`, `'bar'`, `'radar'`, `'doughnut'`, `'pie'`, `'polarArea'`, `'bubble'`, `'scatter'` 157 | - Other keys in this object should be dataset properties. These properties are slightly different for different chart types. 158 | - Line chart: https://www.chartjs.org/docs/latest/charts/line.html#dataset-properties 159 | - Bar chart: https://www.chartjs.org/docs/latest/charts/bar.html#dataset-properties 160 | - Radar chart: https://www.chartjs.org/docs/latest/charts/radar.html#dataset-properties 161 | - Doughnut & Pie: https://www.chartjs.org/docs/latest/charts/doughnut.html#dataset-properties 162 | - Polar: https://www.chartjs.org/docs/latest/charts/polar.html#dataset-properties 163 | - Bubble: https://www.chartjs.org/docs/latest/charts/bubble.html#dataset-properties 164 | - Scatter: https://www.chartjs.org/docs/latest/charts/scatter.html#dataset-properties 165 | 166 | 167 | ### Step 2: Now create your chart with data - `g2c.data` 168 | 169 | `g2c.data` gives you access to the latest ChartJS data that can be passed to your chart. 170 | 171 | 1. Javascript 172 | ```javascript 173 | var myChart = new Chart(ctx, { data: g2c.data }); 174 | ``` 175 | 176 | 2. react-chartjs-2 177 | ```javascript 178 | 179 | ``` 180 | 181 | ### Step 3: (optional) Incrementally add data for your chart 182 | 183 | **`g2c.add()`** 184 | 185 | Once you've initialised a `graphql2chartjs` object, you can use the `add` function to add data for the first time or incrementally: 186 | 187 | ```javascript 188 | await data = runQuery(..); 189 | 190 | // Add for a chart type 191 | g2c.add(data, 'line'); 192 | 193 | // Add with a transformation function to change UI props for the new data added or udpated 194 | g2c.add(data, (datasetName, dataPoint) => { 195 | chartType: 'line', 196 | pointBackgroundColor: 'yellow' 197 | }); 198 | ``` 199 | 200 | 201 | ## Installation 202 | 203 | ### Via npm 204 | 205 | ``` 206 | npm install --save graphql2chartjs 207 | ``` 208 | 209 | ### Use in a script tag 210 | 211 | ```html 212 | 213 | ``` 214 | 215 | ## Reforming the data 216 | 217 | ### `reform()` 218 | 219 | You can reform the existing data in your `graphql2chartjs` instance using the reform function that takes a reformer function as an argument. This reformer function is run over every datapoint in every dataset. For instance, to scale the x and y coordinates, you would do something like: 220 | 221 | ``` 222 | g2c.reform((datasetName, dataPoint) => { 223 | // scale the x, y coordinates 224 | return { 225 | data_x: scalingFactor(dataPoint.data_x), 226 | data_y: scalingFactor(dataPoint.data_y) 227 | } 228 | }) 229 | ``` 230 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | const presets = [ 2 | [ 3 | "@babel/env", 4 | { 5 | targets: { 6 | edge: "17", 7 | firefox: "60", 8 | chrome: "67", 9 | safari: "11.1", 10 | }, 11 | useBuiltIns: "usage", 12 | }, 13 | ], 14 | ]; 15 | 16 | module.exports = { presets }; -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Example 2 | 3 | This example app is live at https://graphql2chartjs-examples.herokuapp.com 4 | 5 | ## Client (React app) 6 | 7 | The app directory has the React app that is already set up with a backend. 8 | 9 | ## Migrations (Hasura migrations) 10 | 11 | The hasura directory contains the migrations for the Hasura GraphQL Engine backend that is setup at https://graphql2chartjs.hasura.app and has a GraphQL endpoint https://graphqlchartjs.hasura.app/v1/graphql 12 | 13 | ## Scripts 14 | 15 | The scripts directory contains the scripts that are run to populate the backend with sample data. 16 | -------------------------------------------------------------------------------- /example/app/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | -------------------------------------------------------------------------------- /example/app/README.md: -------------------------------------------------------------------------------- 1 | To run this example: 2 | 3 | ``` 4 | npm install 5 | npm start 6 | ``` 7 | -------------------------------------------------------------------------------- /example/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql2chartjs-examples", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "apollo-boost": "^0.1.28", 7 | "apollo-link-ws": "^1.0.14", 8 | "bootstrap": "^4.3.1", 9 | "chart.js": "^2.7.3", 10 | "graphql": "^14.1.1", 11 | "graphql2chartjs": "^0.2.1", 12 | "react": "^16.8.3", 13 | "react-apollo": "^2.4.1", 14 | "react-bootstrap": "^1.0.0-beta.5", 15 | "react-chartjs-2": "^2.7.4", 16 | "react-dom": "^16.8.3", 17 | "react-scripts": "2.1.5", 18 | "react-syntax-highlighter": "^10.1.3", 19 | "subscriptions-transport-ws": "^0.9.15" 20 | }, 21 | "scripts": { 22 | "start": "react-scripts start", 23 | "build": "react-scripts build", 24 | "test": "react-scripts test", 25 | "eject": "react-scripts eject" 26 | }, 27 | "eslintConfig": { 28 | "extends": "react-app" 29 | }, 30 | "browserslist": [ 31 | ">0.2%", 32 | "not dead", 33 | "not ie <= 11", 34 | "not op_mini all" 35 | ], 36 | "devDependencies": { 37 | "@playlyfe/gql": "^2.6.1" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /example/app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasura/graphql2chartjs/0392dc0f6bab724f62fa1521f6d7bba54b5e4c2e/example/app/public/favicon.ico -------------------------------------------------------------------------------- /example/app/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 15 | 16 | 17 | 23 | 32 | graphql2chartjs examples 33 | 34 | 35 | 36 |
37 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /example/app/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /example/app/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | animation: App-logo-spin infinite 20s linear; 7 | height: 40vmin; 8 | pointer-events: none; 9 | } 10 | 11 | .App-header { 12 | background-color: #282c34; 13 | min-height: 100vh; 14 | display: flex; 15 | flex-direction: column; 16 | align-items: center; 17 | justify-content: center; 18 | font-size: calc(10px + 2vmin); 19 | color: white; 20 | } 21 | 22 | .App-link { 23 | color: #61dafb; 24 | } 25 | 26 | @keyframes App-logo-spin { 27 | from { 28 | transform: rotate(0deg); 29 | } 30 | to { 31 | transform: rotate(360deg); 32 | } 33 | } 34 | 35 | .half_screen { 36 | width: 50%; 37 | display: inline-block; 38 | position: relative; 39 | } 40 | 41 | .chartWrapper { 42 | display: flex; 43 | } 44 | 45 | .loadingIndicator { 46 | position: absolute; 47 | top: 50%; 48 | left: 50%; 49 | transform: translate(-50%, -50%); 50 | } 51 | 52 | @media(max-width: 767px) { 53 | .half_screen { 54 | width: 100%; 55 | display: block; 56 | } 57 | .chartWrapper { 58 | display: block; 59 | } 60 | } 61 | 62 | .fiftypercent { 63 | width: 100px; 64 | display: inline-block; 65 | } -------------------------------------------------------------------------------- /example/app/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './App.css'; 3 | import NavBar from './Navbar'; 4 | 5 | import { 6 | BasicBarChart, 7 | StyledBarChart, 8 | MultiDatasetBarChart, 9 | MixedLineBarChart, 10 | LiveChart, 11 | RealtimeTimeseriesChart 12 | } from './charts'; 13 | 14 | const App = () => ( 15 |
16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 | ); 27 | 28 | export default App; 29 | -------------------------------------------------------------------------------- /example/app/src/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | it('renders without crashing', () => { 6 | const div = document.createElement('div'); 7 | ReactDOM.render(, div); 8 | ReactDOM.unmountComponentAtNode(div); 9 | }); 10 | -------------------------------------------------------------------------------- /example/app/src/Navbar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Navbar, Nav, NavDropdown, Button } from 'react-bootstrap'; 3 | 4 | const Bar = () => { 5 | return ( 6 | 7 | graphql2chartjs examples 8 | 9 | 19 | 27 | 28 | 29 | ) 30 | } 31 | 32 | export default Bar; 33 | 34 | -------------------------------------------------------------------------------- /example/app/src/charts/BasicBarChart.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Bar } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { Query } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | const query = ` 10 | query { 11 | ArticleLikes: article_stats { 12 | id 13 | label: title 14 | data: num_likes 15 | } 16 | } 17 | `; 18 | 19 | // Chart component 20 | const Chart = ({ query }) => ( 21 | 24 | { 25 | ({data, error, loading}) => { 26 | if (loading || error) { 27 | return
Please wait
; 28 | } 29 | // create graphql2chartjs instance 30 | const g2c = new graphql2chartjs(); 31 | // add graphql data to graphql2chartjs instance 32 | g2c.add(data, 'bar'); 33 | // render chart with g2c data :) 34 | return ( 35 | 36 | ) 37 | } 38 | } 39 |
40 | ) 41 | 42 | /****************************************UTILS*****************************************/ 43 | 44 | const HighlightedQuery = ({ query }) => ( 45 | 49 | {query} 50 | 51 | ) 52 | 53 | const BasicBarChart = ({ path }) => { 54 | return ( 55 |
56 |
57 |
58 |

Basic bar chart

59 |
60 |
61 | 62 |
63 |
64 | 65 |
66 |
67 |
68 | View source 69 |
70 |
71 |
72 | ) 73 | } 74 | 75 | export { BasicBarChart }; 76 | -------------------------------------------------------------------------------- /example/app/src/charts/LiveChart.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Line } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { Subscription } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | const subscription = ` 10 | subscription { 11 | stock_price_for_Amazon: stocks ( 12 | order_by: { 13 | created: desc 14 | } 15 | where: { 16 | ticker: { 17 | _eq: "AMZN" 18 | } 19 | } 20 | limit: 100 21 | ) { 22 | data_t: created 23 | data_y: price 24 | } 25 | } 26 | `; 27 | 28 | // Chart component 29 | const Chart = () => ( 30 | 33 | { 34 | ({data, error, loading}) => { 35 | if (loading || error) { 36 | console.error(error); 37 | return
Please wait
; 38 | } 39 | // create graphql2chartjs instance 40 | const g2c = new graphql2chartjs(); 41 | // add graphql data to graphql2chartjs instance while adding different chart types and properties 42 | g2c.add(data, (dataSetName, dataPoint) => { 43 | return { 44 | ...dataPoint, 45 | chartType: 'line', 46 | borderColor: '#333538', 47 | pointBackgroundColor: '#333538', 48 | backgroundColor: '#333538', 49 | fill: false 50 | } 51 | }); 52 | // render chart with g2c data :) 53 | return ( 54 | 68 | ) 69 | } 70 | } 71 |
72 | ) 73 | 74 | /****************************************UTILS*****************************************/ 75 | 76 | const HighlightedSubscription = () => ( 77 | 81 | {subscription} 82 | 83 | ) 84 | 85 | const LiveChart = ({ path }) => { 86 | return ( 87 |
88 |
89 |
90 |

Live chart (with mock data)

91 |
92 |
93 | 94 |
95 |
96 | 97 |
98 |
99 |
100 | View source 101 |
102 |
103 |
104 |
105 | ) 106 | } 107 | 108 | export { LiveChart }; 109 | -------------------------------------------------------------------------------- /example/app/src/charts/MixedLineBarChart.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Bar } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { Query } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | const query = ` 10 | query { 11 | ArticleComments: article_stats { 12 | id 13 | label: title 14 | data: num_comments 15 | } 16 | ArticleLikes: article_stats { 17 | id 18 | label: title 19 | data: num_likes 20 | } 21 | } 22 | `; 23 | 24 | // Chart component 25 | const Chart = () => ( 26 | 29 | { 30 | ({data, error, loading}) => { 31 | if (loading || error) { 32 | console.error(error); 33 | return
Please wait
; 34 | } 35 | // create graphql2chartjs instance 36 | const g2c = new graphql2chartjs(); 37 | // add graphql data to graphql2chartjs instance while adding different chart types and properties 38 | g2c.add(data, (dataSetName, dataPoint) => { 39 | if (dataSetName === 'ArticleLikes') { 40 | // return bar chart properties for article likes 41 | return { 42 | ...dataPoint, 43 | chartType: 'bar', 44 | backgroundColor: '#44c0c1', 45 | } 46 | } 47 | // return line chart properties for article comments 48 | return { 49 | ...dataPoint, 50 | chartType: 'line', 51 | borderColor: '#ffce49', 52 | pointBackgroundColor: '#ffce49', 53 | backgroundColor: '#ffce49', 54 | fill: false 55 | } 56 | }); 57 | // render chart with g2c data :) 58 | return ( 59 | 60 | ) 61 | } 62 | } 63 |
64 | ) 65 | 66 | /****************************************UTILS*****************************************/ 67 | 68 | const HighlightedQuery = ({ query }) => ( 69 | 73 | {query} 74 | 75 | ) 76 | 77 | const MixedLineBarChart = ({ path }) => { 78 | return ( 79 |
80 |
81 |
82 |

Mixed chart (line and bar)

83 |
84 |
85 | 86 |
87 |
88 | 89 |
90 |
91 |
92 | View source 93 |
94 |
95 |
96 | ) 97 | } 98 | 99 | export { MixedLineBarChart }; 100 | -------------------------------------------------------------------------------- /example/app/src/charts/MultiDatasetBarChart.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Bar } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { Query } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | const query = ` 10 | query { 11 | ArticleComments: article_stats { 12 | id 13 | label: title 14 | data: num_comments 15 | } 16 | ArticleLikes: article_stats { 17 | id 18 | label: title 19 | data: num_likes 20 | } 21 | } 22 | `; 23 | 24 | // Chart component 25 | const Chart = () => ( 26 | 29 | { 30 | ({data, error, loading}) => { 31 | if (loading || error) { 32 | console.error(error); 33 | return
Please wait
; 34 | } 35 | // create graphql2chartjs instance 36 | const g2c = new graphql2chartjs(); 37 | // add graphql data to graphql2chartjs instance while adding the backgroundcolor property 38 | g2c.add(data, (dataSetName, dataPoint) => { 39 | if (dataSetName === 'ArticleLikes') { 40 | return { 41 | ...dataPoint, 42 | chartType: 'bar', 43 | backgroundColor: '#44c0c1', 44 | } 45 | } 46 | return { 47 | ...dataPoint, 48 | chartType: 'bar', 49 | backgroundColor: '#ffce49', 50 | } 51 | }); 52 | // render chart with g2c data :) 53 | return ( 54 | 55 | ) 56 | } 57 | } 58 |
59 | ) 60 | 61 | /****************************************UTILS*****************************************/ 62 | 63 | const HighlightedQuery = ({ query }) => ( 64 | 68 | {query} 69 | 70 | ) 71 | 72 | const MultiDatasetBarChart = ({ path }) => { 73 | return ( 74 |
75 |
76 |
77 |

Bar chart (multiple datasets)

78 |
79 |
80 | 81 |
82 |
83 | 84 |
85 |
86 |
87 | View source 88 |
89 |
90 |
91 | ) 92 | } 93 | 94 | export { MultiDatasetBarChart }; 95 | -------------------------------------------------------------------------------- /example/app/src/charts/RealtimeTimeseriesChart.js: -------------------------------------------------------------------------------- 1 | import React, {useState, useEffect} from 'react'; 2 | import { Line } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { ApolloConsumer } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | // Chart component 10 | const Chart = ({client}) => { 11 | const [chartJsData, setChartjsData] = useState({}); 12 | useEffect( 13 | () => { 14 | // initialize g2c 15 | const g2c = new graphql2chartjs(); 16 | let latestTime = null; 17 | // load initial data 18 | client.query({ 19 | query: gql`${firstQuery}` 20 | }).then((resp) => { 21 | // add the received data to g2c and update state 22 | g2c.add(resp.data, () => lineChartOptions); 23 | setChartjsData(g2c.data) 24 | 25 | // update the timestamp of the last received entry 26 | if (resp.data.StockPriceForAmazon.length) { 27 | latestTime = resp.data.StockPriceForAmazon[0].data_t; 28 | } 29 | 30 | // subscribe to a notification with newest data in the database 31 | client.subscribe({ 32 | query: gql`${lastEventSubscription}` 33 | }).subscribe({ 34 | next(event) { 35 | // if the data is not stale, fetch new data and add to g2c 36 | if (event.data.StockPriceForAmazon.length) { 37 | if (!latestTime || event.data.StockPriceForAmazon[0].data_t > latestTime) { 38 | fetchMore() 39 | } 40 | } 41 | }, 42 | error(err) { 43 | console.error(err); 44 | } 45 | }) 46 | }) 47 | 48 | const fetchMore = () => { 49 | client.query({ 50 | query: gql`${fetchMoreQuery}`, 51 | variables: { 52 | time: latestTime || "2019-03-12T19:16:45.640128+00:00" 53 | } 54 | }).then((resp) => { 55 | if (resp.data.StockPriceForAmazon.length) { 56 | g2c.add(resp.data, () => lineChartOptions); 57 | latestTime = resp.data.StockPriceForAmazon[0].data_t; 58 | setChartjsData(g2c.data); 59 | } 60 | }) 61 | } 62 | }, 63 | [] 64 | ) 65 | 66 | return ( 67 | 81 | ) 82 | } 83 | 84 | /****************************************UTILS*****************************************/ 85 | 86 | const firstQuery = ` 87 | query { 88 | StockPriceForAmazon: stocks ( 89 | order_by: { 90 | created: desc 91 | } 92 | where: { 93 | ticker: { 94 | _eq: "AMZN" 95 | } 96 | } 97 | limit: 1000 98 | ) { 99 | data_t: created 100 | data_y: price 101 | ticker 102 | } 103 | } 104 | `; 105 | 106 | const lastEventSubscription = ` 107 | subscription { 108 | StockPriceForAmazon: stocks ( 109 | order_by: { 110 | created: desc 111 | } 112 | where: { 113 | ticker: { 114 | _eq: "AMZN" 115 | } 116 | } 117 | limit: 1 118 | ) { 119 | data_t: created 120 | } 121 | } 122 | ` 123 | 124 | const fetchMoreQuery = ` 125 | query ($time: timestamptz) { 126 | StockPriceForAmazon: stocks ( 127 | order_by: { 128 | created: desc 129 | } 130 | where: { 131 | _and: [ 132 | { 133 | ticker: { 134 | _eq: "AMZN" 135 | } 136 | }, 137 | { 138 | created: { 139 | _gt: $time 140 | } 141 | } 142 | ] 143 | } 144 | ) { 145 | data_t: created 146 | data_y: price 147 | ticker 148 | } 149 | } 150 | ` 151 | 152 | const HighlightedSubscription = () => ( 153 | 157 | { 158 | ` 159 | # first query to load last 1000 data points${firstQuery} 160 | 161 | # subscription to detect any change in the database${lastEventSubscription} 162 | 163 | # fetch data newer than the locally existing data${fetchMoreQuery} 164 | ` 165 | } 166 | 167 | ) 168 | 169 | const RealtimeTimeseriesChart = ({ path }) => { 170 | return ( 171 |
172 |
173 |
174 |

Timeseries chart (with mock data)

175 |
176 |
177 | 178 |
179 |
180 | 181 | { 182 | client => 183 | } 184 | 185 |
186 |
187 |
188 | View source 189 |
190 |
191 |
192 |
193 | ) 194 | } 195 | 196 | const lineChartOptions = { 197 | chartType: 'line', 198 | fill: false, 199 | borderColor: 'brown', 200 | pointBackgroundColor: 'brown', 201 | showLine: false 202 | } 203 | 204 | export { RealtimeTimeseriesChart }; 205 | -------------------------------------------------------------------------------- /example/app/src/charts/StyledBarChart.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Bar } from 'react-chartjs-2'; 3 | import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; 4 | import SyntaxHighlighter from 'react-syntax-highlighter'; 5 | import graphql2chartjs from 'graphql2chartjs'; 6 | import { Query } from 'react-apollo'; 7 | import gql from 'graphql-tag'; 8 | 9 | const query = ` 10 | query { 11 | ArticleLikes: article_stats { 12 | id 13 | label: title 14 | data: num_likes 15 | } 16 | } 17 | `; 18 | 19 | // Chart component 20 | const Chart = ({ query }) => ( 21 | 24 | { 25 | ({data, error, loading}) => { 26 | if (loading || error) { 27 | return
Please wait
; 28 | } 29 | // create graphql2chartjs instance 30 | const g2c = new graphql2chartjs(); 31 | // add graphql data to graphql2chartjs instance while adding the backgroundcolor property 32 | g2c.add(data, (datasetName, dataPoint) => ({ 33 | ...dataPoint, 34 | chartType: 'bar', 35 | backgroundColor: '#44c0c1', 36 | })); 37 | // render chart with g2c data :) 38 | return ( 39 | 40 | ) 41 | } 42 | } 43 |
44 | ) 45 | 46 | /****************************************UTILS*****************************************/ 47 | 48 | const HighlightedQuery = ({ query }) => ( 49 | 53 | {query} 54 | 55 | ) 56 | 57 | const StyledBarChart = ({ path }) => { 58 | return ( 59 |
60 |
61 |
62 |

Styled bar chart

63 |
64 |
65 | 66 |
67 |
68 | 69 |
70 |
71 |
72 | View source 73 |
74 |
75 |
76 | ) 77 | } 78 | 79 | export { StyledBarChart }; 80 | -------------------------------------------------------------------------------- /example/app/src/charts/index.js: -------------------------------------------------------------------------------- 1 | export { BasicBarChart } from './BasicBarChart'; 2 | export { StyledBarChart } from './StyledBarChart'; 3 | export { MultiDatasetBarChart } from './MultiDatasetBarChart'; 4 | export { MixedLineBarChart } from './MixedLineBarChart'; 5 | export { LiveChart } from './LiveChart'; 6 | export { RealtimeTimeseriesChart } from './RealtimeTimeseriesChart'; 7 | -------------------------------------------------------------------------------- /example/app/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 5 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 6 | sans-serif; 7 | -webkit-font-smoothing: antialiased; 8 | -moz-osx-font-smoothing: grayscale; 9 | } 10 | 11 | code { 12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 13 | monospace; 14 | } 15 | -------------------------------------------------------------------------------- /example/app/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import { ApolloClient } from 'apollo-client'; 6 | import { ApolloProvider } from 'react-apollo'; 7 | import { WebSocketLink } from 'apollo-link-ws'; 8 | import { InMemoryCache } from 'apollo-cache-inmemory'; 9 | 10 | const link = new WebSocketLink({ 11 | uri: 'wss://graphql2chartjs.hasura.app/v1/graphql', 12 | options: { 13 | reconnect: true 14 | } 15 | }) 16 | 17 | const cache = new InMemoryCache(); 18 | 19 | const client = new ApolloClient({ 20 | link, 21 | cache 22 | }); 23 | 24 | ReactDOM.render( 25 | ( 26 | 27 | 28 | 29 | ), 30 | document.getElementById('root') 31 | ); 32 | -------------------------------------------------------------------------------- /example/app/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/hasura/config.yaml: -------------------------------------------------------------------------------- 1 | endpoint: http://localhost:8080 2 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552117082230_init.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE public.articles ( 2 | id integer NOT NULL, 3 | title text NOT NULL, 4 | created timestamp with time zone DEFAULT now() NOT NULL, 5 | length integer NOT NULL 6 | ); 7 | 8 | 9 | CREATE SEQUENCE public.article_id_seq 10 | AS integer 11 | START WITH 1 12 | INCREMENT BY 1 13 | NO MINVALUE 14 | NO MAXVALUE 15 | CACHE 1; 16 | 17 | 18 | CREATE TABLE public.comments ( 19 | uuid uuid DEFAULT public.gen_random_uuid() NOT NULL, 20 | article_id integer NOT NULL, 21 | comment text NOT NULL, 22 | created timestamp with time zone DEFAULT now() NOT NULL 23 | ); 24 | 25 | 26 | 27 | CREATE TABLE public.likes ( 28 | uuid uuid DEFAULT public.gen_random_uuid() NOT NULL, 29 | article_id integer NOT NULL, 30 | created timestamp with time zone DEFAULT now() NOT NULL 31 | ); 32 | 33 | 34 | 35 | CREATE VIEW public.article_stats AS 36 | SELECT a.id, 37 | a.title, 38 | a.length, 39 | l.count AS num_likes, 40 | c.count AS num_comments 41 | FROM public.articles a, 42 | ( SELECT likes.article_id, 43 | count(likes.uuid) AS count 44 | FROM public.likes 45 | GROUP BY likes.article_id) l, 46 | ( SELECT comments.article_id, 47 | count(comments.uuid) AS count 48 | FROM public.comments 49 | GROUP BY comments.article_id) c 50 | WHERE ((a.id = l.article_id) AND (a.id = c.article_id)); 51 | 52 | 53 | 54 | CREATE TABLE public.stocks ( 55 | ticker text NOT NULL, 56 | price numeric NOT NULL, 57 | created timestamp with time zone DEFAULT now() NOT NULL 58 | ); 59 | 60 | 61 | 62 | ALTER TABLE ONLY public.articles ALTER COLUMN id SET DEFAULT nextval('public.article_id_seq'::regclass); 63 | 64 | ALTER TABLE ONLY public.articles 65 | ADD CONSTRAINT article_pkey PRIMARY KEY (id); 66 | 67 | 68 | ALTER TABLE ONLY public.comments 69 | ADD CONSTRAINT comments_pkey PRIMARY KEY (uuid); 70 | 71 | 72 | ALTER TABLE ONLY public.likes 73 | ADD CONSTRAINT likes_pkey PRIMARY KEY (uuid); 74 | 75 | ALTER TABLE ONLY public.stocks 76 | ADD CONSTRAINT stocks_pkey PRIMARY KEY (ticker); 77 | 78 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552117082230_init.up.yaml: -------------------------------------------------------------------------------- 1 | - type: replace_metadata 2 | args: {"functions":[],"remote_schemas":[],"tables":[{"table":"article_stats","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[{"role":"anonymous","comment":null,"permission":{"allow_aggregations":false,"columns":["id","title","length","num_likes","num_comments"],"filter":{}}}],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"comments","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"stocks","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[{"role":"anonymous","comment":null,"permission":{"allow_aggregations":false,"columns":["ticker","price","created"],"filter":{}}}],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"articles","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"likes","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} 3 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552349794748_create_relationship_comments_public_table_articles.down.yaml: -------------------------------------------------------------------------------- 1 | - args: 2 | relationship: comments 3 | table: 4 | name: articles 5 | schema: public 6 | type: drop_relationship 7 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552349794748_create_relationship_comments_public_table_articles.up.yaml: -------------------------------------------------------------------------------- 1 | - args: 2 | name: comments 3 | table: 4 | name: articles 5 | schema: public 6 | using: 7 | manual_configuration: 8 | column_mapping: 9 | id: article_id 10 | remote_table: 11 | name: comments 12 | schema: public 13 | type: create_array_relationship 14 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552436653783_alter_table_public_stocks_add_column_uuid.down.yaml: -------------------------------------------------------------------------------- 1 | - args: 2 | sql: ALTER TABLE "public"."stocks" DROP COLUMN "uuid" 3 | type: run_sql 4 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552436653783_alter_table_public_stocks_add_column_uuid.up.yaml: -------------------------------------------------------------------------------- 1 | - args: 2 | sql: CREATE EXTENSION IF NOT EXISTS pgcrypto; 3 | type: run_sql 4 | - args: 5 | sql: ALTER TABLE "public"."stocks" ADD COLUMN "uuid" uuid NOT NULL DEFAULT gen_random_uuid() 6 | type: run_sql 7 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552436714359_run_sql_migration.down.yaml: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /example/hasura/migrations/1552436714359_run_sql_migration.up.yaml: -------------------------------------------------------------------------------- 1 | - args: 2 | cascade: false 3 | sql: |- 4 | alter table stocks drop constraint stocks_pkey; 5 | alter table stocks add constraint stocks_pkey primary key (uuid) 6 | type: run_sql 7 | -------------------------------------------------------------------------------- /example/scripts/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /example/scripts/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | -------------------------------------------------------------------------------- /example/scripts/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8 2 | WORKDIR /usr/src/app 3 | COPY package*.json ./ 4 | RUN npm install 5 | COPY . . 6 | CMD [ "node", "index.js" ] -------------------------------------------------------------------------------- /example/scripts/README.md: -------------------------------------------------------------------------------- 1 | Scripts that run to keep changing the data in the database. 2 | 3 | ``` 4 | ADMIN_SECRET= node index.js 5 | ``` 6 | 7 | ``` 8 | docker build -t g2c-stocks-script:v1 . 9 | docker run -e ADMIN_SECRET= g2c-stocks-script:v1 10 | ``` 11 | -------------------------------------------------------------------------------- /example/scripts/index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const fetch = require('node-fetch'); 3 | 4 | const trendVars = { 5 | minor: 1, 6 | major: 10 7 | }; 8 | 9 | let companies = [ 10 | {ticker: 'AMZN', price: 821.66}, 11 | {ticker: 'FB', price: 490.89}, 12 | {ticker: 'AAPL', price: 853.23}, 13 | {ticker: 'GOOG', price: 829.36}, 14 | {ticker: 'MSFT', price: 871.95} 15 | ]; 16 | 17 | // Set up minor trend (updates every half second) 18 | const changeMinor = () => { 19 | companies = companies.map((c) => { 20 | return { 21 | ticker: c.ticker, 22 | price: c.price + (Math.random() * 2) - 1 23 | }; 24 | }); 25 | }; 26 | setInterval(changeMinor, 500); 27 | 28 | // Set up major trend (updates every 5seconds) 29 | const changeMajor = () => { 30 | companies = companies.map((c) => { 31 | return { 32 | ticker: c.ticker, 33 | price: c.price + (Math.random() * 20) - 10 34 | }; 35 | }); 36 | }; 37 | setInterval(changeMajor, 5000); 38 | 39 | // Update stock prices 40 | const updatePrices = () => { 41 | fetch( 42 | 'https://graphql2chartjs.hasura.app/v1/graphql', 43 | { 44 | method: 'POST', 45 | body: JSON.stringify({ 46 | query: ` 47 | mutation($data: [stocks_insert_input!]!) { 48 | insert_stocks(objects: $data) { 49 | affected_rows 50 | } 51 | } 52 | `, 53 | variables: { 54 | data: companies 55 | } 56 | }), 57 | headers: { 58 | 'x-hasura-admin-secret': process.env.ADMIN_SECRET 59 | } 60 | } 61 | ).then((resp) => resp.json()).then((r) => { 62 | console.log(JSON.stringify(r, null, 2)); 63 | setTimeout(updatePrices, 1000); 64 | }); 65 | }; 66 | 67 | updatePrices(); 68 | -------------------------------------------------------------------------------- /example/scripts/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scripts", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "dotenv": { 8 | "version": "6.2.0", 9 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", 10 | "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" 11 | }, 12 | "node-fetch": { 13 | "version": "2.3.0", 14 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", 15 | "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /example/scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scripts", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "author": "", 9 | "license": "ISC", 10 | "dependencies": { 11 | "dotenv": "^6.2.0", 12 | "node-fetch": "^2.3.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /example/scripts/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | dotenv@^6.2.0: 6 | version "6.2.0" 7 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" 8 | 9 | node-fetch@^2.3.0: 10 | version "2.3.0" 11 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" 12 | -------------------------------------------------------------------------------- /how-it-works.md: -------------------------------------------------------------------------------- 1 | ## How it works 2 | 3 | ### Motivation 4 | 5 | We started using ChartJS with GraphQL so that we could leverage GraphQL's realtime subscriptions to build realtime charts. Soon enough we realised that we can automate this tedious procedure of restructuring the GraphQL data to a form that ChartJS expects. 6 | 7 | The idea behind this tool is to generate ChartJS compliant `data` object from your GraphQL response by simply adding a few aliases in your GraphQL query. 8 | 9 | ### GraphQL Aliasing 10 | 11 | GraphQL gives you the power of aliasing the response fields with custom names. Lets look at a simple GraphQL query. 12 | 13 | ```gql 14 | query { 15 | rootField { 16 | field1 17 | field2 18 | } 19 | } 20 | 21 | ``` 22 | 23 | The response to this query would be of the form: 24 | 25 | ```json 26 | { 27 | "data": { 28 | "rootField": [ 29 | { 30 | "field1": "value 1", 31 | "field2": "value 2" 32 | } 33 | ] 34 | } 35 | } 36 | ``` 37 | 38 | Now, when we alias the above GraphQL query like so: 39 | 40 | ```gql 41 | query { 42 | aliasedRootField: rootField { 43 | aliasedField1: field1 44 | aliasedField2: field2 45 | } 46 | } 47 | ``` 48 | 49 | The response would be: 50 | 51 | ``` 52 | { 53 | "data": { 54 | "aliasedRootField": { 55 | "aliasedField1": 'value 1', 56 | "aliasedField2": 'value 2' 57 | } 58 | } 59 | } 60 | ``` 61 | 62 | ### ChartJS API 63 | 64 | Most of the ChartJS charts expect a data object of the form: 65 | 66 | ```js 67 | { 68 | "labels": ["label1", "label2", ..., "label10"], // list of strings 69 | "datasets": [ // list of custom datasets with their properties 70 | { 71 | "data": [1334, 4314, ..., 2356], 72 | "backgroundColor": ['red', "blue", ..., "brown"], 73 | "borderColor": ['red', "blue", ..., "brown"], 74 | "fill": false 75 | } 76 | ] 77 | } 78 | ``` 79 | 80 | ### The graphql2chartjs function 81 | 82 | The `graphql2chartjs` function i.e. the default export of this library accepts two arguments: 83 | 1. **type**: (String) Type of the chart; Eg. `bar`, `line`, `pie` 84 | 2. **graphqlData**: [Object] This should be an object with each field having its value as a list of data points. 85 | 86 | You can directly feed the output of the `graphql2chartjs` function to your ChartJS instance. 87 | 88 | ```js 89 | 90 | const graphQLResponse = makeGraphQLQuery(); 91 | var chartType = 'bar'; 92 | 93 | var myChart = new Chart(ctx, { 94 | type: chartType, 95 | data: graphql2chartjs(chartType, graphQLResponse), 96 | options: {...} //custom options 97 | }); 98 | 99 | ``` 100 | 101 | ### How the restructuring works 102 | 103 | The `graphql2chartjs` function understands the API for each kind of chart that it supports. It constructs appropriate arrays mapping the indices of labels with other dataset properties. 104 | 105 | Lets consider this GraphQL response: 106 | 107 | ```json 108 | { 109 | "data": { 110 | "VideoGameFollowers": [ 111 | { 112 | "id": 1, 113 | "label": "Dota", 114 | "data": 427014, 115 | "pointBackgroundColor": "red", 116 | "fill": false 117 | }, 118 | { 119 | "id": 2, 120 | "label": "CS:GO", 121 | "data": 220006, 122 | "pointBackgroundColor": "yellow", 123 | "fill": false 124 | }, 125 | { 126 | "id": 3, 127 | "label": "NFS", 128 | "data": 71004, 129 | "pointBackgroundColor": "#3366ff", 130 | "fill": false 131 | }, 132 | { 133 | "id": 4, 134 | "label": "PUBG", 135 | "data": 129769, 136 | "pointBackgroundColor": "#330000", 137 | "fill": false 138 | }, 139 | { 140 | "id": 5, 141 | "label": "Quake 3", 142 | "data": 90808, 143 | "pointBackgroundColor": "green", 144 | "fill": false 145 | } 146 | ] 147 | } 148 | } 149 | ``` 150 | 151 | The above GraphQL response is restructured to the ChartJS `data` as follows: 152 | 153 | 1. It starts with initializing the `data` object as: 154 | 155 | ```json 156 | { 157 | "labels": [], 158 | "datasets": [] 159 | } 160 | ``` 161 | 162 | 2. It pushes a dataset with label as `humanized(rootFieldName)`. In this case, the root field is `VideoGameFollowers`. After inserting this step, the `data` object looks like 163 | 164 | ```json 165 | { 166 | "labels": [], 167 | "dataset": [ 168 | { 169 | "label": "Video game followers" 170 | } 171 | ] 172 | } 173 | ``` 174 | 175 | 3. It then iterates over the contents of this dataset. For each datapoint in the dataset, it pushes the label to the top level `labels` array and every other property to the dataset. So, after inserting the first data point, that is: 176 | ```json 177 | { 178 | "id": 1, 179 | "name": "Dota", 180 | "data": 427014, 181 | "pointBackgroundColor": "red", 182 | "fill": false 183 | } 184 | ``` 185 | 186 | the `data` object looks like: 187 | 188 | ```json 189 | { 190 | "labels": ["Dota"], 191 | "datasets": [ 192 | { 193 | "data": [427014], 194 | "pointBackgroundColor": ["red"], 195 | "fill": false 196 | } 197 | ] 198 | } 199 | ``` 200 | 201 | As you see, `pointBackgroundColor` and `data` get pushed in an array while `fill` gets set as a top level field. This is because `graphql2chartjs` function understands that the ChartJS API expects `pointBackgroundColor` to be an array and `fill` to be a simple flag. 202 | 203 | 4. It repeats the step above for every data point. The final `data` object would be: 204 | 205 | ```json 206 | { 207 | "labels": [ "Dota", "Cs:go", "Nfs", "Pubg", "Quake 3"], 208 | "datasets": [ 209 | { 210 | "label": "Video game followers", 211 | "id": 5, 212 | "data": [ 427014, 220006, 71004, 129769, 90808 ], 213 | "pointBackgroundColor": ["red", "yellow", "#3366ff", "#330000", "green"], 214 | "fill": false 215 | } 216 | ] 217 | } 218 | ``` 219 | 220 | Now you can pass this data object to your ChartJS instance and you will have a chart like this: 221 | 222 | ![line-chart-example](assets/readme-line-chart-example.png) 223 | 224 | # 225 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql2chartjs", 3 | "version": "0.3.1", 4 | "description": "", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "test": "node test/index.test.js", 8 | "compile": "rm -rf lib && ./node_modules/.bin/babel src --out-dir lib", 9 | "bundle": "rm -rf bundle/js && ./node_modules/.bin/rollup -c", 10 | "launch": "yarn compile && yarn bundle && yarn publish" 11 | }, 12 | "author": "Hasura", 13 | "repository": "hasura/graphql2chartjs", 14 | "license": "ISC", 15 | "dependencies": { 16 | "@babel/polyfill": "^7.2.5", 17 | "inflection": "^1.12.0" 18 | }, 19 | "devDependencies": { 20 | "@babel/cli": "^7.2.3", 21 | "@babel/core": "^7.3.4", 22 | "@babel/preset-env": "^7.3.4", 23 | "browserify": "^16.2.3", 24 | "rollup": "^1.3.1", 25 | "rollup-plugin-babel": "^4.3.2", 26 | "rollup-plugin-commonjs": "^9.2.1", 27 | "rollup-plugin-filesize": "^6.0.1", 28 | "rollup-plugin-multi-entry": "^2.1.0", 29 | "rollup-plugin-node-resolve": "^4.0.1", 30 | "rollup-plugin-progress": "^1.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import babel from 'rollup-plugin-babel'; 2 | import resolve from 'rollup-plugin-node-resolve'; 3 | import multiEntry from 'rollup-plugin-multi-entry'; 4 | import filesize from 'rollup-plugin-filesize'; 5 | import commonjs from 'rollup-plugin-commonjs'; 6 | import progress from 'rollup-plugin-progress'; 7 | 8 | let pluginOptions = [ 9 | multiEntry(), 10 | resolve({ 11 | module: true, 12 | jsnext: true, 13 | browser: true 14 | }), 15 | commonjs(), 16 | progress(), 17 | babel({ 18 | exclude: 'node_modules/**', 19 | }), 20 | filesize({ 21 | showGzippedSize: false, 22 | }) 23 | ]; 24 | 25 | export default [{ 26 | input: './src/index.js', 27 | output: { 28 | name: 'main', // for external calls (need exports) 29 | file: 'bundle/js/index.js', 30 | format: 'umd', 31 | }, 32 | moduleName: 'graphql2chartjs', 33 | plugins: pluginOptions, 34 | }]; 35 | -------------------------------------------------------------------------------- /src/array-fields.js: -------------------------------------------------------------------------------- 1 | const line = { 2 | data: true, 3 | borderDash: true, 4 | pointBackgroundColor: true, 5 | pointBorderColor: true, 6 | pointBorderWidth: true, 7 | pointRadius: true, 8 | pointStyle: true, 9 | pointRotation: true, 10 | pointHitRadius: true, 11 | pointHoverBackgroundColor: true, 12 | pointHoverBorderColor: true, 13 | pointHoverBorderWidth: true, 14 | pointHoverRadius: true, 15 | }; 16 | 17 | const bar = { 18 | data: true, 19 | backgroundColor: true, 20 | borderColor: true, 21 | borderWidth: true, 22 | hoverBackgroundColor: true, 23 | hoverBorderColor: true, 24 | hoverBorderWidth: true 25 | }; 26 | 27 | const pie = { 28 | data: true, 29 | backgroundColor: true, 30 | borderColor: true, 31 | borderWidth: true, 32 | hoverBackgroundColor: true, 33 | hoverBorderColor: true, 34 | hoverBorderWidth: true 35 | } 36 | 37 | const polar = { 38 | data: true, 39 | backgroundColor: true, 40 | borderColor: true, 41 | borderWidth: true, 42 | hoverBackgroundColor: true, 43 | hoverBorderColor: true, 44 | hoverBorderWidth: true 45 | } 46 | 47 | const scatter = { 48 | borderDash: true, 49 | pointBackgroundColor: true, 50 | pointBorderColor: true, 51 | pointBorderWidth: true, 52 | pointRadius: true, 53 | pointStyle: true, 54 | pointRotation: true, 55 | pointHitRadius: true, 56 | pointHoverBackgroundColor: true, 57 | pointHoverBorderColor: true, 58 | pointHoverBorderWidth: true, 59 | pointHoverRadius: true, 60 | }; 61 | 62 | const bubble = { 63 | borderDash: true, 64 | pointBackgroundColor: true, 65 | pointBorderColor: true, 66 | pointBorderWidth: true, 67 | pointRadius: true, 68 | pointStyle: true, 69 | pointRotation: true, 70 | pointHitRadius: true, 71 | pointHoverBackgroundColor: true, 72 | pointHoverBorderColor: true, 73 | pointHoverBorderWidth: true, 74 | pointHoverRadius: true, 75 | }; 76 | 77 | const radar = { 78 | data: true, 79 | borderDash: true, 80 | pointBackgroundColor: true, 81 | pointBorderColor: true, 82 | pointBorderWidth: true, 83 | pointRadius: true, 84 | pointStyle: true, 85 | pointRotation: true, 86 | pointHitRadius: true, 87 | pointHoverBackgroundColor: true, 88 | pointHoverBorderColor: true, 89 | pointHoverBorderWidth: true, 90 | pointHoverRadius: true, 91 | } 92 | 93 | module.exports = { 94 | line, 95 | bar, 96 | scatter, 97 | bubble, 98 | pie, 99 | polar, 100 | radar 101 | }; -------------------------------------------------------------------------------- /src/converter.js: -------------------------------------------------------------------------------- 1 | const inflection = require('inflection'); 2 | const arrayFields = require('./array-fields'); 3 | 4 | const chartTypeMap = { 5 | 'line': arrayFields.line, 6 | 'bar': arrayFields.bar, 7 | 'radar': arrayFields.radar, 8 | 'polarArea': arrayFields.polar, 9 | 'doughnut': arrayFields.pie, 10 | 'pie': arrayFields.pie, 11 | 'bubble': arrayFields.bubble, 12 | 'scatter': arrayFields.scatter 13 | }; 14 | 15 | function convert(graphqlData, chartType) { 16 | const data = { 17 | labels: [], 18 | datasets: [], 19 | }; 20 | const dataSets = Object.keys(graphqlData); 21 | const numDataSets = dataSets.length; 22 | for (let i = 0; i < numDataSets; i++) { 23 | const dataSetName = dataSets[i]; 24 | const dataSet = graphqlData[dataSetName]; 25 | data.datasets.push({ 26 | label: inflection.transform(dataSetName, ['underscore', 'humanize']), 27 | data: [] 28 | }); 29 | const dataSetSize = dataSet.length; 30 | for (let j = 0; j < dataSetSize; j++) { 31 | const element = dataSet[j]; 32 | let isRadiusDefined = element.data_r !== undefined; 33 | if (element.data_x !== undefined || element.data_t !== undefined) { 34 | if (element.data_x) { 35 | const dataPoint = { 36 | x: element.data_x, 37 | y: element.data_y, 38 | } 39 | if (isRadiusDefined) { 40 | dataPoint.r = element.data_r; 41 | } 42 | data.datasets[i].data.push(dataPoint); 43 | } else if (element.data_t !== undefined) { 44 | data.datasets[i].data.push(); 45 | let dataPoint = { 46 | t: element.data_t, 47 | y: element.data_y 48 | }; 49 | if (isRadiusDefined) { 50 | dataPoint[r] = element.data_r; 51 | } 52 | data.datasets[i].data.push(dataPoint); 53 | } 54 | } 55 | const arrayFieldsByType = element.chartType ? chartTypeMap[element.chartType] : chartTypeMap[chartType]; 56 | Object.keys(element).forEach(property => { 57 | if (property === 'data_x' || property === 'data_t' || property === 'data_y' || property === 'data_r') { 58 | return; 59 | } 60 | if (property === 'label') { 61 | if (i === 0) { 62 | data.labels.push(element[property]); 63 | } 64 | } else if (arrayFieldsByType[property]) { 65 | if (!data.datasets[i][property]) { 66 | data.datasets[i][property] = []; 67 | } 68 | data.datasets[i][property].push(element[property]); 69 | } else { 70 | data.datasets[i][property === 'chartType' ? 'type' : property] = element[property]; 71 | } 72 | }); 73 | } 74 | }; 75 | return data; 76 | } 77 | 78 | module.exports = convert; 79 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const converter = require('./converter'); 2 | 3 | function convert (type, graphqlData) { 4 | try { 5 | return converter(graphqlData, type); 6 | } catch (e) { 7 | console.error('unexpected error in graphql2chartjs; please check your graphql response'); 8 | console.error(e); 9 | } 10 | } 11 | 12 | class Graphql2Chartjs { 13 | constructor(graphqlData, arg) { 14 | this.handleInit(graphqlData, arg); 15 | } 16 | 17 | handleInit (graphqlData, arg) { 18 | this.data = {}; 19 | if (!graphqlData) { 20 | return; 21 | } 22 | if (typeof arg === 'string') { 23 | this.gqlData = graphqlData; 24 | this.chartType = arg; 25 | this.data = convert(arg, graphqlData); 26 | } else if (typeof arg === 'function') { 27 | this.transformer = arg; 28 | this.gqlData = this.transformGqlData(graphqlData, arg); 29 | this.data = convert(this.chartType, this.gqlData); 30 | } else { 31 | console.error('invalid second argument to graphql2chartjs'); 32 | } 33 | } 34 | 35 | transformGqlData(graphqlData, transformer) { 36 | const transformedGqlData = {}; 37 | Object.keys(graphqlData).forEach(datasetName => { 38 | if (Array.isArray(graphqlData[datasetName])) { 39 | transformedGqlData[datasetName] = graphqlData[datasetName].map((dataPoint) => { 40 | return { ...dataPoint, ...transformer(datasetName, dataPoint) } 41 | }); 42 | } 43 | }); 44 | return transformedGqlData; 45 | } 46 | 47 | reset (graphqlData, arg) { 48 | this.handleInit(graphqlData, arg); 49 | } 50 | 51 | add (graphqlData, arg) { 52 | if (!graphqlData) { 53 | console.warn('invalid graphql data provided to Graphql2Chartjs'); 54 | return; 55 | } 56 | if (!this.gqlData || (this.gqlData && Object.keys(this.gqlData).length === 0)) { 57 | this.handleInit(graphqlData, arg); 58 | return; 59 | } 60 | this.mergeData( 61 | (typeof arg === 'function') ? this.chartType : arg, 62 | (typeof arg === 'function') ? this.transformGqlData(graphqlData, arg) : graphqlData 63 | ); 64 | } 65 | 66 | reform (transformer) { 67 | this.gqlData = this.transformGqlData(this.gqlData, transformer); 68 | this.data = convert(this.chartType, this.gqlData); 69 | } 70 | 71 | mergeData(type, graphqlData) { 72 | const oldGqlData = { ...this.gqlData }; 73 | Object.keys(graphqlData).forEach(dsName => { 74 | if (oldGqlData[dsName]) { 75 | graphqlData[dsName].forEach((dp) => { 76 | const oldDs = oldGqlData[dsName]; 77 | let oldDsLength = oldGqlData[dsName].length; 78 | let refIndex; 79 | for (var _i = oldDs.length - 1; _i >= 0; _i--) { 80 | let refDp = oldDs[_i]; 81 | if (refDp.label && refDp.label === dp.label) { 82 | refIndex = _i; 83 | break; 84 | } else if (refDp.data_r !== undefined) { 85 | if (refDp.data_x === dp.data_x && refDp.data_y === dp.data_y && refDp.data_r === dp.data_r) { 86 | refIndex = _i; 87 | break; 88 | } 89 | } else if (refDp.data_x !== undefined) { 90 | if (refDp.data_x === dp.data_x && refDp.data_y === dp.data_y) { 91 | refIndex = _i; 92 | break; 93 | } 94 | } else if (refDp.data_t !== undefined) { 95 | if (refDp.data_t === dp.data_t && refDp.data_y === dp.data_y) { 96 | refIndex = _i; 97 | break; 98 | } 99 | } 100 | } 101 | if (!refIndex) { 102 | refIndex = oldDsLength; 103 | oldDsLength++; 104 | oldGqlData[dsName] = [...oldGqlData[dsName], { ...dp }] 105 | } else { 106 | oldGqlData[dsName][refIndex] = {...oldGqlData[dsName][refIndex], ...dp}; 107 | } 108 | }) 109 | } else { 110 | oldGqlData[dsName] = graphqlData[dsName]; 111 | } 112 | }) 113 | this.gqlData = oldGqlData; 114 | this.data = convert(type, oldGqlData); 115 | } 116 | } 117 | if ((typeof window) != 'undefined') { 118 | window.Graphql2Chartjs = Graphql2Chartjs; 119 | window.graphql2chartjs = Graphql2Chartjs; 120 | window.GraphQL2ChartJS = Graphql2Chartjs; 121 | window.Graphql2chartjs = Graphql2Chartjs; 122 | } 123 | module.exports = Graphql2Chartjs; 124 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | const Graphql2Chartjs = require('../src/index'); 2 | const { vg1, vg2, vg3, scatter1, scatter2 } = require('./data.test') 3 | 4 | const logTestResult = (condition, message) => { 5 | if (condition) { 6 | console.log(`Passed: ${message}`); 7 | } else { 8 | console.log(`Failed: ${message}`); 9 | process.exit(1); 10 | } 11 | } 12 | 13 | const runTests = () => { 14 | console.log('Running tests \n\n'); 15 | let g2c = new Graphql2Chartjs(); 16 | logTestResult((Object.keys(g2c.data).length === 0), 'Empty initialization'); 17 | g2c = new Graphql2Chartjs() 18 | g2c.add(vg1.data, 'line') 19 | logTestResult( 20 | ( 21 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1, 22 | g2c.data.datasets[0].fill === false && 23 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 24 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 25 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 26 | g2c.data.datasets[0].data[3] === 129769 && g2c.data.datasets[0].pointBackgroundColor[3] === "#330000" && 27 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" && 28 | true 29 | ), 30 | 'Initialization with data without transformer' 31 | ) 32 | g2c = new Graphql2Chartjs(); 33 | g2c.add(vg2.data, (dsName, dp) => { 34 | return { 35 | ...dp, fill: true, chartType: 'line' 36 | } 37 | }) 38 | logTestResult( 39 | ( 40 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1, 41 | g2c.data.datasets[0].fill === true && 42 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 43 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 44 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 45 | g2c.data.datasets[0].data[3] === 129222 && g2c.data.datasets[0].pointBackgroundColor[3] === "#330000" && 46 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" 47 | ), 48 | 'Initialization with data with transformer' 49 | ) 50 | g2c.add({ "VideoGameFollowers": [{ 51 | "id": 4, 52 | "label": "PUBG", 53 | "data": 129769, 54 | "pointBackgroundColor": "#333333", 55 | }]}, 'line') 56 | logTestResult( 57 | ( 58 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1, 59 | g2c.data.datasets[0].fill === true && 60 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 61 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 62 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 63 | g2c.data.datasets[0].data[3] === 129769 && g2c.data.datasets[0].pointBackgroundColor[3] === "#333333" && 64 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" 65 | ), 66 | 'Update without transformer' 67 | ) 68 | g2c.add({ "VideoGameFollowers": [{ 69 | "id": 4, 70 | "label": "PUBG", 71 | "data": 129769, 72 | "pointBackgroundColor": "#333333", 73 | }]}, (ds, dp) => { 74 | return { 75 | pointBackgroundColor: "#111111", 76 | data: 120000, 77 | chartType: 'line' 78 | } 79 | }) 80 | logTestResult( 81 | ( 82 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1 && 83 | g2c.data.datasets[0].fill === true && 84 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 85 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 86 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 87 | g2c.data.datasets[0].data[3] === 120000 && g2c.data.datasets[0].pointBackgroundColor[3] === "#111111" && 88 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" 89 | ), 90 | 'Update with transformer' 91 | ) 92 | g2c.add(scatter1.data, 'line'); 93 | logTestResult( 94 | ( 95 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 3 && 96 | g2c.data.datasets[1].backgroundColor === "purple" && 97 | g2c.data.datasets[2].backgroundColor === "orange" 98 | ), 99 | 'Update by adding a new dataset' 100 | ) 101 | 102 | g2c.reform((dp, ds) => { 103 | return { 104 | chartType: 'line' 105 | } 106 | }) 107 | 108 | g2c.add(scatter1.data, (ds, dp) => { 109 | if (ds === 'DataSet2') { 110 | return { 111 | ...dp, 112 | backgroundColor: 'red', 113 | chartType: 'line' 114 | }; 115 | } else if (ds === 'DataSet1') { 116 | return { 117 | ...dp, 118 | backgroundColor: 'green', 119 | chartType: 'line' 120 | }; 121 | 122 | } 123 | return dp; 124 | }); 125 | logTestResult( 126 | ( 127 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 3 && 128 | g2c.data.datasets[1].backgroundColor === "green" && 129 | g2c.data.datasets[2].backgroundColor === "red" 130 | ), 131 | 'Update by adding a new dataset with transformer' 132 | ) 133 | 134 | g2c.reset(scatter1.data, (ds, dp) => { 135 | if (ds === 'DataSet2') { 136 | return { 137 | ...dp, 138 | backgroundColor: 'brown', 139 | chartType: 'scatter' 140 | }; 141 | } else if (ds === 'DataSet1') { 142 | return { 143 | ...dp, 144 | backgroundColor: 'blue', 145 | chartType: 'bubble' 146 | }; 147 | } 148 | return dp; 149 | }); 150 | logTestResult( 151 | ( 152 | g2c.data.labels.length === 0 && g2c.data.datasets.length === 2 && 153 | g2c.data.datasets[1].backgroundColor === "brown" && 154 | g2c.data.datasets[0].backgroundColor === "blue" 155 | ), 156 | 'Reset scatter new data' 157 | ) 158 | 159 | g2c.reset(vg3.data, (ds, db) => { 160 | return { 161 | chartType: 'bar' 162 | } 163 | }) 164 | logTestResult( 165 | ( 166 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1 && 167 | g2c.data.datasets[0].backgroundColor[0] === "red" && g2c.data.datasets[0].data[0] === 427014 && 168 | g2c.data.datasets[0].backgroundColor[1] === "yellow" && g2c.data.datasets[0].data[1] === 220006 && 169 | g2c.data.datasets[0].backgroundColor[2] === "#3366ff" && g2c.data.datasets[0].data[2] === 71004 && 170 | g2c.data.datasets[0].backgroundColor[3] === "#330000" && g2c.data.datasets[0].data[3] === 129769 && 171 | g2c.data.datasets[0].backgroundColor[4] === "green" && g2c.data.datasets[0].data[4] === 90808 172 | ), 173 | 'Reset with bar data' 174 | ) 175 | 176 | g2c = new Graphql2Chartjs(vg1.data, 'line'); 177 | logTestResult( 178 | ( 179 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1, 180 | g2c.data.datasets[0].fill === false && 181 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 182 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 183 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 184 | g2c.data.datasets[0].data[3] === 129769 && g2c.data.datasets[0].pointBackgroundColor[3] === "#330000" && 185 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" && 186 | true 187 | ), 188 | 'Initialization with constructor' 189 | ) 190 | 191 | g2c = new Graphql2Chartjs(vg2.data, (dsName, dp) => { 192 | return { 193 | ...dp, fill: true, chartType: 'line' 194 | } 195 | }) 196 | logTestResult( 197 | ( 198 | g2c.data.labels.length === 5 && g2c.data.datasets.length === 1, 199 | g2c.data.datasets[0].fill === true && 200 | g2c.data.datasets[0].data[0] === 427014 && g2c.data.datasets[0].pointBackgroundColor[0] === "red" && 201 | g2c.data.datasets[0].data[1] === 220006 && g2c.data.datasets[0].pointBackgroundColor[1] === "yellow" && 202 | g2c.data.datasets[0].data[2] === 71004 && g2c.data.datasets[0].pointBackgroundColor[2] === "#3366ff" && 203 | g2c.data.datasets[0].data[3] === 129222 && g2c.data.datasets[0].pointBackgroundColor[3] === "#330000" && 204 | g2c.data.datasets[0].data[4] === 90808 && g2c.data.datasets[0].pointBackgroundColor[4] === "green" 205 | ), 206 | 'Initialization with constructor with transformer' 207 | ) 208 | } 209 | 210 | runTests(); 211 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/cli@^7.2.3": 6 | version "7.2.3" 7 | resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.2.3.tgz#1b262e42a3e959d28ab3d205ba2718e1923cfee6" 8 | dependencies: 9 | commander "^2.8.1" 10 | convert-source-map "^1.1.0" 11 | fs-readdir-recursive "^1.1.0" 12 | glob "^7.0.0" 13 | lodash "^4.17.10" 14 | mkdirp "^0.5.1" 15 | output-file-sync "^2.0.0" 16 | slash "^2.0.0" 17 | source-map "^0.5.0" 18 | optionalDependencies: 19 | chokidar "^2.0.3" 20 | 21 | "@babel/code-frame@^7.0.0": 22 | version "7.0.0" 23 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 24 | dependencies: 25 | "@babel/highlight" "^7.0.0" 26 | 27 | "@babel/core@^7.3.4": 28 | version "7.3.4" 29 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" 30 | dependencies: 31 | "@babel/code-frame" "^7.0.0" 32 | "@babel/generator" "^7.3.4" 33 | "@babel/helpers" "^7.2.0" 34 | "@babel/parser" "^7.3.4" 35 | "@babel/template" "^7.2.2" 36 | "@babel/traverse" "^7.3.4" 37 | "@babel/types" "^7.3.4" 38 | convert-source-map "^1.1.0" 39 | debug "^4.1.0" 40 | json5 "^2.1.0" 41 | lodash "^4.17.11" 42 | resolve "^1.3.2" 43 | semver "^5.4.1" 44 | source-map "^0.5.0" 45 | 46 | "@babel/generator@^7.2.2": 47 | version "7.3.3" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.3.tgz#185962ade59a52e00ca2bdfcfd1d58e528d4e39e" 49 | dependencies: 50 | "@babel/types" "^7.3.3" 51 | jsesc "^2.5.1" 52 | lodash "^4.17.11" 53 | source-map "^0.5.0" 54 | trim-right "^1.0.1" 55 | 56 | "@babel/generator@^7.3.4": 57 | version "7.3.4" 58 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" 59 | dependencies: 60 | "@babel/types" "^7.3.4" 61 | jsesc "^2.5.1" 62 | lodash "^4.17.11" 63 | source-map "^0.5.0" 64 | trim-right "^1.0.1" 65 | 66 | "@babel/helper-annotate-as-pure@^7.0.0": 67 | version "7.0.0" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" 69 | dependencies: 70 | "@babel/types" "^7.0.0" 71 | 72 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": 73 | version "7.1.0" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" 75 | dependencies: 76 | "@babel/helper-explode-assignable-expression" "^7.1.0" 77 | "@babel/types" "^7.0.0" 78 | 79 | "@babel/helper-call-delegate@^7.1.0": 80 | version "7.1.0" 81 | resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" 82 | dependencies: 83 | "@babel/helper-hoist-variables" "^7.0.0" 84 | "@babel/traverse" "^7.1.0" 85 | "@babel/types" "^7.0.0" 86 | 87 | "@babel/helper-define-map@^7.1.0": 88 | version "7.1.0" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" 90 | dependencies: 91 | "@babel/helper-function-name" "^7.1.0" 92 | "@babel/types" "^7.0.0" 93 | lodash "^4.17.10" 94 | 95 | "@babel/helper-explode-assignable-expression@^7.1.0": 96 | version "7.1.0" 97 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" 98 | dependencies: 99 | "@babel/traverse" "^7.1.0" 100 | "@babel/types" "^7.0.0" 101 | 102 | "@babel/helper-function-name@^7.1.0": 103 | version "7.1.0" 104 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 105 | dependencies: 106 | "@babel/helper-get-function-arity" "^7.0.0" 107 | "@babel/template" "^7.1.0" 108 | "@babel/types" "^7.0.0" 109 | 110 | "@babel/helper-get-function-arity@^7.0.0": 111 | version "7.0.0" 112 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 113 | dependencies: 114 | "@babel/types" "^7.0.0" 115 | 116 | "@babel/helper-hoist-variables@^7.0.0": 117 | version "7.0.0" 118 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" 119 | dependencies: 120 | "@babel/types" "^7.0.0" 121 | 122 | "@babel/helper-member-expression-to-functions@^7.0.0": 123 | version "7.0.0" 124 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" 125 | dependencies: 126 | "@babel/types" "^7.0.0" 127 | 128 | "@babel/helper-module-imports@^7.0.0": 129 | version "7.0.0" 130 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" 131 | dependencies: 132 | "@babel/types" "^7.0.0" 133 | 134 | "@babel/helper-module-transforms@^7.1.0": 135 | version "7.2.2" 136 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" 137 | dependencies: 138 | "@babel/helper-module-imports" "^7.0.0" 139 | "@babel/helper-simple-access" "^7.1.0" 140 | "@babel/helper-split-export-declaration" "^7.0.0" 141 | "@babel/template" "^7.2.2" 142 | "@babel/types" "^7.2.2" 143 | lodash "^4.17.10" 144 | 145 | "@babel/helper-optimise-call-expression@^7.0.0": 146 | version "7.0.0" 147 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" 148 | dependencies: 149 | "@babel/types" "^7.0.0" 150 | 151 | "@babel/helper-plugin-utils@^7.0.0": 152 | version "7.0.0" 153 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" 154 | 155 | "@babel/helper-regex@^7.0.0": 156 | version "7.0.0" 157 | resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" 158 | dependencies: 159 | lodash "^4.17.10" 160 | 161 | "@babel/helper-remap-async-to-generator@^7.1.0": 162 | version "7.1.0" 163 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" 164 | dependencies: 165 | "@babel/helper-annotate-as-pure" "^7.0.0" 166 | "@babel/helper-wrap-function" "^7.1.0" 167 | "@babel/template" "^7.1.0" 168 | "@babel/traverse" "^7.1.0" 169 | "@babel/types" "^7.0.0" 170 | 171 | "@babel/helper-replace-supers@^7.1.0": 172 | version "7.2.3" 173 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" 174 | dependencies: 175 | "@babel/helper-member-expression-to-functions" "^7.0.0" 176 | "@babel/helper-optimise-call-expression" "^7.0.0" 177 | "@babel/traverse" "^7.2.3" 178 | "@babel/types" "^7.0.0" 179 | 180 | "@babel/helper-replace-supers@^7.3.4": 181 | version "7.3.4" 182 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13" 183 | dependencies: 184 | "@babel/helper-member-expression-to-functions" "^7.0.0" 185 | "@babel/helper-optimise-call-expression" "^7.0.0" 186 | "@babel/traverse" "^7.3.4" 187 | "@babel/types" "^7.3.4" 188 | 189 | "@babel/helper-simple-access@^7.1.0": 190 | version "7.1.0" 191 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" 192 | dependencies: 193 | "@babel/template" "^7.1.0" 194 | "@babel/types" "^7.0.0" 195 | 196 | "@babel/helper-split-export-declaration@^7.0.0": 197 | version "7.0.0" 198 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" 199 | dependencies: 200 | "@babel/types" "^7.0.0" 201 | 202 | "@babel/helper-wrap-function@^7.1.0": 203 | version "7.2.0" 204 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" 205 | dependencies: 206 | "@babel/helper-function-name" "^7.1.0" 207 | "@babel/template" "^7.1.0" 208 | "@babel/traverse" "^7.1.0" 209 | "@babel/types" "^7.2.0" 210 | 211 | "@babel/helpers@^7.2.0": 212 | version "7.3.1" 213 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9" 214 | dependencies: 215 | "@babel/template" "^7.1.2" 216 | "@babel/traverse" "^7.1.5" 217 | "@babel/types" "^7.3.0" 218 | 219 | "@babel/highlight@^7.0.0": 220 | version "7.0.0" 221 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 222 | dependencies: 223 | chalk "^2.0.0" 224 | esutils "^2.0.2" 225 | js-tokens "^4.0.0" 226 | 227 | "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": 228 | version "7.3.3" 229 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87" 230 | 231 | "@babel/parser@^7.3.4": 232 | version "7.3.4" 233 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" 234 | 235 | "@babel/plugin-proposal-async-generator-functions@^7.2.0": 236 | version "7.2.0" 237 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" 238 | dependencies: 239 | "@babel/helper-plugin-utils" "^7.0.0" 240 | "@babel/helper-remap-async-to-generator" "^7.1.0" 241 | "@babel/plugin-syntax-async-generators" "^7.2.0" 242 | 243 | "@babel/plugin-proposal-json-strings@^7.2.0": 244 | version "7.2.0" 245 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" 246 | dependencies: 247 | "@babel/helper-plugin-utils" "^7.0.0" 248 | "@babel/plugin-syntax-json-strings" "^7.2.0" 249 | 250 | "@babel/plugin-proposal-object-rest-spread@^7.3.4": 251 | version "7.3.4" 252 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654" 253 | dependencies: 254 | "@babel/helper-plugin-utils" "^7.0.0" 255 | "@babel/plugin-syntax-object-rest-spread" "^7.2.0" 256 | 257 | "@babel/plugin-proposal-optional-catch-binding@^7.2.0": 258 | version "7.2.0" 259 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" 260 | dependencies: 261 | "@babel/helper-plugin-utils" "^7.0.0" 262 | "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" 263 | 264 | "@babel/plugin-proposal-unicode-property-regex@^7.2.0": 265 | version "7.2.0" 266 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" 267 | dependencies: 268 | "@babel/helper-plugin-utils" "^7.0.0" 269 | "@babel/helper-regex" "^7.0.0" 270 | regexpu-core "^4.2.0" 271 | 272 | "@babel/plugin-syntax-async-generators@^7.2.0": 273 | version "7.2.0" 274 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" 275 | dependencies: 276 | "@babel/helper-plugin-utils" "^7.0.0" 277 | 278 | "@babel/plugin-syntax-json-strings@^7.2.0": 279 | version "7.2.0" 280 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" 281 | dependencies: 282 | "@babel/helper-plugin-utils" "^7.0.0" 283 | 284 | "@babel/plugin-syntax-object-rest-spread@^7.2.0": 285 | version "7.2.0" 286 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" 287 | dependencies: 288 | "@babel/helper-plugin-utils" "^7.0.0" 289 | 290 | "@babel/plugin-syntax-optional-catch-binding@^7.2.0": 291 | version "7.2.0" 292 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" 293 | dependencies: 294 | "@babel/helper-plugin-utils" "^7.0.0" 295 | 296 | "@babel/plugin-transform-arrow-functions@^7.2.0": 297 | version "7.2.0" 298 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" 299 | dependencies: 300 | "@babel/helper-plugin-utils" "^7.0.0" 301 | 302 | "@babel/plugin-transform-async-to-generator@^7.3.4": 303 | version "7.3.4" 304 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c" 305 | dependencies: 306 | "@babel/helper-module-imports" "^7.0.0" 307 | "@babel/helper-plugin-utils" "^7.0.0" 308 | "@babel/helper-remap-async-to-generator" "^7.1.0" 309 | 310 | "@babel/plugin-transform-block-scoped-functions@^7.2.0": 311 | version "7.2.0" 312 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" 313 | dependencies: 314 | "@babel/helper-plugin-utils" "^7.0.0" 315 | 316 | "@babel/plugin-transform-block-scoping@^7.3.4": 317 | version "7.3.4" 318 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4" 319 | dependencies: 320 | "@babel/helper-plugin-utils" "^7.0.0" 321 | lodash "^4.17.11" 322 | 323 | "@babel/plugin-transform-classes@^7.3.4": 324 | version "7.3.4" 325 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc" 326 | dependencies: 327 | "@babel/helper-annotate-as-pure" "^7.0.0" 328 | "@babel/helper-define-map" "^7.1.0" 329 | "@babel/helper-function-name" "^7.1.0" 330 | "@babel/helper-optimise-call-expression" "^7.0.0" 331 | "@babel/helper-plugin-utils" "^7.0.0" 332 | "@babel/helper-replace-supers" "^7.3.4" 333 | "@babel/helper-split-export-declaration" "^7.0.0" 334 | globals "^11.1.0" 335 | 336 | "@babel/plugin-transform-computed-properties@^7.2.0": 337 | version "7.2.0" 338 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" 339 | dependencies: 340 | "@babel/helper-plugin-utils" "^7.0.0" 341 | 342 | "@babel/plugin-transform-destructuring@^7.2.0": 343 | version "7.3.2" 344 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d" 345 | dependencies: 346 | "@babel/helper-plugin-utils" "^7.0.0" 347 | 348 | "@babel/plugin-transform-dotall-regex@^7.2.0": 349 | version "7.2.0" 350 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" 351 | dependencies: 352 | "@babel/helper-plugin-utils" "^7.0.0" 353 | "@babel/helper-regex" "^7.0.0" 354 | regexpu-core "^4.1.3" 355 | 356 | "@babel/plugin-transform-duplicate-keys@^7.2.0": 357 | version "7.2.0" 358 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" 359 | dependencies: 360 | "@babel/helper-plugin-utils" "^7.0.0" 361 | 362 | "@babel/plugin-transform-exponentiation-operator@^7.2.0": 363 | version "7.2.0" 364 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" 365 | dependencies: 366 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" 367 | "@babel/helper-plugin-utils" "^7.0.0" 368 | 369 | "@babel/plugin-transform-for-of@^7.2.0": 370 | version "7.2.0" 371 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" 372 | dependencies: 373 | "@babel/helper-plugin-utils" "^7.0.0" 374 | 375 | "@babel/plugin-transform-function-name@^7.2.0": 376 | version "7.2.0" 377 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" 378 | dependencies: 379 | "@babel/helper-function-name" "^7.1.0" 380 | "@babel/helper-plugin-utils" "^7.0.0" 381 | 382 | "@babel/plugin-transform-literals@^7.2.0": 383 | version "7.2.0" 384 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" 385 | dependencies: 386 | "@babel/helper-plugin-utils" "^7.0.0" 387 | 388 | "@babel/plugin-transform-modules-amd@^7.2.0": 389 | version "7.2.0" 390 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" 391 | dependencies: 392 | "@babel/helper-module-transforms" "^7.1.0" 393 | "@babel/helper-plugin-utils" "^7.0.0" 394 | 395 | "@babel/plugin-transform-modules-commonjs@^7.2.0": 396 | version "7.2.0" 397 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" 398 | dependencies: 399 | "@babel/helper-module-transforms" "^7.1.0" 400 | "@babel/helper-plugin-utils" "^7.0.0" 401 | "@babel/helper-simple-access" "^7.1.0" 402 | 403 | "@babel/plugin-transform-modules-systemjs@^7.3.4": 404 | version "7.3.4" 405 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861" 406 | dependencies: 407 | "@babel/helper-hoist-variables" "^7.0.0" 408 | "@babel/helper-plugin-utils" "^7.0.0" 409 | 410 | "@babel/plugin-transform-modules-umd@^7.2.0": 411 | version "7.2.0" 412 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" 413 | dependencies: 414 | "@babel/helper-module-transforms" "^7.1.0" 415 | "@babel/helper-plugin-utils" "^7.0.0" 416 | 417 | "@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": 418 | version "7.3.0" 419 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz#140b52985b2d6ef0cb092ef3b29502b990f9cd50" 420 | dependencies: 421 | regexp-tree "^0.1.0" 422 | 423 | "@babel/plugin-transform-new-target@^7.0.0": 424 | version "7.0.0" 425 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" 426 | dependencies: 427 | "@babel/helper-plugin-utils" "^7.0.0" 428 | 429 | "@babel/plugin-transform-object-super@^7.2.0": 430 | version "7.2.0" 431 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" 432 | dependencies: 433 | "@babel/helper-plugin-utils" "^7.0.0" 434 | "@babel/helper-replace-supers" "^7.1.0" 435 | 436 | "@babel/plugin-transform-parameters@^7.2.0": 437 | version "7.3.3" 438 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz#3a873e07114e1a5bee17d04815662c8317f10e30" 439 | dependencies: 440 | "@babel/helper-call-delegate" "^7.1.0" 441 | "@babel/helper-get-function-arity" "^7.0.0" 442 | "@babel/helper-plugin-utils" "^7.0.0" 443 | 444 | "@babel/plugin-transform-regenerator@^7.3.4": 445 | version "7.3.4" 446 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a" 447 | dependencies: 448 | regenerator-transform "^0.13.4" 449 | 450 | "@babel/plugin-transform-shorthand-properties@^7.2.0": 451 | version "7.2.0" 452 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" 453 | dependencies: 454 | "@babel/helper-plugin-utils" "^7.0.0" 455 | 456 | "@babel/plugin-transform-spread@^7.2.0": 457 | version "7.2.2" 458 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" 459 | dependencies: 460 | "@babel/helper-plugin-utils" "^7.0.0" 461 | 462 | "@babel/plugin-transform-sticky-regex@^7.2.0": 463 | version "7.2.0" 464 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" 465 | dependencies: 466 | "@babel/helper-plugin-utils" "^7.0.0" 467 | "@babel/helper-regex" "^7.0.0" 468 | 469 | "@babel/plugin-transform-template-literals@^7.2.0": 470 | version "7.2.0" 471 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" 472 | dependencies: 473 | "@babel/helper-annotate-as-pure" "^7.0.0" 474 | "@babel/helper-plugin-utils" "^7.0.0" 475 | 476 | "@babel/plugin-transform-typeof-symbol@^7.2.0": 477 | version "7.2.0" 478 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" 479 | dependencies: 480 | "@babel/helper-plugin-utils" "^7.0.0" 481 | 482 | "@babel/plugin-transform-unicode-regex@^7.2.0": 483 | version "7.2.0" 484 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" 485 | dependencies: 486 | "@babel/helper-plugin-utils" "^7.0.0" 487 | "@babel/helper-regex" "^7.0.0" 488 | regexpu-core "^4.1.3" 489 | 490 | "@babel/polyfill@^7.2.5": 491 | version "7.2.5" 492 | resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" 493 | dependencies: 494 | core-js "^2.5.7" 495 | regenerator-runtime "^0.12.0" 496 | 497 | "@babel/preset-env@^7.3.4": 498 | version "7.3.4" 499 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" 500 | dependencies: 501 | "@babel/helper-module-imports" "^7.0.0" 502 | "@babel/helper-plugin-utils" "^7.0.0" 503 | "@babel/plugin-proposal-async-generator-functions" "^7.2.0" 504 | "@babel/plugin-proposal-json-strings" "^7.2.0" 505 | "@babel/plugin-proposal-object-rest-spread" "^7.3.4" 506 | "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" 507 | "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" 508 | "@babel/plugin-syntax-async-generators" "^7.2.0" 509 | "@babel/plugin-syntax-json-strings" "^7.2.0" 510 | "@babel/plugin-syntax-object-rest-spread" "^7.2.0" 511 | "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" 512 | "@babel/plugin-transform-arrow-functions" "^7.2.0" 513 | "@babel/plugin-transform-async-to-generator" "^7.3.4" 514 | "@babel/plugin-transform-block-scoped-functions" "^7.2.0" 515 | "@babel/plugin-transform-block-scoping" "^7.3.4" 516 | "@babel/plugin-transform-classes" "^7.3.4" 517 | "@babel/plugin-transform-computed-properties" "^7.2.0" 518 | "@babel/plugin-transform-destructuring" "^7.2.0" 519 | "@babel/plugin-transform-dotall-regex" "^7.2.0" 520 | "@babel/plugin-transform-duplicate-keys" "^7.2.0" 521 | "@babel/plugin-transform-exponentiation-operator" "^7.2.0" 522 | "@babel/plugin-transform-for-of" "^7.2.0" 523 | "@babel/plugin-transform-function-name" "^7.2.0" 524 | "@babel/plugin-transform-literals" "^7.2.0" 525 | "@babel/plugin-transform-modules-amd" "^7.2.0" 526 | "@babel/plugin-transform-modules-commonjs" "^7.2.0" 527 | "@babel/plugin-transform-modules-systemjs" "^7.3.4" 528 | "@babel/plugin-transform-modules-umd" "^7.2.0" 529 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" 530 | "@babel/plugin-transform-new-target" "^7.0.0" 531 | "@babel/plugin-transform-object-super" "^7.2.0" 532 | "@babel/plugin-transform-parameters" "^7.2.0" 533 | "@babel/plugin-transform-regenerator" "^7.3.4" 534 | "@babel/plugin-transform-shorthand-properties" "^7.2.0" 535 | "@babel/plugin-transform-spread" "^7.2.0" 536 | "@babel/plugin-transform-sticky-regex" "^7.2.0" 537 | "@babel/plugin-transform-template-literals" "^7.2.0" 538 | "@babel/plugin-transform-typeof-symbol" "^7.2.0" 539 | "@babel/plugin-transform-unicode-regex" "^7.2.0" 540 | browserslist "^4.3.4" 541 | invariant "^2.2.2" 542 | js-levenshtein "^1.1.3" 543 | semver "^5.3.0" 544 | 545 | "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": 546 | version "7.2.2" 547 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" 548 | dependencies: 549 | "@babel/code-frame" "^7.0.0" 550 | "@babel/parser" "^7.2.2" 551 | "@babel/types" "^7.2.2" 552 | 553 | "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.3": 554 | version "7.2.3" 555 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" 556 | dependencies: 557 | "@babel/code-frame" "^7.0.0" 558 | "@babel/generator" "^7.2.2" 559 | "@babel/helper-function-name" "^7.1.0" 560 | "@babel/helper-split-export-declaration" "^7.0.0" 561 | "@babel/parser" "^7.2.3" 562 | "@babel/types" "^7.2.2" 563 | debug "^4.1.0" 564 | globals "^11.1.0" 565 | lodash "^4.17.10" 566 | 567 | "@babel/traverse@^7.3.4": 568 | version "7.3.4" 569 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" 570 | dependencies: 571 | "@babel/code-frame" "^7.0.0" 572 | "@babel/generator" "^7.3.4" 573 | "@babel/helper-function-name" "^7.1.0" 574 | "@babel/helper-split-export-declaration" "^7.0.0" 575 | "@babel/parser" "^7.3.4" 576 | "@babel/types" "^7.3.4" 577 | debug "^4.1.0" 578 | globals "^11.1.0" 579 | lodash "^4.17.11" 580 | 581 | "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 582 | version "7.3.3" 583 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.3.tgz#6c44d1cdac2a7625b624216657d5bc6c107ab436" 584 | dependencies: 585 | esutils "^2.0.2" 586 | lodash "^4.17.11" 587 | to-fast-properties "^2.0.0" 588 | 589 | "@babel/types@^7.3.4": 590 | version "7.3.4" 591 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" 592 | dependencies: 593 | esutils "^2.0.2" 594 | lodash "^4.17.11" 595 | to-fast-properties "^2.0.0" 596 | 597 | "@types/estree@0.0.39": 598 | version "0.0.39" 599 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 600 | 601 | "@types/node@^11.9.5": 602 | version "11.9.5" 603 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.5.tgz#011eece9d3f839a806b63973e228f85967b79ed3" 604 | 605 | JSONStream@^1.0.3: 606 | version "1.3.5" 607 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 608 | dependencies: 609 | jsonparse "^1.2.0" 610 | through ">=2.2.7 <3" 611 | 612 | abbrev@1: 613 | version "1.1.1" 614 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 615 | 616 | acorn-dynamic-import@^4.0.0: 617 | version "4.0.0" 618 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" 619 | 620 | acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: 621 | version "1.6.2" 622 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.6.2.tgz#b7d7ceca6f22e6417af933a62cad4de01048d5d2" 623 | dependencies: 624 | acorn "^6.0.2" 625 | acorn-dynamic-import "^4.0.0" 626 | acorn-walk "^6.1.0" 627 | xtend "^4.0.1" 628 | 629 | acorn-walk@^6.1.0: 630 | version "6.1.1" 631 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" 632 | 633 | acorn@^6.0.2, acorn@^6.1.0: 634 | version "6.1.1" 635 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" 636 | 637 | ansi-align@^3.0.0: 638 | version "3.0.0" 639 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 640 | dependencies: 641 | string-width "^3.0.0" 642 | 643 | ansi-regex@^2.0.0: 644 | version "2.1.1" 645 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 646 | 647 | ansi-regex@^3.0.0: 648 | version "3.0.0" 649 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 650 | 651 | ansi-regex@^4.0.0: 652 | version "4.0.0" 653 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" 654 | 655 | ansi-styles@^2.2.1: 656 | version "2.2.1" 657 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 658 | 659 | ansi-styles@^3.2.1: 660 | version "3.2.1" 661 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 662 | dependencies: 663 | color-convert "^1.9.0" 664 | 665 | anymatch@^2.0.0: 666 | version "2.0.0" 667 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 668 | dependencies: 669 | micromatch "^3.1.4" 670 | normalize-path "^2.1.1" 671 | 672 | aproba@^1.0.3: 673 | version "1.2.0" 674 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 675 | 676 | are-we-there-yet@~1.1.2: 677 | version "1.1.5" 678 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 679 | dependencies: 680 | delegates "^1.0.0" 681 | readable-stream "^2.0.6" 682 | 683 | arr-diff@^4.0.0: 684 | version "4.0.0" 685 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 686 | 687 | arr-flatten@^1.1.0: 688 | version "1.1.0" 689 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 690 | 691 | arr-union@^3.1.0: 692 | version "3.1.0" 693 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 694 | 695 | array-filter@~0.0.0: 696 | version "0.0.1" 697 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" 698 | 699 | array-map@~0.0.0: 700 | version "0.0.0" 701 | resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" 702 | 703 | array-reduce@~0.0.0: 704 | version "0.0.0" 705 | resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" 706 | 707 | array-unique@^0.3.2: 708 | version "0.3.2" 709 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 710 | 711 | asn1.js@^4.0.0: 712 | version "4.10.1" 713 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" 714 | dependencies: 715 | bn.js "^4.0.0" 716 | inherits "^2.0.1" 717 | minimalistic-assert "^1.0.0" 718 | 719 | assert@^1.4.0: 720 | version "1.4.1" 721 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 722 | dependencies: 723 | util "0.10.3" 724 | 725 | assign-symbols@^1.0.0: 726 | version "1.0.0" 727 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 728 | 729 | async-array-reduce@^0.2.1: 730 | version "0.2.1" 731 | resolved "https://registry.yarnpkg.com/async-array-reduce/-/async-array-reduce-0.2.1.tgz#c8be010a2b5cd00dea96c81116034693dfdd82d1" 732 | 733 | async-each@^1.0.1: 734 | version "1.0.1" 735 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 736 | 737 | atob@^2.1.1: 738 | version "2.1.2" 739 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 740 | 741 | balanced-match@^1.0.0: 742 | version "1.0.0" 743 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 744 | 745 | base64-js@^1.0.2: 746 | version "1.3.0" 747 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" 748 | 749 | base@^0.11.1: 750 | version "0.11.2" 751 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 752 | dependencies: 753 | cache-base "^1.0.1" 754 | class-utils "^0.3.5" 755 | component-emitter "^1.2.1" 756 | define-property "^1.0.0" 757 | isobject "^3.0.1" 758 | mixin-deep "^1.2.0" 759 | pascalcase "^0.1.1" 760 | 761 | binary-extensions@^1.0.0: 762 | version "1.13.0" 763 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" 764 | 765 | bl@^1.0.0: 766 | version "1.2.2" 767 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 768 | dependencies: 769 | readable-stream "^2.3.5" 770 | safe-buffer "^5.1.1" 771 | 772 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 773 | version "4.11.8" 774 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 775 | 776 | boxen@^2.0.0: 777 | version "2.1.0" 778 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-2.1.0.tgz#8d576156e33fc26a34d6be8635fd16b1d745f0b2" 779 | dependencies: 780 | ansi-align "^3.0.0" 781 | camelcase "^5.0.0" 782 | chalk "^2.4.1" 783 | cli-boxes "^1.0.0" 784 | string-width "^3.0.0" 785 | term-size "^1.2.0" 786 | widest-line "^2.0.0" 787 | 788 | brace-expansion@^1.1.7: 789 | version "1.1.11" 790 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 791 | dependencies: 792 | balanced-match "^1.0.0" 793 | concat-map "0.0.1" 794 | 795 | braces@^2.3.1, braces@^2.3.2: 796 | version "2.3.2" 797 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 798 | dependencies: 799 | arr-flatten "^1.1.0" 800 | array-unique "^0.3.2" 801 | extend-shallow "^2.0.1" 802 | fill-range "^4.0.0" 803 | isobject "^3.0.1" 804 | repeat-element "^1.1.2" 805 | snapdragon "^0.8.1" 806 | snapdragon-node "^2.0.1" 807 | split-string "^3.0.2" 808 | to-regex "^3.0.1" 809 | 810 | brorand@^1.0.1: 811 | version "1.1.0" 812 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 813 | 814 | brotli-size@0.0.3: 815 | version "0.0.3" 816 | resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.0.3.tgz#1d3855b38f182591a6f69da1516131676e5f62f2" 817 | dependencies: 818 | duplexer "^0.1.1" 819 | iltorb "^2.0.5" 820 | 821 | browser-pack@^6.0.1: 822 | version "6.1.0" 823 | resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" 824 | dependencies: 825 | JSONStream "^1.0.3" 826 | combine-source-map "~0.8.0" 827 | defined "^1.0.0" 828 | safe-buffer "^5.1.1" 829 | through2 "^2.0.0" 830 | umd "^3.0.0" 831 | 832 | browser-resolve@^1.11.0, browser-resolve@^1.7.0: 833 | version "1.11.3" 834 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 835 | dependencies: 836 | resolve "1.1.7" 837 | 838 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 839 | version "1.2.0" 840 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" 841 | dependencies: 842 | buffer-xor "^1.0.3" 843 | cipher-base "^1.0.0" 844 | create-hash "^1.1.0" 845 | evp_bytestokey "^1.0.3" 846 | inherits "^2.0.1" 847 | safe-buffer "^5.0.1" 848 | 849 | browserify-cipher@^1.0.0: 850 | version "1.0.1" 851 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" 852 | dependencies: 853 | browserify-aes "^1.0.4" 854 | browserify-des "^1.0.0" 855 | evp_bytestokey "^1.0.0" 856 | 857 | browserify-des@^1.0.0: 858 | version "1.0.2" 859 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" 860 | dependencies: 861 | cipher-base "^1.0.1" 862 | des.js "^1.0.0" 863 | inherits "^2.0.1" 864 | safe-buffer "^5.1.2" 865 | 866 | browserify-rsa@^4.0.0: 867 | version "4.0.1" 868 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 869 | dependencies: 870 | bn.js "^4.1.0" 871 | randombytes "^2.0.1" 872 | 873 | browserify-sign@^4.0.0: 874 | version "4.0.4" 875 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" 876 | dependencies: 877 | bn.js "^4.1.1" 878 | browserify-rsa "^4.0.0" 879 | create-hash "^1.1.0" 880 | create-hmac "^1.1.2" 881 | elliptic "^6.0.0" 882 | inherits "^2.0.1" 883 | parse-asn1 "^5.0.0" 884 | 885 | browserify-zlib@~0.2.0: 886 | version "0.2.0" 887 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" 888 | dependencies: 889 | pako "~1.0.5" 890 | 891 | browserify@^16.2.3: 892 | version "16.2.3" 893 | resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b" 894 | dependencies: 895 | JSONStream "^1.0.3" 896 | assert "^1.4.0" 897 | browser-pack "^6.0.1" 898 | browser-resolve "^1.11.0" 899 | browserify-zlib "~0.2.0" 900 | buffer "^5.0.2" 901 | cached-path-relative "^1.0.0" 902 | concat-stream "^1.6.0" 903 | console-browserify "^1.1.0" 904 | constants-browserify "~1.0.0" 905 | crypto-browserify "^3.0.0" 906 | defined "^1.0.0" 907 | deps-sort "^2.0.0" 908 | domain-browser "^1.2.0" 909 | duplexer2 "~0.1.2" 910 | events "^2.0.0" 911 | glob "^7.1.0" 912 | has "^1.0.0" 913 | htmlescape "^1.1.0" 914 | https-browserify "^1.0.0" 915 | inherits "~2.0.1" 916 | insert-module-globals "^7.0.0" 917 | labeled-stream-splicer "^2.0.0" 918 | mkdirp "^0.5.0" 919 | module-deps "^6.0.0" 920 | os-browserify "~0.3.0" 921 | parents "^1.0.1" 922 | path-browserify "~0.0.0" 923 | process "~0.11.0" 924 | punycode "^1.3.2" 925 | querystring-es3 "~0.2.0" 926 | read-only-stream "^2.0.0" 927 | readable-stream "^2.0.2" 928 | resolve "^1.1.4" 929 | shasum "^1.0.0" 930 | shell-quote "^1.6.1" 931 | stream-browserify "^2.0.0" 932 | stream-http "^2.0.0" 933 | string_decoder "^1.1.1" 934 | subarg "^1.0.0" 935 | syntax-error "^1.1.1" 936 | through2 "^2.0.0" 937 | timers-browserify "^1.0.1" 938 | tty-browserify "0.0.1" 939 | url "~0.11.0" 940 | util "~0.10.1" 941 | vm-browserify "^1.0.0" 942 | xtend "^4.0.0" 943 | 944 | browserslist@^4.3.4: 945 | version "4.4.1" 946 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" 947 | dependencies: 948 | caniuse-lite "^1.0.30000929" 949 | electron-to-chromium "^1.3.103" 950 | node-releases "^1.1.3" 951 | 952 | buffer-alloc-unsafe@^1.1.0: 953 | version "1.1.0" 954 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 955 | 956 | buffer-alloc@^1.2.0: 957 | version "1.2.0" 958 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" 959 | dependencies: 960 | buffer-alloc-unsafe "^1.1.0" 961 | buffer-fill "^1.0.0" 962 | 963 | buffer-fill@^1.0.0: 964 | version "1.0.0" 965 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" 966 | 967 | buffer-from@^1.0.0: 968 | version "1.1.1" 969 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 970 | 971 | buffer-xor@^1.0.3: 972 | version "1.0.3" 973 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 974 | 975 | buffer@^5.0.2: 976 | version "5.2.1" 977 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" 978 | dependencies: 979 | base64-js "^1.0.2" 980 | ieee754 "^1.1.4" 981 | 982 | builtin-modules@^3.0.0: 983 | version "3.0.0" 984 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" 985 | 986 | builtin-status-codes@^3.0.0: 987 | version "3.0.0" 988 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 989 | 990 | cache-base@^1.0.1: 991 | version "1.0.1" 992 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 993 | dependencies: 994 | collection-visit "^1.0.0" 995 | component-emitter "^1.2.1" 996 | get-value "^2.0.6" 997 | has-value "^1.0.0" 998 | isobject "^3.0.1" 999 | set-value "^2.0.0" 1000 | to-object-path "^0.3.0" 1001 | union-value "^1.0.0" 1002 | unset-value "^1.0.0" 1003 | 1004 | cached-path-relative@^1.0.0: 1005 | version "1.0.2" 1006 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" 1007 | 1008 | camelcase@^5.0.0: 1009 | version "5.0.0" 1010 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" 1011 | 1012 | caniuse-lite@^1.0.30000929: 1013 | version "1.0.30000938" 1014 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz#b64bf1427438df40183fce910fe24e34feda7a3f" 1015 | 1016 | chalk@^1.1.3: 1017 | version "1.1.3" 1018 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 1019 | dependencies: 1020 | ansi-styles "^2.2.1" 1021 | escape-string-regexp "^1.0.2" 1022 | has-ansi "^2.0.0" 1023 | strip-ansi "^3.0.0" 1024 | supports-color "^2.0.0" 1025 | 1026 | chalk@^2.0.0, chalk@^2.4.1: 1027 | version "2.4.2" 1028 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1029 | dependencies: 1030 | ansi-styles "^3.2.1" 1031 | escape-string-regexp "^1.0.5" 1032 | supports-color "^5.3.0" 1033 | 1034 | chokidar@^2.0.3: 1035 | version "2.1.2" 1036 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" 1037 | dependencies: 1038 | anymatch "^2.0.0" 1039 | async-each "^1.0.1" 1040 | braces "^2.3.2" 1041 | glob-parent "^3.1.0" 1042 | inherits "^2.0.3" 1043 | is-binary-path "^1.0.0" 1044 | is-glob "^4.0.0" 1045 | normalize-path "^3.0.0" 1046 | path-is-absolute "^1.0.0" 1047 | readdirp "^2.2.1" 1048 | upath "^1.1.0" 1049 | optionalDependencies: 1050 | fsevents "^1.2.7" 1051 | 1052 | chownr@^1.0.1, chownr@^1.1.1: 1053 | version "1.1.1" 1054 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 1055 | 1056 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 1057 | version "1.0.4" 1058 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 1059 | dependencies: 1060 | inherits "^2.0.1" 1061 | safe-buffer "^5.0.1" 1062 | 1063 | class-utils@^0.3.5: 1064 | version "0.3.6" 1065 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 1066 | dependencies: 1067 | arr-union "^3.1.0" 1068 | define-property "^0.2.5" 1069 | isobject "^3.0.0" 1070 | static-extend "^0.1.1" 1071 | 1072 | cli-boxes@^1.0.0: 1073 | version "1.0.0" 1074 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 1075 | 1076 | code-point-at@^1.0.0: 1077 | version "1.1.0" 1078 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 1079 | 1080 | collection-visit@^1.0.0: 1081 | version "1.0.0" 1082 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 1083 | dependencies: 1084 | map-visit "^1.0.0" 1085 | object-visit "^1.0.0" 1086 | 1087 | color-convert@^1.9.0: 1088 | version "1.9.3" 1089 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1090 | dependencies: 1091 | color-name "1.1.3" 1092 | 1093 | color-name@1.1.3: 1094 | version "1.1.3" 1095 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1096 | 1097 | colors@^1.3.2: 1098 | version "1.3.3" 1099 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" 1100 | 1101 | combine-source-map@^0.8.0, combine-source-map@~0.8.0: 1102 | version "0.8.0" 1103 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" 1104 | dependencies: 1105 | convert-source-map "~1.1.0" 1106 | inline-source-map "~0.6.0" 1107 | lodash.memoize "~3.0.3" 1108 | source-map "~0.5.3" 1109 | 1110 | commander@^2.8.1: 1111 | version "2.19.0" 1112 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 1113 | 1114 | commander@~2.17.1: 1115 | version "2.17.1" 1116 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 1117 | 1118 | component-emitter@^1.2.1: 1119 | version "1.2.1" 1120 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 1121 | 1122 | concat-map@0.0.1: 1123 | version "0.0.1" 1124 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1125 | 1126 | concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: 1127 | version "1.6.2" 1128 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 1129 | dependencies: 1130 | buffer-from "^1.0.0" 1131 | inherits "^2.0.3" 1132 | readable-stream "^2.2.2" 1133 | typedarray "^0.0.6" 1134 | 1135 | console-browserify@^1.1.0: 1136 | version "1.1.0" 1137 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 1138 | dependencies: 1139 | date-now "^0.1.4" 1140 | 1141 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 1142 | version "1.1.0" 1143 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 1144 | 1145 | constants-browserify@~1.0.0: 1146 | version "1.0.0" 1147 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 1148 | 1149 | convert-source-map@^1.1.0: 1150 | version "1.6.0" 1151 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 1152 | dependencies: 1153 | safe-buffer "~5.1.1" 1154 | 1155 | convert-source-map@~1.1.0: 1156 | version "1.1.3" 1157 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" 1158 | 1159 | copy-descriptor@^0.1.0: 1160 | version "0.1.1" 1161 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 1162 | 1163 | core-js@^2.5.7: 1164 | version "2.6.5" 1165 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" 1166 | 1167 | core-util-is@~1.0.0: 1168 | version "1.0.2" 1169 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1170 | 1171 | create-ecdh@^4.0.0: 1172 | version "4.0.3" 1173 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" 1174 | dependencies: 1175 | bn.js "^4.1.0" 1176 | elliptic "^6.0.0" 1177 | 1178 | create-hash@^1.1.0, create-hash@^1.1.2: 1179 | version "1.2.0" 1180 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" 1181 | dependencies: 1182 | cipher-base "^1.0.1" 1183 | inherits "^2.0.1" 1184 | md5.js "^1.3.4" 1185 | ripemd160 "^2.0.1" 1186 | sha.js "^2.4.0" 1187 | 1188 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: 1189 | version "1.1.7" 1190 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" 1191 | dependencies: 1192 | cipher-base "^1.0.3" 1193 | create-hash "^1.1.0" 1194 | inherits "^2.0.1" 1195 | ripemd160 "^2.0.0" 1196 | safe-buffer "^5.0.1" 1197 | sha.js "^2.4.8" 1198 | 1199 | cross-spawn@^5.0.1: 1200 | version "5.1.0" 1201 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 1202 | dependencies: 1203 | lru-cache "^4.0.1" 1204 | shebang-command "^1.2.0" 1205 | which "^1.2.9" 1206 | 1207 | crypto-browserify@^3.0.0: 1208 | version "3.12.0" 1209 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" 1210 | dependencies: 1211 | browserify-cipher "^1.0.0" 1212 | browserify-sign "^4.0.0" 1213 | create-ecdh "^4.0.0" 1214 | create-hash "^1.1.0" 1215 | create-hmac "^1.1.0" 1216 | diffie-hellman "^5.0.0" 1217 | inherits "^2.0.1" 1218 | pbkdf2 "^3.0.3" 1219 | public-encrypt "^4.0.0" 1220 | randombytes "^2.0.0" 1221 | randomfill "^1.0.3" 1222 | 1223 | dash-ast@^1.0.0: 1224 | version "1.0.0" 1225 | resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" 1226 | 1227 | date-now@^0.1.4: 1228 | version "0.1.4" 1229 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 1230 | 1231 | debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: 1232 | version "2.6.9" 1233 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1234 | dependencies: 1235 | ms "2.0.0" 1236 | 1237 | debug@^4.1.0: 1238 | version "4.1.1" 1239 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1240 | dependencies: 1241 | ms "^2.1.1" 1242 | 1243 | decode-uri-component@^0.2.0: 1244 | version "0.2.0" 1245 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 1246 | 1247 | decompress-response@^3.3.0: 1248 | version "3.3.0" 1249 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 1250 | dependencies: 1251 | mimic-response "^1.0.0" 1252 | 1253 | deep-assign@^2.0.0: 1254 | version "2.0.0" 1255 | resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" 1256 | dependencies: 1257 | is-obj "^1.0.0" 1258 | 1259 | deep-extend@^0.6.0: 1260 | version "0.6.0" 1261 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 1262 | 1263 | define-property@^0.2.5: 1264 | version "0.2.5" 1265 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 1266 | dependencies: 1267 | is-descriptor "^0.1.0" 1268 | 1269 | define-property@^1.0.0: 1270 | version "1.0.0" 1271 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 1272 | dependencies: 1273 | is-descriptor "^1.0.0" 1274 | 1275 | define-property@^2.0.2: 1276 | version "2.0.2" 1277 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1278 | dependencies: 1279 | is-descriptor "^1.0.2" 1280 | isobject "^3.0.1" 1281 | 1282 | defined@^1.0.0: 1283 | version "1.0.0" 1284 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 1285 | 1286 | delegates@^1.0.0: 1287 | version "1.0.0" 1288 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1289 | 1290 | deps-sort@^2.0.0: 1291 | version "2.0.0" 1292 | resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" 1293 | dependencies: 1294 | JSONStream "^1.0.3" 1295 | shasum "^1.0.0" 1296 | subarg "^1.0.0" 1297 | through2 "^2.0.0" 1298 | 1299 | des.js@^1.0.0: 1300 | version "1.0.0" 1301 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" 1302 | dependencies: 1303 | inherits "^2.0.1" 1304 | minimalistic-assert "^1.0.0" 1305 | 1306 | detect-libc@^1.0.2, detect-libc@^1.0.3: 1307 | version "1.0.3" 1308 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1309 | 1310 | detective@^5.0.2: 1311 | version "5.2.0" 1312 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" 1313 | dependencies: 1314 | acorn-node "^1.6.1" 1315 | defined "^1.0.0" 1316 | minimist "^1.1.1" 1317 | 1318 | diffie-hellman@^5.0.0: 1319 | version "5.0.3" 1320 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" 1321 | dependencies: 1322 | bn.js "^4.1.0" 1323 | miller-rabin "^4.0.0" 1324 | randombytes "^2.0.0" 1325 | 1326 | domain-browser@^1.2.0: 1327 | version "1.2.0" 1328 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" 1329 | 1330 | duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: 1331 | version "0.1.4" 1332 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 1333 | dependencies: 1334 | readable-stream "^2.0.2" 1335 | 1336 | duplexer@^0.1.1: 1337 | version "0.1.1" 1338 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 1339 | 1340 | electron-to-chromium@^1.3.103: 1341 | version "1.3.113" 1342 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" 1343 | 1344 | elliptic@^6.0.0: 1345 | version "6.4.1" 1346 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" 1347 | dependencies: 1348 | bn.js "^4.4.0" 1349 | brorand "^1.0.1" 1350 | hash.js "^1.0.0" 1351 | hmac-drbg "^1.0.0" 1352 | inherits "^2.0.1" 1353 | minimalistic-assert "^1.0.0" 1354 | minimalistic-crypto-utils "^1.0.0" 1355 | 1356 | emoji-regex@^7.0.1: 1357 | version "7.0.3" 1358 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1359 | 1360 | end-of-stream@^1.0.0, end-of-stream@^1.1.0: 1361 | version "1.4.1" 1362 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 1363 | dependencies: 1364 | once "^1.4.0" 1365 | 1366 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1367 | version "1.0.5" 1368 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1369 | 1370 | estree-walker@^0.5.2: 1371 | version "0.5.2" 1372 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" 1373 | 1374 | estree-walker@^0.6.0: 1375 | version "0.6.0" 1376 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" 1377 | 1378 | esutils@^2.0.2: 1379 | version "2.0.2" 1380 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1381 | 1382 | events@^2.0.0: 1383 | version "2.1.0" 1384 | resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" 1385 | 1386 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 1387 | version "1.0.3" 1388 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 1389 | dependencies: 1390 | md5.js "^1.3.4" 1391 | safe-buffer "^5.1.1" 1392 | 1393 | execa@^0.7.0: 1394 | version "0.7.0" 1395 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 1396 | dependencies: 1397 | cross-spawn "^5.0.1" 1398 | get-stream "^3.0.0" 1399 | is-stream "^1.1.0" 1400 | npm-run-path "^2.0.0" 1401 | p-finally "^1.0.0" 1402 | signal-exit "^3.0.0" 1403 | strip-eof "^1.0.0" 1404 | 1405 | expand-brackets@^2.1.4: 1406 | version "2.1.4" 1407 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1408 | dependencies: 1409 | debug "^2.3.3" 1410 | define-property "^0.2.5" 1411 | extend-shallow "^2.0.1" 1412 | posix-character-classes "^0.1.0" 1413 | regex-not "^1.0.0" 1414 | snapdragon "^0.8.1" 1415 | to-regex "^3.0.1" 1416 | 1417 | expand-template@^2.0.3: 1418 | version "2.0.3" 1419 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 1420 | 1421 | expand-tilde@^2.0.0, expand-tilde@^2.0.2: 1422 | version "2.0.2" 1423 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" 1424 | dependencies: 1425 | homedir-polyfill "^1.0.1" 1426 | 1427 | extend-shallow@^2.0.1: 1428 | version "2.0.1" 1429 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1430 | dependencies: 1431 | is-extendable "^0.1.0" 1432 | 1433 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1434 | version "3.0.2" 1435 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1436 | dependencies: 1437 | assign-symbols "^1.0.0" 1438 | is-extendable "^1.0.1" 1439 | 1440 | extglob@^2.0.4: 1441 | version "2.0.4" 1442 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1443 | dependencies: 1444 | array-unique "^0.3.2" 1445 | define-property "^1.0.0" 1446 | expand-brackets "^2.1.4" 1447 | extend-shallow "^2.0.1" 1448 | fragment-cache "^0.2.1" 1449 | regex-not "^1.0.0" 1450 | snapdragon "^0.8.1" 1451 | to-regex "^3.0.1" 1452 | 1453 | filesize@^3.6.1: 1454 | version "3.6.1" 1455 | resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" 1456 | 1457 | fill-range@^4.0.0: 1458 | version "4.0.0" 1459 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1460 | dependencies: 1461 | extend-shallow "^2.0.1" 1462 | is-number "^3.0.0" 1463 | repeat-string "^1.6.1" 1464 | to-regex-range "^2.1.0" 1465 | 1466 | for-in@^1.0.2: 1467 | version "1.0.2" 1468 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1469 | 1470 | fragment-cache@^0.2.1: 1471 | version "0.2.1" 1472 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1473 | dependencies: 1474 | map-cache "^0.2.2" 1475 | 1476 | fs-constants@^1.0.0: 1477 | version "1.0.0" 1478 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 1479 | 1480 | fs-minipass@^1.2.5: 1481 | version "1.2.5" 1482 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 1483 | dependencies: 1484 | minipass "^2.2.1" 1485 | 1486 | fs-readdir-recursive@^1.1.0: 1487 | version "1.1.0" 1488 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" 1489 | 1490 | fs.realpath@^1.0.0: 1491 | version "1.0.0" 1492 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1493 | 1494 | fsevents@^1.2.7: 1495 | version "1.2.7" 1496 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" 1497 | dependencies: 1498 | nan "^2.9.2" 1499 | node-pre-gyp "^0.10.0" 1500 | 1501 | function-bind@^1.1.1: 1502 | version "1.1.1" 1503 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1504 | 1505 | gauge@~2.7.3: 1506 | version "2.7.4" 1507 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1508 | dependencies: 1509 | aproba "^1.0.3" 1510 | console-control-strings "^1.0.0" 1511 | has-unicode "^2.0.0" 1512 | object-assign "^4.1.0" 1513 | signal-exit "^3.0.0" 1514 | string-width "^1.0.1" 1515 | strip-ansi "^3.0.1" 1516 | wide-align "^1.1.0" 1517 | 1518 | get-assigned-identifiers@^1.2.0: 1519 | version "1.2.0" 1520 | resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" 1521 | 1522 | get-stream@^3.0.0: 1523 | version "3.0.0" 1524 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1525 | 1526 | get-value@^2.0.3, get-value@^2.0.6: 1527 | version "2.0.6" 1528 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1529 | 1530 | github-from-package@0.0.0: 1531 | version "0.0.0" 1532 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 1533 | 1534 | glob-parent@^3.1.0: 1535 | version "3.1.0" 1536 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 1537 | dependencies: 1538 | is-glob "^3.1.0" 1539 | path-dirname "^1.0.0" 1540 | 1541 | glob@^7.0.0, glob@^7.1.0, glob@^7.1.2, glob@^7.1.3: 1542 | version "7.1.3" 1543 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1544 | dependencies: 1545 | fs.realpath "^1.0.0" 1546 | inflight "^1.0.4" 1547 | inherits "2" 1548 | minimatch "^3.0.4" 1549 | once "^1.3.0" 1550 | path-is-absolute "^1.0.0" 1551 | 1552 | global-modules@^1.0.0: 1553 | version "1.0.0" 1554 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" 1555 | dependencies: 1556 | global-prefix "^1.0.1" 1557 | is-windows "^1.0.1" 1558 | resolve-dir "^1.0.0" 1559 | 1560 | global-prefix@^1.0.1: 1561 | version "1.0.2" 1562 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" 1563 | dependencies: 1564 | expand-tilde "^2.0.2" 1565 | homedir-polyfill "^1.0.1" 1566 | ini "^1.3.4" 1567 | is-windows "^1.0.1" 1568 | which "^1.2.14" 1569 | 1570 | globals@^11.1.0: 1571 | version "11.11.0" 1572 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" 1573 | 1574 | graceful-fs@^4.1.11: 1575 | version "4.1.15" 1576 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 1577 | 1578 | gzip-size@^5.0.0: 1579 | version "5.0.0" 1580 | resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" 1581 | dependencies: 1582 | duplexer "^0.1.1" 1583 | pify "^3.0.0" 1584 | 1585 | has-ansi@^2.0.0: 1586 | version "2.0.0" 1587 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1588 | dependencies: 1589 | ansi-regex "^2.0.0" 1590 | 1591 | has-flag@^3.0.0: 1592 | version "3.0.0" 1593 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1594 | 1595 | has-glob@^1.0.0: 1596 | version "1.0.0" 1597 | resolved "https://registry.yarnpkg.com/has-glob/-/has-glob-1.0.0.tgz#9aaa9eedbffb1ba3990a7b0010fb678ee0081207" 1598 | dependencies: 1599 | is-glob "^3.0.0" 1600 | 1601 | has-unicode@^2.0.0: 1602 | version "2.0.1" 1603 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1604 | 1605 | has-value@^0.3.1: 1606 | version "0.3.1" 1607 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1608 | dependencies: 1609 | get-value "^2.0.3" 1610 | has-values "^0.1.4" 1611 | isobject "^2.0.0" 1612 | 1613 | has-value@^1.0.0: 1614 | version "1.0.0" 1615 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1616 | dependencies: 1617 | get-value "^2.0.6" 1618 | has-values "^1.0.0" 1619 | isobject "^3.0.0" 1620 | 1621 | has-values@^0.1.4: 1622 | version "0.1.4" 1623 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1624 | 1625 | has-values@^1.0.0: 1626 | version "1.0.0" 1627 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1628 | dependencies: 1629 | is-number "^3.0.0" 1630 | kind-of "^4.0.0" 1631 | 1632 | has@^1.0.0: 1633 | version "1.0.3" 1634 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1635 | dependencies: 1636 | function-bind "^1.1.1" 1637 | 1638 | hash-base@^3.0.0: 1639 | version "3.0.4" 1640 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" 1641 | dependencies: 1642 | inherits "^2.0.1" 1643 | safe-buffer "^5.0.1" 1644 | 1645 | hash.js@^1.0.0, hash.js@^1.0.3: 1646 | version "1.1.7" 1647 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1648 | dependencies: 1649 | inherits "^2.0.3" 1650 | minimalistic-assert "^1.0.1" 1651 | 1652 | hmac-drbg@^1.0.0: 1653 | version "1.0.1" 1654 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1655 | dependencies: 1656 | hash.js "^1.0.3" 1657 | minimalistic-assert "^1.0.0" 1658 | minimalistic-crypto-utils "^1.0.1" 1659 | 1660 | homedir-polyfill@^1.0.1: 1661 | version "1.0.3" 1662 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" 1663 | dependencies: 1664 | parse-passwd "^1.0.0" 1665 | 1666 | htmlescape@^1.1.0: 1667 | version "1.1.1" 1668 | resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" 1669 | 1670 | https-browserify@^1.0.0: 1671 | version "1.0.0" 1672 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 1673 | 1674 | iconv-lite@^0.4.4: 1675 | version "0.4.24" 1676 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1677 | dependencies: 1678 | safer-buffer ">= 2.1.2 < 3" 1679 | 1680 | ieee754@^1.1.4: 1681 | version "1.1.12" 1682 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" 1683 | 1684 | ignore-walk@^3.0.1: 1685 | version "3.0.1" 1686 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1687 | dependencies: 1688 | minimatch "^3.0.4" 1689 | 1690 | iltorb@^2.0.5: 1691 | version "2.4.1" 1692 | resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.1.tgz#3ae14f0a76ba880503884a2fe630b1f748eb4c17" 1693 | dependencies: 1694 | detect-libc "^1.0.3" 1695 | npmlog "^4.1.2" 1696 | prebuild-install "^5.2.1" 1697 | which-pm-runs "^1.0.0" 1698 | 1699 | inflection@^1.12.0: 1700 | version "1.12.0" 1701 | resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" 1702 | 1703 | inflight@^1.0.4: 1704 | version "1.0.6" 1705 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1706 | dependencies: 1707 | once "^1.3.0" 1708 | wrappy "1" 1709 | 1710 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1711 | version "2.0.3" 1712 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1713 | 1714 | inherits@2.0.1: 1715 | version "2.0.1" 1716 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1717 | 1718 | ini@^1.3.4, ini@~1.3.0: 1719 | version "1.3.5" 1720 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1721 | 1722 | inline-source-map@~0.6.0: 1723 | version "0.6.2" 1724 | resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" 1725 | dependencies: 1726 | source-map "~0.5.3" 1727 | 1728 | insert-module-globals@^7.0.0: 1729 | version "7.2.0" 1730 | resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" 1731 | dependencies: 1732 | JSONStream "^1.0.3" 1733 | acorn-node "^1.5.2" 1734 | combine-source-map "^0.8.0" 1735 | concat-stream "^1.6.1" 1736 | is-buffer "^1.1.0" 1737 | path-is-absolute "^1.0.1" 1738 | process "~0.11.0" 1739 | through2 "^2.0.0" 1740 | undeclared-identifiers "^1.1.2" 1741 | xtend "^4.0.0" 1742 | 1743 | invariant@^2.2.2: 1744 | version "2.2.4" 1745 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1746 | dependencies: 1747 | loose-envify "^1.0.0" 1748 | 1749 | is-accessor-descriptor@^0.1.6: 1750 | version "0.1.6" 1751 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1752 | dependencies: 1753 | kind-of "^3.0.2" 1754 | 1755 | is-accessor-descriptor@^1.0.0: 1756 | version "1.0.0" 1757 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1758 | dependencies: 1759 | kind-of "^6.0.0" 1760 | 1761 | is-binary-path@^1.0.0: 1762 | version "1.0.1" 1763 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1764 | dependencies: 1765 | binary-extensions "^1.0.0" 1766 | 1767 | is-buffer@^1.1.0, is-buffer@^1.1.5: 1768 | version "1.1.6" 1769 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1770 | 1771 | is-data-descriptor@^0.1.4: 1772 | version "0.1.4" 1773 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1774 | dependencies: 1775 | kind-of "^3.0.2" 1776 | 1777 | is-data-descriptor@^1.0.0: 1778 | version "1.0.0" 1779 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1780 | dependencies: 1781 | kind-of "^6.0.0" 1782 | 1783 | is-descriptor@^0.1.0: 1784 | version "0.1.6" 1785 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1786 | dependencies: 1787 | is-accessor-descriptor "^0.1.6" 1788 | is-data-descriptor "^0.1.4" 1789 | kind-of "^5.0.0" 1790 | 1791 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1792 | version "1.0.2" 1793 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1794 | dependencies: 1795 | is-accessor-descriptor "^1.0.0" 1796 | is-data-descriptor "^1.0.0" 1797 | kind-of "^6.0.2" 1798 | 1799 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1800 | version "0.1.1" 1801 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1802 | 1803 | is-extendable@^1.0.1: 1804 | version "1.0.1" 1805 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1806 | dependencies: 1807 | is-plain-object "^2.0.4" 1808 | 1809 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1810 | version "2.1.1" 1811 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1812 | 1813 | is-fullwidth-code-point@^1.0.0: 1814 | version "1.0.0" 1815 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1816 | dependencies: 1817 | number-is-nan "^1.0.0" 1818 | 1819 | is-fullwidth-code-point@^2.0.0: 1820 | version "2.0.0" 1821 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1822 | 1823 | is-glob@^3.0.0, is-glob@^3.1.0: 1824 | version "3.1.0" 1825 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1826 | dependencies: 1827 | is-extglob "^2.1.0" 1828 | 1829 | is-glob@^4.0.0: 1830 | version "4.0.0" 1831 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" 1832 | dependencies: 1833 | is-extglob "^2.1.1" 1834 | 1835 | is-module@^1.0.0: 1836 | version "1.0.0" 1837 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1838 | 1839 | is-number@^3.0.0: 1840 | version "3.0.0" 1841 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1842 | dependencies: 1843 | kind-of "^3.0.2" 1844 | 1845 | is-obj@^1.0.0: 1846 | version "1.0.1" 1847 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1848 | 1849 | is-plain-obj@^1.1.0: 1850 | version "1.1.0" 1851 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1852 | 1853 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1854 | version "2.0.4" 1855 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1856 | dependencies: 1857 | isobject "^3.0.1" 1858 | 1859 | is-stream@^1.1.0: 1860 | version "1.1.0" 1861 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1862 | 1863 | is-valid-glob@^1.0.0: 1864 | version "1.0.0" 1865 | resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" 1866 | 1867 | is-windows@^1.0.1, is-windows@^1.0.2: 1868 | version "1.0.2" 1869 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1870 | 1871 | isarray@1.0.0, isarray@~1.0.0: 1872 | version "1.0.0" 1873 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1874 | 1875 | isarray@^2.0.4: 1876 | version "2.0.4" 1877 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" 1878 | 1879 | isexe@^2.0.0: 1880 | version "2.0.0" 1881 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1882 | 1883 | isobject@^2.0.0: 1884 | version "2.1.0" 1885 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1886 | dependencies: 1887 | isarray "1.0.0" 1888 | 1889 | isobject@^3.0.0, isobject@^3.0.1: 1890 | version "3.0.1" 1891 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1892 | 1893 | js-levenshtein@^1.1.3: 1894 | version "1.1.6" 1895 | resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" 1896 | 1897 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1898 | version "4.0.0" 1899 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1900 | 1901 | jsesc@^2.5.1: 1902 | version "2.5.2" 1903 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1904 | 1905 | jsesc@~0.5.0: 1906 | version "0.5.0" 1907 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1908 | 1909 | json-stable-stringify@~0.0.0: 1910 | version "0.0.1" 1911 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" 1912 | dependencies: 1913 | jsonify "~0.0.0" 1914 | 1915 | json5@^2.1.0: 1916 | version "2.1.0" 1917 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" 1918 | dependencies: 1919 | minimist "^1.2.0" 1920 | 1921 | jsonify@~0.0.0: 1922 | version "0.0.0" 1923 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1924 | 1925 | jsonparse@^1.2.0: 1926 | version "1.3.1" 1927 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1928 | 1929 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1930 | version "3.2.2" 1931 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1932 | dependencies: 1933 | is-buffer "^1.1.5" 1934 | 1935 | kind-of@^4.0.0: 1936 | version "4.0.0" 1937 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1938 | dependencies: 1939 | is-buffer "^1.1.5" 1940 | 1941 | kind-of@^5.0.0: 1942 | version "5.1.0" 1943 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1944 | 1945 | kind-of@^6.0.0, kind-of@^6.0.2: 1946 | version "6.0.2" 1947 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1948 | 1949 | labeled-stream-splicer@^2.0.0: 1950 | version "2.0.1" 1951 | resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" 1952 | dependencies: 1953 | inherits "^2.0.1" 1954 | isarray "^2.0.4" 1955 | stream-splicer "^2.0.0" 1956 | 1957 | lodash.memoize@~3.0.3: 1958 | version "3.0.4" 1959 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" 1960 | 1961 | lodash@^4.17.10, lodash@^4.17.11: 1962 | version "4.17.11" 1963 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 1964 | 1965 | loose-envify@^1.0.0: 1966 | version "1.4.0" 1967 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1968 | dependencies: 1969 | js-tokens "^3.0.0 || ^4.0.0" 1970 | 1971 | lru-cache@^4.0.1: 1972 | version "4.1.5" 1973 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1974 | dependencies: 1975 | pseudomap "^1.0.2" 1976 | yallist "^2.1.2" 1977 | 1978 | magic-string@^0.25.1: 1979 | version "0.25.2" 1980 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" 1981 | dependencies: 1982 | sourcemap-codec "^1.4.4" 1983 | 1984 | map-cache@^0.2.2: 1985 | version "0.2.2" 1986 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1987 | 1988 | map-visit@^1.0.0: 1989 | version "1.0.0" 1990 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1991 | dependencies: 1992 | object-visit "^1.0.0" 1993 | 1994 | matched@^1.0.2: 1995 | version "1.0.2" 1996 | resolved "https://registry.yarnpkg.com/matched/-/matched-1.0.2.tgz#1d95d77dd5f1b5075a9e94acde5462ffd85f317a" 1997 | dependencies: 1998 | arr-union "^3.1.0" 1999 | async-array-reduce "^0.2.1" 2000 | glob "^7.1.2" 2001 | has-glob "^1.0.0" 2002 | is-valid-glob "^1.0.0" 2003 | resolve-dir "^1.0.0" 2004 | 2005 | md5.js@^1.3.4: 2006 | version "1.3.5" 2007 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" 2008 | dependencies: 2009 | hash-base "^3.0.0" 2010 | inherits "^2.0.1" 2011 | safe-buffer "^5.1.2" 2012 | 2013 | micromatch@^3.1.10, micromatch@^3.1.4: 2014 | version "3.1.10" 2015 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2016 | dependencies: 2017 | arr-diff "^4.0.0" 2018 | array-unique "^0.3.2" 2019 | braces "^2.3.1" 2020 | define-property "^2.0.2" 2021 | extend-shallow "^3.0.2" 2022 | extglob "^2.0.4" 2023 | fragment-cache "^0.2.1" 2024 | kind-of "^6.0.2" 2025 | nanomatch "^1.2.9" 2026 | object.pick "^1.3.0" 2027 | regex-not "^1.0.0" 2028 | snapdragon "^0.8.1" 2029 | to-regex "^3.0.2" 2030 | 2031 | miller-rabin@^4.0.0: 2032 | version "4.0.1" 2033 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 2034 | dependencies: 2035 | bn.js "^4.0.0" 2036 | brorand "^1.0.1" 2037 | 2038 | mimic-response@^1.0.0: 2039 | version "1.0.1" 2040 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 2041 | 2042 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 2043 | version "1.0.1" 2044 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 2045 | 2046 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 2047 | version "1.0.1" 2048 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 2049 | 2050 | minimatch@^3.0.4: 2051 | version "3.0.4" 2052 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2053 | dependencies: 2054 | brace-expansion "^1.1.7" 2055 | 2056 | minimist@0.0.8: 2057 | version "0.0.8" 2058 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2059 | 2060 | minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: 2061 | version "1.2.0" 2062 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2063 | 2064 | minipass@^2.2.1, minipass@^2.3.4: 2065 | version "2.3.5" 2066 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 2067 | dependencies: 2068 | safe-buffer "^5.1.2" 2069 | yallist "^3.0.0" 2070 | 2071 | minizlib@^1.1.1: 2072 | version "1.2.1" 2073 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 2074 | dependencies: 2075 | minipass "^2.2.1" 2076 | 2077 | mixin-deep@^1.2.0: 2078 | version "1.3.1" 2079 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 2080 | dependencies: 2081 | for-in "^1.0.2" 2082 | is-extendable "^1.0.1" 2083 | 2084 | mkdirp@^0.5.0, mkdirp@^0.5.1: 2085 | version "0.5.1" 2086 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2087 | dependencies: 2088 | minimist "0.0.8" 2089 | 2090 | module-deps@^6.0.0: 2091 | version "6.2.0" 2092 | resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.0.tgz#d41a2e790245ce319171e4e7c4d8c73993ba3cd5" 2093 | dependencies: 2094 | JSONStream "^1.0.3" 2095 | browser-resolve "^1.7.0" 2096 | cached-path-relative "^1.0.0" 2097 | concat-stream "~1.6.0" 2098 | defined "^1.0.0" 2099 | detective "^5.0.2" 2100 | duplexer2 "^0.1.2" 2101 | inherits "^2.0.1" 2102 | parents "^1.0.0" 2103 | readable-stream "^2.0.2" 2104 | resolve "^1.4.0" 2105 | stream-combiner2 "^1.1.1" 2106 | subarg "^1.0.0" 2107 | through2 "^2.0.0" 2108 | xtend "^4.0.0" 2109 | 2110 | ms@2.0.0: 2111 | version "2.0.0" 2112 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2113 | 2114 | ms@^2.1.1: 2115 | version "2.1.1" 2116 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2117 | 2118 | nan@^2.9.2: 2119 | version "2.12.1" 2120 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" 2121 | 2122 | nanomatch@^1.2.9: 2123 | version "1.2.13" 2124 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2125 | dependencies: 2126 | arr-diff "^4.0.0" 2127 | array-unique "^0.3.2" 2128 | define-property "^2.0.2" 2129 | extend-shallow "^3.0.2" 2130 | fragment-cache "^0.2.1" 2131 | is-windows "^1.0.2" 2132 | kind-of "^6.0.2" 2133 | object.pick "^1.3.0" 2134 | regex-not "^1.0.0" 2135 | snapdragon "^0.8.1" 2136 | to-regex "^3.0.1" 2137 | 2138 | napi-build-utils@^1.0.1: 2139 | version "1.0.1" 2140 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" 2141 | 2142 | needle@^2.2.1: 2143 | version "2.2.4" 2144 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" 2145 | dependencies: 2146 | debug "^2.1.2" 2147 | iconv-lite "^0.4.4" 2148 | sax "^1.2.4" 2149 | 2150 | node-abi@^2.7.0: 2151 | version "2.7.1" 2152 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.7.1.tgz#a8997ae91176a5fbaa455b194976e32683cda643" 2153 | dependencies: 2154 | semver "^5.4.1" 2155 | 2156 | node-pre-gyp@^0.10.0: 2157 | version "0.10.3" 2158 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 2159 | dependencies: 2160 | detect-libc "^1.0.2" 2161 | mkdirp "^0.5.1" 2162 | needle "^2.2.1" 2163 | nopt "^4.0.1" 2164 | npm-packlist "^1.1.6" 2165 | npmlog "^4.0.2" 2166 | rc "^1.2.7" 2167 | rimraf "^2.6.1" 2168 | semver "^5.3.0" 2169 | tar "^4" 2170 | 2171 | node-releases@^1.1.3: 2172 | version "1.1.8" 2173 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.8.tgz#32a63fff63c5e51b7e0f540ac95947d220fc6862" 2174 | dependencies: 2175 | semver "^5.3.0" 2176 | 2177 | noop-logger@^0.1.1: 2178 | version "0.1.1" 2179 | resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" 2180 | 2181 | nopt@^4.0.1: 2182 | version "4.0.1" 2183 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2184 | dependencies: 2185 | abbrev "1" 2186 | osenv "^0.1.4" 2187 | 2188 | normalize-path@^2.1.1: 2189 | version "2.1.1" 2190 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2191 | dependencies: 2192 | remove-trailing-separator "^1.0.1" 2193 | 2194 | normalize-path@^3.0.0: 2195 | version "3.0.0" 2196 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2197 | 2198 | npm-bundled@^1.0.1: 2199 | version "1.0.6" 2200 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 2201 | 2202 | npm-packlist@^1.1.6: 2203 | version "1.4.0" 2204 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.0.tgz#b2c0867af2a396e0734343d2b6b3f7934db935f2" 2205 | dependencies: 2206 | ignore-walk "^3.0.1" 2207 | npm-bundled "^1.0.1" 2208 | 2209 | npm-run-path@^2.0.0: 2210 | version "2.0.2" 2211 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2212 | dependencies: 2213 | path-key "^2.0.0" 2214 | 2215 | npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: 2216 | version "4.1.2" 2217 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2218 | dependencies: 2219 | are-we-there-yet "~1.1.2" 2220 | console-control-strings "~1.1.0" 2221 | gauge "~2.7.3" 2222 | set-blocking "~2.0.0" 2223 | 2224 | number-is-nan@^1.0.0: 2225 | version "1.0.1" 2226 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2227 | 2228 | object-assign@^4.1.0: 2229 | version "4.1.1" 2230 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2231 | 2232 | object-copy@^0.1.0: 2233 | version "0.1.0" 2234 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2235 | dependencies: 2236 | copy-descriptor "^0.1.0" 2237 | define-property "^0.2.5" 2238 | kind-of "^3.0.3" 2239 | 2240 | object-visit@^1.0.0: 2241 | version "1.0.1" 2242 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2243 | dependencies: 2244 | isobject "^3.0.0" 2245 | 2246 | object.pick@^1.3.0: 2247 | version "1.3.0" 2248 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2249 | dependencies: 2250 | isobject "^3.0.1" 2251 | 2252 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2253 | version "1.4.0" 2254 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2255 | dependencies: 2256 | wrappy "1" 2257 | 2258 | os-browserify@~0.3.0: 2259 | version "0.3.0" 2260 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" 2261 | 2262 | os-homedir@^1.0.0, os-homedir@^1.0.1: 2263 | version "1.0.2" 2264 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2265 | 2266 | os-tmpdir@^1.0.0: 2267 | version "1.0.2" 2268 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2269 | 2270 | osenv@^0.1.4: 2271 | version "0.1.5" 2272 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2273 | dependencies: 2274 | os-homedir "^1.0.0" 2275 | os-tmpdir "^1.0.0" 2276 | 2277 | output-file-sync@^2.0.0: 2278 | version "2.0.1" 2279 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" 2280 | dependencies: 2281 | graceful-fs "^4.1.11" 2282 | is-plain-obj "^1.1.0" 2283 | mkdirp "^0.5.1" 2284 | 2285 | p-finally@^1.0.0: 2286 | version "1.0.0" 2287 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2288 | 2289 | pako@~1.0.5: 2290 | version "1.0.8" 2291 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4" 2292 | 2293 | parents@^1.0.0, parents@^1.0.1: 2294 | version "1.0.1" 2295 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" 2296 | dependencies: 2297 | path-platform "~0.11.15" 2298 | 2299 | parse-asn1@^5.0.0: 2300 | version "5.1.4" 2301 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" 2302 | dependencies: 2303 | asn1.js "^4.0.0" 2304 | browserify-aes "^1.0.0" 2305 | create-hash "^1.1.0" 2306 | evp_bytestokey "^1.0.0" 2307 | pbkdf2 "^3.0.3" 2308 | safe-buffer "^5.1.1" 2309 | 2310 | parse-passwd@^1.0.0: 2311 | version "1.0.0" 2312 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 2313 | 2314 | pascalcase@^0.1.1: 2315 | version "0.1.1" 2316 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2317 | 2318 | path-browserify@~0.0.0: 2319 | version "0.0.1" 2320 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" 2321 | 2322 | path-dirname@^1.0.0: 2323 | version "1.0.2" 2324 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 2325 | 2326 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 2327 | version "1.0.1" 2328 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2329 | 2330 | path-key@^2.0.0: 2331 | version "2.0.1" 2332 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2333 | 2334 | path-parse@^1.0.6: 2335 | version "1.0.6" 2336 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2337 | 2338 | path-platform@~0.11.15: 2339 | version "0.11.15" 2340 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 2341 | 2342 | pbkdf2@^3.0.3: 2343 | version "3.0.17" 2344 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" 2345 | dependencies: 2346 | create-hash "^1.1.2" 2347 | create-hmac "^1.1.4" 2348 | ripemd160 "^2.0.1" 2349 | safe-buffer "^5.0.1" 2350 | sha.js "^2.4.8" 2351 | 2352 | pify@^3.0.0: 2353 | version "3.0.0" 2354 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2355 | 2356 | posix-character-classes@^0.1.0: 2357 | version "0.1.1" 2358 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2359 | 2360 | prebuild-install@^5.2.1: 2361 | version "5.2.4" 2362 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.4.tgz#8cc41a217ef778a31d3a876fe6668d05406db750" 2363 | dependencies: 2364 | detect-libc "^1.0.3" 2365 | expand-template "^2.0.3" 2366 | github-from-package "0.0.0" 2367 | minimist "^1.2.0" 2368 | mkdirp "^0.5.1" 2369 | napi-build-utils "^1.0.1" 2370 | node-abi "^2.7.0" 2371 | noop-logger "^0.1.1" 2372 | npmlog "^4.0.1" 2373 | os-homedir "^1.0.1" 2374 | pump "^2.0.1" 2375 | rc "^1.2.7" 2376 | simple-get "^2.7.0" 2377 | tar-fs "^1.13.0" 2378 | tunnel-agent "^0.6.0" 2379 | which-pm-runs "^1.0.0" 2380 | 2381 | private@^0.1.6: 2382 | version "0.1.8" 2383 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 2384 | 2385 | process-nextick-args@~2.0.0: 2386 | version "2.0.0" 2387 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2388 | 2389 | process@~0.11.0: 2390 | version "0.11.10" 2391 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2392 | 2393 | pseudomap@^1.0.2: 2394 | version "1.0.2" 2395 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2396 | 2397 | public-encrypt@^4.0.0: 2398 | version "4.0.3" 2399 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" 2400 | dependencies: 2401 | bn.js "^4.1.0" 2402 | browserify-rsa "^4.0.0" 2403 | create-hash "^1.1.0" 2404 | parse-asn1 "^5.0.0" 2405 | randombytes "^2.0.1" 2406 | safe-buffer "^5.1.2" 2407 | 2408 | pump@^1.0.0: 2409 | version "1.0.3" 2410 | resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" 2411 | dependencies: 2412 | end-of-stream "^1.1.0" 2413 | once "^1.3.1" 2414 | 2415 | pump@^2.0.1: 2416 | version "2.0.1" 2417 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 2418 | dependencies: 2419 | end-of-stream "^1.1.0" 2420 | once "^1.3.1" 2421 | 2422 | punycode@1.3.2: 2423 | version "1.3.2" 2424 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2425 | 2426 | punycode@^1.3.2: 2427 | version "1.4.1" 2428 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2429 | 2430 | querystring-es3@~0.2.0: 2431 | version "0.2.1" 2432 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2433 | 2434 | querystring@0.2.0: 2435 | version "0.2.0" 2436 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2437 | 2438 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: 2439 | version "2.1.0" 2440 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 2441 | dependencies: 2442 | safe-buffer "^5.1.0" 2443 | 2444 | randomfill@^1.0.3: 2445 | version "1.0.4" 2446 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" 2447 | dependencies: 2448 | randombytes "^2.0.5" 2449 | safe-buffer "^5.1.0" 2450 | 2451 | rc@^1.2.7: 2452 | version "1.2.8" 2453 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2454 | dependencies: 2455 | deep-extend "^0.6.0" 2456 | ini "~1.3.0" 2457 | minimist "^1.2.0" 2458 | strip-json-comments "~2.0.1" 2459 | 2460 | read-only-stream@^2.0.0: 2461 | version "2.0.0" 2462 | resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" 2463 | dependencies: 2464 | readable-stream "^2.0.2" 2465 | 2466 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: 2467 | version "2.3.6" 2468 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2469 | dependencies: 2470 | core-util-is "~1.0.0" 2471 | inherits "~2.0.3" 2472 | isarray "~1.0.0" 2473 | process-nextick-args "~2.0.0" 2474 | safe-buffer "~5.1.1" 2475 | string_decoder "~1.1.1" 2476 | util-deprecate "~1.0.1" 2477 | 2478 | readdirp@^2.2.1: 2479 | version "2.2.1" 2480 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 2481 | dependencies: 2482 | graceful-fs "^4.1.11" 2483 | micromatch "^3.1.10" 2484 | readable-stream "^2.0.2" 2485 | 2486 | regenerate-unicode-properties@^7.0.0: 2487 | version "7.0.0" 2488 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" 2489 | dependencies: 2490 | regenerate "^1.4.0" 2491 | 2492 | regenerate@^1.4.0: 2493 | version "1.4.0" 2494 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 2495 | 2496 | regenerator-runtime@^0.12.0: 2497 | version "0.12.1" 2498 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" 2499 | 2500 | regenerator-transform@^0.13.4: 2501 | version "0.13.4" 2502 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" 2503 | dependencies: 2504 | private "^0.1.6" 2505 | 2506 | regex-not@^1.0.0, regex-not@^1.0.2: 2507 | version "1.0.2" 2508 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2509 | dependencies: 2510 | extend-shallow "^3.0.2" 2511 | safe-regex "^1.1.0" 2512 | 2513 | regexp-tree@^0.1.0: 2514 | version "0.1.5" 2515 | resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" 2516 | 2517 | regexpu-core@^4.1.3, regexpu-core@^4.2.0: 2518 | version "4.4.0" 2519 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" 2520 | dependencies: 2521 | regenerate "^1.4.0" 2522 | regenerate-unicode-properties "^7.0.0" 2523 | regjsgen "^0.5.0" 2524 | regjsparser "^0.6.0" 2525 | unicode-match-property-ecmascript "^1.0.4" 2526 | unicode-match-property-value-ecmascript "^1.0.2" 2527 | 2528 | regjsgen@^0.5.0: 2529 | version "0.5.0" 2530 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" 2531 | 2532 | regjsparser@^0.6.0: 2533 | version "0.6.0" 2534 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" 2535 | dependencies: 2536 | jsesc "~0.5.0" 2537 | 2538 | remove-trailing-separator@^1.0.1: 2539 | version "1.1.0" 2540 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2541 | 2542 | repeat-element@^1.1.2: 2543 | version "1.1.3" 2544 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2545 | 2546 | repeat-string@^1.6.1: 2547 | version "1.6.1" 2548 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2549 | 2550 | resolve-dir@^1.0.0: 2551 | version "1.0.1" 2552 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" 2553 | dependencies: 2554 | expand-tilde "^2.0.0" 2555 | global-modules "^1.0.0" 2556 | 2557 | resolve-url@^0.2.1: 2558 | version "0.2.1" 2559 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2560 | 2561 | resolve@1.1.7: 2562 | version "1.1.7" 2563 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2564 | 2565 | resolve@^1.1.4, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0: 2566 | version "1.10.0" 2567 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" 2568 | dependencies: 2569 | path-parse "^1.0.6" 2570 | 2571 | ret@~0.1.10: 2572 | version "0.1.15" 2573 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2574 | 2575 | rimraf@^2.6.1: 2576 | version "2.6.3" 2577 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 2578 | dependencies: 2579 | glob "^7.1.3" 2580 | 2581 | ripemd160@^2.0.0, ripemd160@^2.0.1: 2582 | version "2.0.2" 2583 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" 2584 | dependencies: 2585 | hash-base "^3.0.0" 2586 | inherits "^2.0.1" 2587 | 2588 | rollup-plugin-babel@^4.3.2: 2589 | version "4.3.2" 2590 | resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" 2591 | dependencies: 2592 | "@babel/helper-module-imports" "^7.0.0" 2593 | rollup-pluginutils "^2.3.0" 2594 | 2595 | rollup-plugin-commonjs@^9.2.1: 2596 | version "9.2.1" 2597 | resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.1.tgz#bb151ca8fa23600c7a03e25f9f0a45b1ee922dac" 2598 | dependencies: 2599 | estree-walker "^0.5.2" 2600 | magic-string "^0.25.1" 2601 | resolve "^1.10.0" 2602 | rollup-pluginutils "^2.3.3" 2603 | 2604 | rollup-plugin-filesize@^6.0.1: 2605 | version "6.0.1" 2606 | resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-6.0.1.tgz#71937b48a411374c76c4a7e6bbdb087780d8bd64" 2607 | dependencies: 2608 | boxen "^2.0.0" 2609 | brotli-size "0.0.3" 2610 | colors "^1.3.2" 2611 | deep-assign "^2.0.0" 2612 | filesize "^3.6.1" 2613 | gzip-size "^5.0.0" 2614 | terser "^3.10.0" 2615 | 2616 | rollup-plugin-multi-entry@^2.1.0: 2617 | version "2.1.0" 2618 | resolved "https://registry.yarnpkg.com/rollup-plugin-multi-entry/-/rollup-plugin-multi-entry-2.1.0.tgz#64a7287adfd437cab33bf6364a8d8ab1e7a7725d" 2619 | dependencies: 2620 | matched "^1.0.2" 2621 | 2622 | rollup-plugin-node-resolve@^4.0.1: 2623 | version "4.0.1" 2624 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz#f95765d174e5daeef9ea6268566141f53aa9d422" 2625 | dependencies: 2626 | builtin-modules "^3.0.0" 2627 | is-module "^1.0.0" 2628 | resolve "^1.10.0" 2629 | 2630 | rollup-plugin-progress@^1.0.0: 2631 | version "1.0.0" 2632 | resolved "https://registry.yarnpkg.com/rollup-plugin-progress/-/rollup-plugin-progress-1.0.0.tgz#bcec2c4270776943659303f59255e57a38152f36" 2633 | dependencies: 2634 | chalk "^1.1.3" 2635 | 2636 | rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: 2637 | version "2.4.1" 2638 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz#de43ab54965bbf47843599a7f3adceb723de38db" 2639 | dependencies: 2640 | estree-walker "^0.6.0" 2641 | micromatch "^3.1.10" 2642 | 2643 | rollup@^1.3.1: 2644 | version "1.3.1" 2645 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.3.1.tgz#cf3bad0ba38ee4534e3057cc6b7e662b6db83d78" 2646 | dependencies: 2647 | "@types/estree" "0.0.39" 2648 | "@types/node" "^11.9.5" 2649 | acorn "^6.1.0" 2650 | 2651 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2652 | version "5.1.2" 2653 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2654 | 2655 | safe-regex@^1.1.0: 2656 | version "1.1.0" 2657 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2658 | dependencies: 2659 | ret "~0.1.10" 2660 | 2661 | "safer-buffer@>= 2.1.2 < 3": 2662 | version "2.1.2" 2663 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2664 | 2665 | sax@^1.2.4: 2666 | version "1.2.4" 2667 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2668 | 2669 | semver@^5.3.0, semver@^5.4.1: 2670 | version "5.6.0" 2671 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 2672 | 2673 | set-blocking@~2.0.0: 2674 | version "2.0.0" 2675 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2676 | 2677 | set-value@^0.4.3: 2678 | version "0.4.3" 2679 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2680 | dependencies: 2681 | extend-shallow "^2.0.1" 2682 | is-extendable "^0.1.1" 2683 | is-plain-object "^2.0.1" 2684 | to-object-path "^0.3.0" 2685 | 2686 | set-value@^2.0.0: 2687 | version "2.0.0" 2688 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2689 | dependencies: 2690 | extend-shallow "^2.0.1" 2691 | is-extendable "^0.1.1" 2692 | is-plain-object "^2.0.3" 2693 | split-string "^3.0.1" 2694 | 2695 | sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: 2696 | version "2.4.11" 2697 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 2698 | dependencies: 2699 | inherits "^2.0.1" 2700 | safe-buffer "^5.0.1" 2701 | 2702 | shasum@^1.0.0: 2703 | version "1.0.2" 2704 | resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" 2705 | dependencies: 2706 | json-stable-stringify "~0.0.0" 2707 | sha.js "~2.4.4" 2708 | 2709 | shebang-command@^1.2.0: 2710 | version "1.2.0" 2711 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2712 | dependencies: 2713 | shebang-regex "^1.0.0" 2714 | 2715 | shebang-regex@^1.0.0: 2716 | version "1.0.0" 2717 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2718 | 2719 | shell-quote@^1.6.1: 2720 | version "1.6.1" 2721 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" 2722 | dependencies: 2723 | array-filter "~0.0.0" 2724 | array-map "~0.0.0" 2725 | array-reduce "~0.0.0" 2726 | jsonify "~0.0.0" 2727 | 2728 | signal-exit@^3.0.0: 2729 | version "3.0.2" 2730 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2731 | 2732 | simple-concat@^1.0.0: 2733 | version "1.0.0" 2734 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" 2735 | 2736 | simple-get@^2.7.0: 2737 | version "2.8.1" 2738 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" 2739 | dependencies: 2740 | decompress-response "^3.3.0" 2741 | once "^1.3.1" 2742 | simple-concat "^1.0.0" 2743 | 2744 | slash@^2.0.0: 2745 | version "2.0.0" 2746 | resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" 2747 | 2748 | snapdragon-node@^2.0.1: 2749 | version "2.1.1" 2750 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2751 | dependencies: 2752 | define-property "^1.0.0" 2753 | isobject "^3.0.0" 2754 | snapdragon-util "^3.0.1" 2755 | 2756 | snapdragon-util@^3.0.1: 2757 | version "3.0.1" 2758 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2759 | dependencies: 2760 | kind-of "^3.2.0" 2761 | 2762 | snapdragon@^0.8.1: 2763 | version "0.8.2" 2764 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2765 | dependencies: 2766 | base "^0.11.1" 2767 | debug "^2.2.0" 2768 | define-property "^0.2.5" 2769 | extend-shallow "^2.0.1" 2770 | map-cache "^0.2.2" 2771 | source-map "^0.5.6" 2772 | source-map-resolve "^0.5.0" 2773 | use "^3.1.0" 2774 | 2775 | source-map-resolve@^0.5.0: 2776 | version "0.5.2" 2777 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 2778 | dependencies: 2779 | atob "^2.1.1" 2780 | decode-uri-component "^0.2.0" 2781 | resolve-url "^0.2.1" 2782 | source-map-url "^0.4.0" 2783 | urix "^0.1.0" 2784 | 2785 | source-map-support@~0.5.9: 2786 | version "0.5.10" 2787 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" 2788 | dependencies: 2789 | buffer-from "^1.0.0" 2790 | source-map "^0.6.0" 2791 | 2792 | source-map-url@^0.4.0: 2793 | version "0.4.0" 2794 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2795 | 2796 | source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: 2797 | version "0.5.7" 2798 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2799 | 2800 | source-map@^0.6.0, source-map@~0.6.1: 2801 | version "0.6.1" 2802 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2803 | 2804 | sourcemap-codec@^1.4.4: 2805 | version "1.4.4" 2806 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" 2807 | 2808 | split-string@^3.0.1, split-string@^3.0.2: 2809 | version "3.1.0" 2810 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 2811 | dependencies: 2812 | extend-shallow "^3.0.0" 2813 | 2814 | static-extend@^0.1.1: 2815 | version "0.1.2" 2816 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2817 | dependencies: 2818 | define-property "^0.2.5" 2819 | object-copy "^0.1.0" 2820 | 2821 | stream-browserify@^2.0.0: 2822 | version "2.0.2" 2823 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" 2824 | dependencies: 2825 | inherits "~2.0.1" 2826 | readable-stream "^2.0.2" 2827 | 2828 | stream-combiner2@^1.1.1: 2829 | version "1.1.1" 2830 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" 2831 | dependencies: 2832 | duplexer2 "~0.1.0" 2833 | readable-stream "^2.0.2" 2834 | 2835 | stream-http@^2.0.0: 2836 | version "2.8.3" 2837 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" 2838 | dependencies: 2839 | builtin-status-codes "^3.0.0" 2840 | inherits "^2.0.1" 2841 | readable-stream "^2.3.6" 2842 | to-arraybuffer "^1.0.0" 2843 | xtend "^4.0.0" 2844 | 2845 | stream-splicer@^2.0.0: 2846 | version "2.0.0" 2847 | resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" 2848 | dependencies: 2849 | inherits "^2.0.1" 2850 | readable-stream "^2.0.2" 2851 | 2852 | string-width@^1.0.1: 2853 | version "1.0.2" 2854 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2855 | dependencies: 2856 | code-point-at "^1.0.0" 2857 | is-fullwidth-code-point "^1.0.0" 2858 | strip-ansi "^3.0.0" 2859 | 2860 | "string-width@^1.0.2 || 2", string-width@^2.1.1: 2861 | version "2.1.1" 2862 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2863 | dependencies: 2864 | is-fullwidth-code-point "^2.0.0" 2865 | strip-ansi "^4.0.0" 2866 | 2867 | string-width@^3.0.0: 2868 | version "3.0.0" 2869 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1" 2870 | dependencies: 2871 | emoji-regex "^7.0.1" 2872 | is-fullwidth-code-point "^2.0.0" 2873 | strip-ansi "^5.0.0" 2874 | 2875 | string_decoder@^1.1.1: 2876 | version "1.2.0" 2877 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" 2878 | dependencies: 2879 | safe-buffer "~5.1.0" 2880 | 2881 | string_decoder@~1.1.1: 2882 | version "1.1.1" 2883 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2884 | dependencies: 2885 | safe-buffer "~5.1.0" 2886 | 2887 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2888 | version "3.0.1" 2889 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2890 | dependencies: 2891 | ansi-regex "^2.0.0" 2892 | 2893 | strip-ansi@^4.0.0: 2894 | version "4.0.0" 2895 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2896 | dependencies: 2897 | ansi-regex "^3.0.0" 2898 | 2899 | strip-ansi@^5.0.0: 2900 | version "5.0.0" 2901 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" 2902 | dependencies: 2903 | ansi-regex "^4.0.0" 2904 | 2905 | strip-eof@^1.0.0: 2906 | version "1.0.0" 2907 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2908 | 2909 | strip-json-comments@~2.0.1: 2910 | version "2.0.1" 2911 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2912 | 2913 | subarg@^1.0.0: 2914 | version "1.0.0" 2915 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" 2916 | dependencies: 2917 | minimist "^1.1.0" 2918 | 2919 | supports-color@^2.0.0: 2920 | version "2.0.0" 2921 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2922 | 2923 | supports-color@^5.3.0: 2924 | version "5.5.0" 2925 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2926 | dependencies: 2927 | has-flag "^3.0.0" 2928 | 2929 | syntax-error@^1.1.1: 2930 | version "1.4.0" 2931 | resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" 2932 | dependencies: 2933 | acorn-node "^1.2.0" 2934 | 2935 | tar-fs@^1.13.0: 2936 | version "1.16.3" 2937 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" 2938 | dependencies: 2939 | chownr "^1.0.1" 2940 | mkdirp "^0.5.1" 2941 | pump "^1.0.0" 2942 | tar-stream "^1.1.2" 2943 | 2944 | tar-stream@^1.1.2: 2945 | version "1.6.2" 2946 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" 2947 | dependencies: 2948 | bl "^1.0.0" 2949 | buffer-alloc "^1.2.0" 2950 | end-of-stream "^1.0.0" 2951 | fs-constants "^1.0.0" 2952 | readable-stream "^2.3.0" 2953 | to-buffer "^1.1.1" 2954 | xtend "^4.0.0" 2955 | 2956 | tar@^4: 2957 | version "4.4.8" 2958 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 2959 | dependencies: 2960 | chownr "^1.1.1" 2961 | fs-minipass "^1.2.5" 2962 | minipass "^2.3.4" 2963 | minizlib "^1.1.1" 2964 | mkdirp "^0.5.0" 2965 | safe-buffer "^5.1.2" 2966 | yallist "^3.0.2" 2967 | 2968 | term-size@^1.2.0: 2969 | version "1.2.0" 2970 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 2971 | dependencies: 2972 | execa "^0.7.0" 2973 | 2974 | terser@^3.10.0: 2975 | version "3.16.1" 2976 | resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" 2977 | dependencies: 2978 | commander "~2.17.1" 2979 | source-map "~0.6.1" 2980 | source-map-support "~0.5.9" 2981 | 2982 | through2@^2.0.0: 2983 | version "2.0.5" 2984 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 2985 | dependencies: 2986 | readable-stream "~2.3.6" 2987 | xtend "~4.0.1" 2988 | 2989 | "through@>=2.2.7 <3": 2990 | version "2.3.8" 2991 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2992 | 2993 | timers-browserify@^1.0.1: 2994 | version "1.4.2" 2995 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" 2996 | dependencies: 2997 | process "~0.11.0" 2998 | 2999 | to-arraybuffer@^1.0.0: 3000 | version "1.0.1" 3001 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 3002 | 3003 | to-buffer@^1.1.1: 3004 | version "1.1.1" 3005 | resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" 3006 | 3007 | to-fast-properties@^2.0.0: 3008 | version "2.0.0" 3009 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 3010 | 3011 | to-object-path@^0.3.0: 3012 | version "0.3.0" 3013 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3014 | dependencies: 3015 | kind-of "^3.0.2" 3016 | 3017 | to-regex-range@^2.1.0: 3018 | version "2.1.1" 3019 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3020 | dependencies: 3021 | is-number "^3.0.0" 3022 | repeat-string "^1.6.1" 3023 | 3024 | to-regex@^3.0.1, to-regex@^3.0.2: 3025 | version "3.0.2" 3026 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3027 | dependencies: 3028 | define-property "^2.0.2" 3029 | extend-shallow "^3.0.2" 3030 | regex-not "^1.0.2" 3031 | safe-regex "^1.1.0" 3032 | 3033 | trim-right@^1.0.1: 3034 | version "1.0.1" 3035 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 3036 | 3037 | tty-browserify@0.0.1: 3038 | version "0.0.1" 3039 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" 3040 | 3041 | tunnel-agent@^0.6.0: 3042 | version "0.6.0" 3043 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 3044 | dependencies: 3045 | safe-buffer "^5.0.1" 3046 | 3047 | typedarray@^0.0.6: 3048 | version "0.0.6" 3049 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 3050 | 3051 | umd@^3.0.0: 3052 | version "3.0.3" 3053 | resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" 3054 | 3055 | undeclared-identifiers@^1.1.2: 3056 | version "1.1.3" 3057 | resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" 3058 | dependencies: 3059 | acorn-node "^1.3.0" 3060 | dash-ast "^1.0.0" 3061 | get-assigned-identifiers "^1.2.0" 3062 | simple-concat "^1.0.0" 3063 | xtend "^4.0.1" 3064 | 3065 | unicode-canonical-property-names-ecmascript@^1.0.4: 3066 | version "1.0.4" 3067 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 3068 | 3069 | unicode-match-property-ecmascript@^1.0.4: 3070 | version "1.0.4" 3071 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 3072 | dependencies: 3073 | unicode-canonical-property-names-ecmascript "^1.0.4" 3074 | unicode-property-aliases-ecmascript "^1.0.4" 3075 | 3076 | unicode-match-property-value-ecmascript@^1.0.2: 3077 | version "1.0.2" 3078 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" 3079 | 3080 | unicode-property-aliases-ecmascript@^1.0.4: 3081 | version "1.0.4" 3082 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" 3083 | 3084 | union-value@^1.0.0: 3085 | version "1.0.0" 3086 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 3087 | dependencies: 3088 | arr-union "^3.1.0" 3089 | get-value "^2.0.6" 3090 | is-extendable "^0.1.1" 3091 | set-value "^0.4.3" 3092 | 3093 | unset-value@^1.0.0: 3094 | version "1.0.0" 3095 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3096 | dependencies: 3097 | has-value "^0.3.1" 3098 | isobject "^3.0.0" 3099 | 3100 | upath@^1.1.0: 3101 | version "1.1.0" 3102 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" 3103 | 3104 | urix@^0.1.0: 3105 | version "0.1.0" 3106 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3107 | 3108 | url@~0.11.0: 3109 | version "0.11.0" 3110 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 3111 | dependencies: 3112 | punycode "1.3.2" 3113 | querystring "0.2.0" 3114 | 3115 | use@^3.1.0: 3116 | version "3.1.1" 3117 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3118 | 3119 | util-deprecate@~1.0.1: 3120 | version "1.0.2" 3121 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3122 | 3123 | util@0.10.3: 3124 | version "0.10.3" 3125 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 3126 | dependencies: 3127 | inherits "2.0.1" 3128 | 3129 | util@~0.10.1: 3130 | version "0.10.4" 3131 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" 3132 | dependencies: 3133 | inherits "2.0.3" 3134 | 3135 | vm-browserify@^1.0.0: 3136 | version "1.1.0" 3137 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" 3138 | 3139 | which-pm-runs@^1.0.0: 3140 | version "1.0.0" 3141 | resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" 3142 | 3143 | which@^1.2.14, which@^1.2.9: 3144 | version "1.3.1" 3145 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3146 | dependencies: 3147 | isexe "^2.0.0" 3148 | 3149 | wide-align@^1.1.0: 3150 | version "1.1.3" 3151 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3152 | dependencies: 3153 | string-width "^1.0.2 || 2" 3154 | 3155 | widest-line@^2.0.0: 3156 | version "2.0.1" 3157 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" 3158 | dependencies: 3159 | string-width "^2.1.1" 3160 | 3161 | wrappy@1: 3162 | version "1.0.2" 3163 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3164 | 3165 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: 3166 | version "4.0.1" 3167 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 3168 | 3169 | yallist@^2.1.2: 3170 | version "2.1.2" 3171 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 3172 | 3173 | yallist@^3.0.0, yallist@^3.0.2: 3174 | version "3.0.3" 3175 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 3176 | --------------------------------------------------------------------------------