From 50aca10b85b12191643e97341559bab382c0e584 Mon Sep 17 00:00:00 2001 From: Junda Yang Date: Wed, 31 Oct 2018 11:29:11 -0700 Subject: [PATCH] lyft.28.0rc4.2 --- CONTRIBUTING.md | 10 +- UPDATING.md | 18 + docs/installation.rst | 4 + superset/__init__.py | 9 + superset/assets/.eslintrc | 1 + superset/assets/images/superset-logo@2x.png | Bin 4132 -> 24295 bytes .../images/viz_thumbnails/big_number.png | Bin 10101 -> 103045 bytes .../images/viz_thumbnails/deck_zipcodes.png | Bin 0 -> 90280 bytes .../viz_thumbnails_large/deck_zipcodes.png | Bin 0 -> 316145 bytes superset/assets/package.json | 37 +- superset/assets/spec/.eslintrc | 5 + .../spec/helpers/{browser.js => shim.js} | 5 + .../spec/javascripts/chart/Chart_spec.jsx | 2 - .../components/AsyncSelect_spec.jsx | 1 - .../dashboard/components/Dashboard_spec.jsx | 8 - .../gridComponents/Markdown_spec.jsx | 3 +- .../components/gridComponents/Tab_spec.jsx | 18 +- .../datasource/DatasourceEditor_spec.jsx | 1 + .../AdhocFilterEditPopover_spec.jsx | 2 +- .../AdhocMetricEditPopoverTitle_spec.jsx | 2 +- .../components/DateFilterControl_spec.jsx | 18 +- .../components/DisplayQueryButton_spec.jsx | 2 - .../spec/javascripts/modules/time_spec.js | 100 +- .../javascripts/sqllab/QuerySearch_spec.jsx | 15 +- .../sqllab/SqlEditorLeftBar_spec.jsx | 12 +- .../javascripts/sqllab/TableElement_spec.jsx | 4 +- .../spec/javascripts/sqllab/actions_spec.js | 9 +- .../javascripts/visualizations/table_spec.jsx | 105 + .../spec/javascripts/welcome/App_spec.jsx | 8 +- superset/assets/src/CRUD/utils.js | 2 +- superset/assets/src/SqlLab/actions.js | 10 +- .../components/ExploreResultsButton.jsx | 13 +- .../src/SqlLab/components/QuerySearch.jsx | 7 + .../src/SqlLab/components/SqlEditor.jsx | 2 +- .../SqlLab/components/SqlEditorLeftBar.jsx | 125 +- .../components/TemplateParamsEditor.jsx | 5 +- superset/assets/src/chart/Chart.jsx | 13 +- superset/assets/src/chart/chartAction.js | 32 +- superset/assets/src/chart/chartReducer.js | 6 + superset/assets/src/common.js | 8 +- .../src/components/BootstrapSliderWrapper.css | 8 + .../src/components/BootstrapSliderWrapper.jsx | 12 + .../assets/src/components/ModalTrigger.jsx | 45 +- superset/assets/src/components/ObjectTags.css | 195 + superset/assets/src/components/ObjectTags.jsx | 126 + .../assets/src/components/RefreshLabel.jsx | 51 + .../components/BuilderComponentPane.jsx | 2 + .../components/DeleteComponentModal.jsx | 62 + .../src/dashboard/components/Header.jsx | 27 + .../components/gridComponents/Tab.jsx | 10 +- .../components/gridComponents/Tags.jsx | 309 ++ .../components/gridComponents/index.js | 4 + .../components/gridComponents/new/NewTags.jsx | 16 + .../components/menu/WithPopoverMenu.jsx | 23 +- .../src/dashboard/reducers/dashboardState.js | 62 +- .../src/dashboard/stylesheets/dashboard.less | 36 +- .../dashboard/util/componentIsResizable.js | 12 +- .../src/dashboard/util/componentTypes.js | 2 + .../assets/src/dashboard/util/constants.js | 8 + .../util/getDetailedComponentWidth.js | 4 +- .../assets/src/dashboard/util/isValidChild.js | 6 + .../src/dashboard/util/newComponentFactory.js | 2 + .../dashboard/util/shouldWrapChildInRow.js | 3 + .../src/datasource/DatasourceEditor.jsx | 20 +- ...AdhocFilterEditPopoverSimpleTabContent.jsx | 1 + .../components/AdhocMetricEditPopover.jsx | 12 +- .../explore/components/ExploreChartHeader.jsx | 152 +- .../components/ExploreViewContainer.jsx | 13 +- .../components/controls/DateFilterControl.css | 3 + .../components/controls/DateFilterControl.jsx | 292 +- .../components/controls/HiddenControl.jsx | 1 + .../components/controls/SliderControl.jsx | 35 + .../components/controls/SpatialControl.jsx | 1 - .../src/explore/components/controls/index.js | 2 + superset/assets/src/explore/controls.jsx | 76 +- superset/assets/src/explore/visTypes.jsx | 90 +- superset/assets/src/modules/colors.js | 28 +- superset/assets/src/modules/time.js | 104 +- superset/assets/src/modules/utils.js | 9 +- superset/assets/src/tags.js | 114 + superset/assets/src/utils/common.js | 18 +- .../assets/src/visualizations/BigNumber.jsx | 8 +- superset/assets/src/visualizations/Legend.jsx | 6 +- .../src/visualizations/MapBox/MapBox.css | 3 + .../src/visualizations/MapBox/MapBox.jsx | 205 + .../ScatterPlotGlowOverlay.jsx} | 246 +- .../assets/src/visualizations/PlaySlider.css | 8 - .../assets/src/visualizations/PlaySlider.jsx | 28 +- .../visualizations/countries/myanmar.geojson | 32 +- .../countries/timorleste.geojson | 26 +- .../deckgl/AnimatableDeckGLContainer.jsx | 40 +- .../deckgl/CategoricalDeckGLContainer.jsx | 67 +- .../visualizations/deckgl/DeckGLContainer.jsx | 3 +- .../src/visualizations/deckgl/layers/arc.jsx | 11 +- .../deckgl/layers/{common.js => common.jsx} | 18 +- .../src/visualizations/deckgl/layers/index.js | 2 + .../visualizations/deckgl/layers/polygon.jsx | 39 +- .../visualizations/deckgl/layers/scatter.jsx | 13 +- .../deckgl/layers/screengrid.jsx | 39 +- .../visualizations/deckgl/layers/zipcodes.jsx | 310 ++ .../src/visualizations/deckgl/multi.jsx | 9 +- .../assets/src/visualizations/filter_box.jsx | 3 - superset/assets/src/visualizations/index.js | 5 +- superset/assets/src/visualizations/mapbox.css | 16 - .../assets/src/visualizations/nvd3_vis.js | 6 + .../assets/src/visualizations/pivot_table.js | 1 + superset/assets/src/visualizations/table.js | 7 +- .../assets/src/visualizations/time_table.jsx | 1 + .../assets/src/visualizations/word_cloud.js | 4 +- superset/assets/src/welcome/App.jsx | 88 +- superset/assets/src/welcome/TagsTable.jsx | 94 + superset/assets/stylesheets/superset.less | 6 + superset/assets/yarn.lock | 4582 +++++++++++++---- superset/cache_util.py | 31 +- superset/config.py | 13 +- superset/connectors/base/models.py | 3 +- superset/connectors/druid/models.py | 1 + superset/connectors/sqla/models.py | 120 +- superset/dataframe.py | 4 +- superset/db_engine_specs.py | 156 +- superset/forms.py | 63 +- superset/migrations/versions/05cddfb1eea3_.py | 22 + superset/migrations/versions/179ef0f46016_.py | 22 + superset/migrations/versions/3eeec5640df9_.py | 22 + ...dd_metadata_column_to_annotation_model_.py | 22 + superset/migrations/versions/b3591036f8d4_.py | 22 + .../c82ee8a39623_add_implicit_tags.py | 187 + superset/migrations/versions/d248e10cfa5e_.py | 22 + superset/models/annotations.py | 1 + superset/models/core.py | 69 +- superset/models/helpers.py | 2 +- superset/models/sql_lab.py | 11 + superset/models/tags.py | 229 + superset/security.py | 25 +- superset/sql_lab.py | 2 +- superset/sql_parse.py | 4 +- .../general/security/login_oauth.html | 15 + superset/templates/appbuilder/navbar.html | 5 +- superset/templates/superset/base.html | 11 +- superset/templates/superset/basic.html | 11 +- .../form_view/csv_to_database_view/edit.html | 46 + .../superset/models/database/add.html | 1 + .../superset/models/database/edit.html | 1 + .../superset/models/database/macros.html | 8 +- .../superset/partials/_script_tag.html | 2 +- superset/utils.py | 13 +- superset/views/__init__.py | 6 +- superset/views/annotations.py | 10 +- superset/views/base.py | 4 + superset/views/core.py | 185 +- superset/views/lyft.py | 64 + superset/views/tags.py | 196 + superset/viz.py | 166 +- tests/base_tests.py | 26 +- tests/celery_tests.py | 80 +- tests/core_tests.py | 30 + tests/sql_parse_tests.py | 28 + tests/superset_test_config.py | 2 - tests/viz_tests.py | 105 +- yarn.lock | 4 - 160 files changed, 8384 insertions(+), 2232 deletions(-) create mode 100644 superset/assets/images/viz_thumbnails/deck_zipcodes.png create mode 100644 superset/assets/images/viz_thumbnails_large/deck_zipcodes.png create mode 100644 superset/assets/spec/.eslintrc rename superset/assets/spec/helpers/{browser.js => shim.js} (92%) create mode 100644 superset/assets/spec/javascripts/visualizations/table_spec.jsx create mode 100644 superset/assets/src/components/BootstrapSliderWrapper.css create mode 100644 superset/assets/src/components/BootstrapSliderWrapper.jsx create mode 100644 superset/assets/src/components/ObjectTags.css create mode 100644 superset/assets/src/components/ObjectTags.jsx create mode 100644 superset/assets/src/components/RefreshLabel.jsx create mode 100644 superset/assets/src/dashboard/components/DeleteComponentModal.jsx create mode 100644 superset/assets/src/dashboard/components/gridComponents/Tags.jsx create mode 100644 superset/assets/src/dashboard/components/gridComponents/new/NewTags.jsx create mode 100644 superset/assets/src/explore/components/controls/DateFilterControl.css create mode 100644 superset/assets/src/explore/components/controls/SliderControl.jsx create mode 100644 superset/assets/src/tags.js create mode 100644 superset/assets/src/visualizations/MapBox/MapBox.css create mode 100644 superset/assets/src/visualizations/MapBox/MapBox.jsx rename superset/assets/src/visualizations/{mapbox.jsx => MapBox/ScatterPlotGlowOverlay.jsx} (59%) rename superset/assets/src/visualizations/deckgl/layers/{common.js => common.jsx} (65%) create mode 100644 superset/assets/src/visualizations/deckgl/layers/zipcodes.jsx delete mode 100644 superset/assets/src/visualizations/mapbox.css create mode 100644 superset/assets/src/welcome/TagsTable.jsx create mode 100644 superset/migrations/versions/05cddfb1eea3_.py create mode 100644 superset/migrations/versions/179ef0f46016_.py create mode 100644 superset/migrations/versions/3eeec5640df9_.py create mode 100644 superset/migrations/versions/55e910a74826_add_metadata_column_to_annotation_model_.py create mode 100644 superset/migrations/versions/b3591036f8d4_.py create mode 100644 superset/migrations/versions/c82ee8a39623_add_implicit_tags.py create mode 100644 superset/migrations/versions/d248e10cfa5e_.py create mode 100644 superset/models/tags.py create mode 100644 superset/templates/appbuilder/general/security/login_oauth.html create mode 100644 superset/templates/superset/form_view/csv_to_database_view/edit.html create mode 100644 superset/views/lyft.py create mode 100644 superset/views/tags.py delete mode 100644 yarn.lock diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a20006354e9c3..73f5ccc842bd7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -307,9 +307,13 @@ commands are invoked. We use [Mocha](https://mochajs.org/), [Chai](http://chaijs.com/) and [Enzyme](http://airbnb.io/enzyme/) to test Javascript. Tests can be run with: - cd /superset/superset/assets/javascripts - npm i - npm run test +```bash +cd superset/assets/spec +npm install +npm run test +``` + +### Integration testing ## Linting diff --git a/UPDATING.md b/UPDATING.md index 753ec05d0ebc8..40cf7f9893adb 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -3,6 +3,24 @@ This file documents any backwards-incompatible changes in Superset and assists people when migrating to a new version. +## Superset 0.28.0 +* Support for Python 2 is deprecated, we only support >=3.6 from + `0.28.0` onwards + +* Superset 0.28 deprecates the previous dashboard layout. While 0.27 + offered a migration workflow to users and allowed them to validate and + publish their migrated dashboards individually, 0.28 forces + the migration of all + dashboards through an automated db migration script. We + do recommend that you take a backup prior to this migration. + +* Superset 0.28 deprecates the `median` cluster label aggregator for mapbox visualizations. This particular aggregation is not supported on mapbox visualizations going forward. + +* Superset 0.28 upgrades `flask-login` to `>=0.3`, which includes a + backwards-incompatible change: `g.user.is_authenticated`, + `g.user.is_anonymous`, and `g.user.is_active` are now properties + instead of methods. + ## Superset 0.27.0 * Superset 0.27 start to use nested layout for dashboard builder, which is not backward-compatible with earlier dashboard grid data. We provide migration script diff --git a/docs/installation.rst b/docs/installation.rst index 008a2648f1a1b..d1d1fd5e4008a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -389,6 +389,10 @@ Make sure the user has privileges to access and use all required databases/schemas/tables/views/warehouses, as the Snowflake SQLAlchemy engine does not test for user rights during engine creation. +*Note*: At the time of writing, there is a regression in the current stable version (1.1.2) of +snowflake-sqlalchemy package that causes problems when used with Superset. It is recommended to +use version 1.1.0 or try a newer version. + See `Snowflake SQLAlchemy `_. Caching diff --git a/superset/__init__.py b/superset/__init__.py index 5ec3c94a337dd..ce98dc2ee5ce8 100644 --- a/superset/__init__.py +++ b/superset/__init__.py @@ -69,12 +69,21 @@ def get_css_manifest_files(filename): return entry_files.get('css', []) +def get_unloaded_chunks(files, loaded_chunks): + filtered_files = [f for f in files if f not in loaded_chunks] + for f in filtered_files: + loaded_chunks.add(f) + return filtered_files + + parse_manifest_json() @app.context_processor def get_manifest(): return dict( + loaded_chunks=set(), + get_unloaded_chunks=get_unloaded_chunks, js_manifest=get_js_manifest_files, css_manifest=get_css_manifest_files, ) diff --git a/superset/assets/.eslintrc b/superset/assets/.eslintrc index e49a4e0f1bbb4..a79d50d4d9db7 100644 --- a/superset/assets/.eslintrc +++ b/superset/assets/.eslintrc @@ -8,6 +8,7 @@ }, "globals": { "document": true, + "window": true, }, "rules": { "prefer-template": 0, diff --git a/superset/assets/images/superset-logo@2x.png b/superset/assets/images/superset-logo@2x.png index 839f61798d5ee8501be689df4ae1c2e0268fac3b..958ccb87c05fe1d3a48fd2b4054479e99b05be77 100644 GIT binary patch literal 24295 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 XP4UQ$wW1&YUqVw=SLLe`BIN%7X6AQ> diff --git a/superset/assets/images/viz_thumbnails/deck_zipcodes.png b/superset/assets/images/viz_thumbnails/deck_zipcodes.png new file mode 100644 index 0000000000000000000000000000000000000000..b15d521556dfa1f474848960a536f1d0fdceaa8c GIT binary patch literal 90280 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

WEa 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 IGfd)t0Hn)$#sB~S literal 0 HcmV?d00001 diff --git a/superset/assets/images/viz_thumbnails_large/deck_zipcodes.png b/superset/assets/images/viz_thumbnails_large/deck_zipcodes.png new file mode 100644 index 0000000000000000000000000000000000000000..21be5bf8aa81c9ce3a86a9f67e6ad2c9d8e35022 GIT binary patch literal 316145 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�g)>n&qCx_FI zIm#>*AK8b-+6`C`Fk3{UVPVtW3FyVkyibwlC~o`_>FK96A%2Mq}D()NK- zs>{h@&33A|_HoJH-lZG!f%IDJ&YUD#@y-M8)dcSO(y<%i){nhs;^ew1+^N$%-uRA- z&ye*qzkFH=&RQx@$WIOvJDp~JvMKk41u#Tnb@)Rgd#hY~HTYDk?yhXOyW-ZW=_;?8 z)#wDXmgkDg#z@Cbd(HY+7s3#75fuDJQROU{lCo7L)aFk}em!ZV&DE8fl&HV^qe9j(7k* z8;W%9==uH2Svy(Fw;w-9{5JQls29P^{*W3`V_|I_f-*dL|B|LzExWF1?FMZ0yC`8z zTwL7M2fx1$&vIW~Ftz~ua_pusD=TYpaq%4#*aE;r<*0g&Ji%$jGAc$4M12b~zF@Xz z#d`Xjt+{k`~1}9dC$@rrQZiIPp27p?bJvU&wv#r3hamSlLF8u z3fcjfrGl!o;y}oGICXpR>K_3x#kRD8 ziY9}C-{$JmvSMI16dHQS0k@Cd-(2&N|(TIy^2G-`_B~D1#$cUpUFl z>Fm(l-gpG57?Dicu_l&rQoyPZiq*TlVq5WGao{Gar1!0((B zH6Bq$20$G|Rpq7?JV)rO)6%!iVJP6B-&NEtH(>ChjAVmDL;IV6=(q_mn+%GYYMyZn zbhy%`4L>PRT;gYG_$ceSy?q2qur7yysTFMg{Hdp}zhe99k^<0cFQ<-usCuMpCekyx zyWarLTTOYt+o1?IF5guJolxLp6vx#Pd}mP7;H&^N0fILtIREB8fPvmw2J~Xl+p9yA^IQ&rvPS%JeRe0;>F4Y$g}UfI zpqHbzBC|UJ`iVe(u8xvum$u$qXi92!0qzKjNeO=Jy!YV{3grq7od!gy(d`4#O_Z$> z{Akqq4y8jq7#)&zbLLJ?6?WTze3_h{{uJ{bkb-f8Cjlh;CwLN!wX7No3yWZ#B5h9_ zG)XQUV<%AYKoLB+J+r+1li>tJhQ2>7eS_8VJ8n-}uN|9!>Z}LS0jh8PN-!mX)ac$R z%F3+|24FX(qZts@JdYibkDz$2_V?=;8MY}djD)afU-(sijfIm_j1;N#{gil$c%g1v*+@0P8NeDMwU z!kA#F~FT+%q=xIkDZ&c~?eNvDc`C2_6iP6UI+?XF?<7xwM# zX+wG}Y3y9ZSPcF2L`DjVPl!N=R%MMDuD|6y3_1E11KRy&{L&<|4gLbbO&YXsej)_0 z1>Uku_tn;D=^4FbHeJF?q}|_y1aa$RZ4KBUooZo_7z6)@@}LlVi2E9y*bq?h8&QIh zay3SCO^6yNe%p@M>|h)Ml*TjH@e5NljmND zyN+7+JW3W?+_W}VVp^okWR~r}_nMK*5US_1-TOP@8LQ?7G#N#mmZPWb!o@EqR3X6| zHCLCvi9NcL>m6Jj)YY^@;%q48vA80PZA?OiLN(x3)s=z$4;b{wN49@JbH}Cqq1QsL zLDl2XlFy$%GlUT1(|CnUsFj_pfGGzoVRXd;Bq|-J)GYGz?Bne$YmPcGJ9?34Y0jtou`c7J{9-gMmKzZH_6^LKa5hJ$L_4>eFJVe^s`G^^loY05n`r|7Gr* z9y+_3aKC1C4Q?%gF#``353EYfnuELYkyZtL?X&Wr|HOOJGQUsI$W#aME(cc3wMOF5;Ex9-Qrod%i~R*})}4 z>GPhw?0@UM+tJx*^M)`FQg`}qG53{N+i4ke(S;cE$5S*g%#>hS{qT|p!JSsB5Lpsg zqm+=@U+$6+tt)}~3Z?C=oT}_{IfQ_uDq-)PR(&m~b}R)~@uy?h-$k;{q#CHt)|#j4 zn=1%n%<3=LQ~3O<;KD_LOpSK(Ccu=zlZiCZ)6VB}dOm|w< zY^}03&e=hXq{o0~S&UOU1LeXocP?+MDEORM!|sP@vV@Q<$vS12qJ|UZhFS=ey0-0E5lh_ zuh)~b^Bb45US9=apHs`Wmll1E`~()lth@fu^ES#UG#Hl9168bu8PCFQ{nbj9i@zz- zWo13uW#Gd1+il(_;-rd`GobDA9i2=>yfeW{?&|c7>{afUKF@b-%FIeRnztA6) zpf*v-z3L)@YAV5p9yvh_58fFOQ=!VE6KMyfgj($%34!M#yaFEWd+A;-0!)uGP+cn(`QGg z&{onKacMcoV1ZQHV$#8$aU$H6`;eTvGqkbO^wIan*+ZqW zx!Bfz|69DuMHG=@^d7b|h6JJUK(TP{*rz_3)C*`!N<@3le{n)zH|2RqQ(}1x#m4-pPBV?mn9MMEayC6; znMqX^rm>DLXRD_>X<}+_U;U>$oql5EV_Q5HI~h^Q%YQpR8w2)oa1e3C8$wLh=a4{b z)J2GPSJr`)YSQjUES-Kj-nr2?i5068IO}2%qusSm zOx)yrp=m%FKwBQ12S-HkXR2pIK4dNJ#cVVv8!2)WMsb8JYbZJW8qEq*y7O&;O z8U#ndM*OiItb(`}hRnTC!n$f=Cz3yFwCO|P+Z);;| z7s@N};3Y;{SU40@30fQPYuqGp#}-h#kb4M&9QSMXL0hV97a$CV(cTjkm_J-7iSBGF%MmD_kKCbM@tQWk@wSY)< zla-(Rw4TE94xBF3yDu*Ko^Y%hJ>+wOgUsyoNHPVbx!sb8Gzk-lha|6JFShoG{C}SZ zBR%dt3PqJH66?g)pWTm2_^lHY6j?NtUZ!XgQR4~_-B}axxks)6HSaOQg+bu5pC&oZ zRh|UBu&w7Ie$#!Z7O~RfqYcw|WV76H_d_Mg#&A)Ds%1#~CyQ|jY{^8+91o0c0%7TK zDcgHa`z}3hdrOQNw8i$KsDFH|29vy)hM^m8d;(LqY;@X6chS@}X16aGMr0npKCK{` z9Z#Vd9ZsPh$!bilioPFpzU{@6cd?dLBUza3N zmQCDba8hZVLQIr9PpY*>jg!6Ve(~S;$DcZGb_ipxZZM7vy+=JG_xnzBUcYVxx7qo( zCXwj7vc`hmf#oi#zb)eV&#TR$N;5g}28GVvbt5m)i^gt5J4~wuKK#;c?L*!Ex--aA z$zr~B2;t@B50=2FjtxG(+vnox5j>e_h1HSioi>>wWzcvnJEZpCMmv-?+FTR8JQ50t zIHuB8dlxQZK~<>1_z3Bgt=-Xg=ppdV&P)s5Rqp~)DlEM1TnwR4>i%{Y3SFI}!z%F{SOPJ&OSM&_$bB8wPG8s4aNdZCzA_2j*$z|m<)-fm#p{i@Ta(2-J(T&Lu%xvP zwjozD-`TpPskACYp0gi+%J@KedfoF7`iiY{pMK=Vm>8}wx;g*>4#freGlB8k-KC!*~=&?D1G z9X@8RubO4A8TMueKQ*H_H~Xp3zp-Q!_>JBBfl56=05r54NgIs6@NM)vWam*vIQv_2 zMtQllmx50Oo4A>AhcA`zii<)YmSL0Y_lqe!FV!Wa*t!WIQ zIn{x&tx;nmp_=A}RCylD z;{&*+e=Oe9B;04FR`uuI*Xo1?a5wmJ&87WX>Y>Ik9EPp$r6nv%}U1z3^)=6dX`1dE#Q zxeHW6u&BdWp$wYNH&~&*UEAFepW?>?abM-}V1F$ayLCevJy~3@{JmxzP8Zr9t5J9n ziu>aMhfRq|zkUSgLa&|+0y^36hqusiKBzB$X~#Et>7d(;qh2_pR(USS0a%G1L6+0_Ne+LX$CP^P$;BCeBv_2IMBZ}I`2#RE4Uo@rl9ZN zilo44pG$&BK9Iw=>HE&ucI(Lxkl8v8q-V>C-hc?v@Ju5C zw1{ejzW-e}I!i>Q^q$hCMv!lUVx>tqUI$tNicp{Xr^!&G){i>q7;}rUgRi+3H;p92 z-<&#a?(_)Z@Om`GG;SorjJNBPsEO}Ufyr!Ln<8V3 zCXtdyLir~+t%#~;l4RR$kxg@U)-YVs`sL)4pv(ok^4XoVIzL-fg^-IN!T`0Kb_dc> zU#W6Kq4ma}T{g?ILaj^#hqaNMXQ!YS<^HE_*m9E1G^Uab3J~8>0#qcv=E=*8QEO z%tMbEFiucK@kM0zk?kVCU8{$<3rxL9D*<~=Mfri5QVm0IIHQc6NcSrj#BNb6WuEhp z3yi%3Z77qSh?TR3<}SDEV?UKxhU%1(SiRr5K6O6SRssHWi<{afzZH`Se&&%WqCY>A{$)D zQ`uq5dSMP{KHQE}u`qM*ULWR_Oq?R&ll0~q{i^);Z}GO8 z1Xp_t1rNeS2R_akFHw#*LiZ3_)(Rn`jpOc1>H$KLA&5_Ebzubx)-{??@6J~;bs2`! z59k>x+ddp-b8A|bD+US7B)EmC z895!1_n)HpY!zCZj)M6&<+-eP1h5$K?4lPvif03(~ejHg%SWuX0MlzCRjvwZZ9kr$o)4t|b05^xOLJ zu!w763=xPVLGcTxGncf1b=S`d*H zr$$7bf)Fj2xsYiCdA;++5!cmAEPMX}S~}%*e7 zQ&IfnwDYx_&-G?^aJqO`N7OfQ5A$Y|d)=xQNFNyc5Jb11$8!X6t#_OYX|8?iPm_~& zW=QgaB2HVIZ!O|QS8(UJ9J6)&xx$KJuc*WjzpmL2DHvgNf5#1iIX+xg0bG@$lPB*|2v>3_!T56!Lacy@W;@rcpVvIvrRux4}+atLVnv8t-U>7 ztNGQlzpeA$~R*E&iX;sd&QqY6lNDLQHLpzE;);oiIa$wphy;} zrm`R=ZDf>JY**5=GgJHXzQ5O7hcfXIVR6T6hZjVt`#n)exncRg;jxq*QXAOSb@IpS*EE?e6c5U3dK_})}NrF+f4xX_>p?^|4JT&zxU%xJY z94sl^`l;QY3)9Ywbp!3b|Fl;~!-2lK-KTzxsHMNw^*oO#PaQPiNo&aXSg4W}#$6sv zr82y=*=hAl4Q3Ja%u0P7?Z9`WpD;qRX|d_SnUP?lma~8QY88Ea)|Y` z`lhyq?CIX7WJ5>c#9zmWR_4cweAqh(=FNKI9Ll(=S_laXXx# z9n%S`c9`J|k|?~l(rvJ9%B`RYQ+iPlz&3*UAzBBa$ZK66k$E>OOG|Qcq&I=R3(rh~ zh)Dp}Rmgsor$!RItz;`1_+BBP0Z>sE7NT!1oX)WZ@54U|MU?lW;+2hntozJ;K!&^ z;`%h^sfUsqEk)R|l1sQsJ~Fh{{FFyk;Wy^7lvDp5Wf8Y1$b`22e9%ol^Vf5j0*-NfMll1e4q|cPwR4$k}EpV}QZ4s-I#?nbCgyDcucmF2O=l+Lrps z4`_3s>xM7?yFmt4HxufKwa@=d_PY(1e*$Z#w)YPPIIH|_Z&Gmo-Fy%DH)*UxV;Qny zI^W=Tbqh7cw)yZKuN(A#j1YZ>#5sdGFB_DH-M(i*cybiI)>lu}Tc!W@S#q|oi+~NW zL$OJydA$>%T~x^M;YM%IYb9;C=vt^04Nyjd6LR4Jru5E;+2@Gv;>GQb+i)W4ZB@OU zW9_V8`OG^OVREU_c|O&elb;5YGqKRJ2&}|3uoZQyidbv-?w!HP}=ki4A7Q?$c&cX`fk3} zGcv+h2JmN;_|)96Y%&F0vO9w;iZfB1`OK*BfoT5R4*vCyA14O~xX`ywIT%;wtf;Ki ztaSl*xFAUtu|QaaTH#LdUbT2YWX-*8+{WM$H%-M;V)6|=L9bo84aN54{*GlK>Q>*L zgqfIr&~E+4Ni4+@8WM5QQzY%ptdYLC$xc~_BoH0rE`Fr%SGE=o8`0)KL}V2Z@ds3@ zY#R77t<64z=dC}No;ZDHNNGS_b}9kxZN^yx!n1l^v|!;+rxJ)CI|^8^)O_uJz4oWP zA3vj!xUtdfHPm;?N*Ww+rzF>|8~r!`bKfhY?LDMoW_Y% za@rh)x_!1x_Xq~^yGWz59#n|2oy*MAGvyUf7p@Pyy5Uh5KWFHMEdC7^e6!?p3L-yi zer9fN34E#^dtOV*B(ncPMys4RPf)&G)UA}`yAH}TR9<3zodG;@d4|$0<%0>I$9JF1 zFJ@!IyyYmDlP=c`xO6}ijfPG!mUTiFb!5Dc2->%Za?khD;)g9nl$mG+y~&c1tqET> z5q%6FK6qG9yDWlFrH-@BczH2Uxw={Uc#_SNBPSd;zLsv?u2Im&D^)DRn zhX7$W1>0ZK5U_|Z#>*+-ZFb4 zkC3SrS61`F(<-<%^JH^JxD{j)1j8c6m2K zQX>a-Y)=ri2omxxcN)4{jT{#t>#Kl$ zDN23M`GMRg8Obpp!JKi5vuk6&_a-?c!j(E-kDSI{WPWNnx9CG(Y=(vw^`Ot~Cnd8| zOntHu9ma>E!hDUFFMNEf&AP2r%cc-9e3&2ng(A0(8#g@UNaJn}3l}VhSox6aDFo?F zS$|ml9xL16UFKSqw5b}zK^b&^^PE-xZ*oMxrxavKpl~3Hn6V;~=N_^cAh)KB*U6>G zVzYD$^DW``FdDUEfTUU%@K$qmd%|g(C|sgvP2Q}%k>#O7Q=qdaG9pN9(FxLA*N0Ph zQQ}7ANb*|K231?LIk@C$fSXf0QTB8z5C?-0;MH5fUsk>(5eCPyahhdU5SS^{a&*^6 zE+-yMZ%vDmkP>(3wn;PR%?6vK`D3~_+y|>}Im>?|PK5yNACS_ax$k}#<_o$0B0%ZE zLFPD@Pfw{2WMfcat>o0y>Iz<1C(zE*p+v=hKhRwHqY^S*U9zBcL7GGs6`5fhQ26c& z#Tb3%1+>H{6Du*3+8c21Ow_~e=yy4XN__Q1(QFpxr?2+L&<~D`BssbKyA!I(%$UU- zwut@qX{ue$CdBCmpDf_F)bw7?E35O2=O+ffglkcUIQF;AoZUo%xmdYi`dnN-@}5H0 z)*yq)qsj6Zp2vrM;H4x`zTw~0EDrZ7{VnoSweb&si8DgUA%4nK%8~PK?~aI+eU-1_ zHZQTS@k3$>Y*TPFUgPN51++~9tEcjm(Nqg z&aORB8gzLjAAj5P=6qn3_@plzs<&M{wl(8a4JG*=XAh6S(A0Bg7;%XelEYS{>T>lm zT;<9c4Q&F)rbDrRe_3ux$ileM$(+lZ>C)gGPj~T}1dv~#{$E~BSCeLhug1N`&Q-_; zyGJYS>7j>nim$^Ltlo5DNx!wbW#TZVTn#N*u9-wNO`yWaz?1s#-QAqFW&kUDINQM4 z#;Y51@#`&h5RJRLUHI>b^C8EBu-3CMaAgAw(EtXB4f;&hO=&J6D9!G}+rJMRfYVqQ zjFSb2r2KTx(5)?NROkidlMNq{k)5|a^wmh8Qujwy76A1`C7gIO&T$V94^iq!uf66Z zl;a&`y#ikHEhRT~)O=|`2r<<&(3e(`EOy&MXc+$0JYD0%5hNyt0sg0 zkRv3YGM#37dr6dK{Rc8%=38=$;mEc928T@fHt%TaGmj*-|(S{*VdF zop|=F_TSb5mwuq6!s_{u-nQ$yojTpNV}gh3BuaeY1WX7uh?{%F$}ry3*0x- zUr#)~=3^YMj;R@o$Fs+Iis+6L9kHf>g8*r(Rp|K(2kgbu>pt zHSrj52bhkei+SH(E^Yo@>A2Gb%-);qjvhE5jJPo-PqTsY5SQqL8I{QspsA>^WlRzzh`a7T z6#d2|zK;bjc{F9@#STK7AVcxM|83J6_0{6u_2b*0OIMU2$+YJ&;`KQrV-uxY{%2CF zbEE+yMHlJyui}SFTB{n72>1>r8+(Socy<;a#WJ%(R_AMpfG2WAUiq)AhlL&QLvm8e zcblY7b+}8BPi?fmYyELKshh+$9p0O6CQRn>r1ZVV6NyHiq{c(C_o$e2s(^*yN_etR zb)KOkj>M>jTgf5(1)G&U7aX*c#_UX!B#sGai^+J;g!(xiiZX>}XN|lk2w+p*I=;M5 zDnFf1o4=4w8!DwUHEDNb5cG%n(ndulz0A1uWGM6bgJA0$Zf113uOq({s{gkVT;VoD z^Nc+2f41MnDgn{swcqist@I{nFgo5s-VEb(C3l&pD5`*)Alji9mvsc4#xjYP3YN3X z5t5V<1X+x92AcZEzD4PD^;0CWYV_98WCHJ1Yz;5W3$Ry+qEbFk=qDb4gRG10zI;!M$q6d!o_ms44(uye&tIrw6z)RsA|cfs#Ml#QoL`I`QPAQBh4TGqV(d z+}Jc$l=~@s@ynNR&p3fsp=)nvyhWli#FbOXj)h+R+o>DXO}BUu$L&12(+_z%M;s{m zX*{K7m;y$td>~~lO~mASY1mE}aK9Lic&2mFv)WlYkU#+$O>!z5o@0f$v=l=>TdC6K zn$=Xv(aJU${}eQNojDlK;UExc5_@(ffB^e$?>1KY3oNO+BJ=a1?zUN5R8n*5FUR1nq9YvR!b1lOFxzQcM4-Lq~KyJv{Sa>P2`G?6DSW5|xa zi^GH@i^e)3(kbTa=kH=2dv8q#l-|4jvn$*^|J_eel*vOflkynb-gBFIs6hhJ zIL1_%izbihTThwidLOFT;*~aawW^T@v3{+Pk;{tb6{QX@n}x{fp5IfBW{~v9HB*#3 zs~mqlc!gt+8K9icR0?Su+sn`KxJhwmSC9R?F8Ve5--3dl7Wdwl416;4+IJ4l?fB^v z&=-cx=mnmxcgQlW^rDazx!j4F703tuJs3IPGKVJkcZ6mvYYeh}udHwnTTN(@2XL2B zin_OW5t$F|7RdJrnV62w6&Hm}`0EI8cQQr9YidkA;>1CxyqkZ08R*XN(MXp`^kUI* zeM0k?m|Xr11flrdcdHAWS`57yjJ8w?8hz8+qndto_uk|VRm916xzm5QP5dBpMCZ>p zq>LU!642Dkoo76tmHoMtmA%je5l;k;VG7-;Kl|B~*b^zoB*oPEdUN`W&kHvN{J7=N zk_cgC$oukmanJOq=A`1T@M{_xfh#Iei@B|4 z@?p1Yo6GKm>{Qk*Gb%Y{x8S*v#um_%eDDr=-0}evp5e7OC(iYpx@EWi)9hVx#({Tp zHeUsPhqYaDeq8)o5mOOqzAsmpj>}3)uk~atM5AGTq3^leR*+x?a@=k;Q;aW?;ks|$IYzEH%?**I(ls!>@P;eR zJW`L8(EqKO$o_!NdIN4gxcljW0ZA7Ll9ptJv8&67Fko$P1|6T;XN$kpc6=|Nt*m$g z4dhVyOKqyZ;Qice8X1)c)?=jR=!`QxYrWoU3-HuJ=S~@~gb9be`mDRAlZzW1PlqV0 ziz(h7X%#=1yzR|eE9!}$$3PZP*cm~Q{lrVPNa4-%i?>Ib7%%W|j1+l1_wExQd@#G2=`w2I{5rKRXe7SqIXS|hbjOVQ`+6d7T>S4usoqQ3v@VFtxB&TlebhyEOqa8f_#zKJNf zx_*`JnfmDvo6I%@V_3`}EOi6B)aTSc~_udsloA=CGu`$?`#8x20nDVp~}o7o+dB z3Y#ilT5Mb1!1UDb7@;3y{kZsjG(G{kSFua-Ym_W!s4+7kB{jA+Do z%@yyLFo$M`heu?8@}12m?Sg6(1g!)I2GWQWnU}Z6JYI_|?A~&49X23kUAlaAG?dOw*Glxto+ zS^bhd@9A8zTO)}Qm{brYiakn7oT+jV5j66{!%W>qGEn{qX6Hc~b?`QqIEy5Wpr>Dr$ledbXcxojoNJ;#)%pxss*QaE4||8JZn z5qrSiI2&V`y2=_`N+<-5n=L%n#Gb|LGAjzvL~7Y-k$vCPTsoI^sKH(JW~4UP$8`VJ zqUZT8)dbNveR3;iGp`@J+|m8W^atUGDP2W>r?Nt$ZST{U&69F0gfzQwM!_q79~xbH zzoKiy2zi>*$E01f7bTt?>MZZ1q?6<_H`T`WjhI`gx4rdn&8+)ljZCubziYMAnt3|M zCQN7_@W|DN`&R56-{zz9M9Y-kI_Lg6esN*_`x6;~CT&p8gn|`Ag?$vanJlbG@V}C+ zegCeR?C@4q*cs8#YjN7hCwEq%PlkAM;>|qV7l+=`d==*~R>N-C71mdjD@+N$sCRE| zBSoX@KKdwk^4ow1`#yFq<_Bf62Te9;AHP~w3)rQ6*guoJY{}EQ zC2#utkyLYEhsck9f2AKKCVE^pza85?O-@N&UoZUbeW~8s>YKefEW#_+<#RgU_xm?R z74P?}<-Yvnv}6l+&y+$%WzSTXSku=n6BZ*!Y?qds)6cm3zPSJSdG;H-3xoJ_g3Vlb zr^?SFa;=DU)2#a6CS)RzVB**KN>Bs$=uSSEHKclKFVPzWqo~+Y1QVY|UeHYUd>mqz zU%7sSB;V3dmE8Xwuo8=tA#?Bk@%!7aN;bIpnYbBVKi=9Rx~_y6d%8GM1VdB!6IPbq z<%Vqs!M>M7nCKThEzzz!9J9S3N@LO2?!J53;_}lh^<$2v5+2VktB*Lmbp29)L%67j zl|)vuXyyqveO`VZ*kLMs|B;}C*UEUGoYia=L_sPiw_+@2rfb>Dlq~X@lE0+SmOuRW zhEONx)dFlKrFTbd_UumaJ zDXq6pRkc1){!pI3eX-tIlMXE;oiIbLouK9Nh{HdaDDP_KgUqw&b=^Pqw z;1r4+ojwXg z|8RtBKlqGC%Jv0*!FHLokJy!4`?#t>DZQYId4Ain`{T^3eG58MQ#hxDY{M|s4_x2L z=ES>M#!MLZwtTNl*OvF3v?(#QkWL`PiHFJ(!Y7UdM9Hnq`)pR;?dM_I@*vcV{1O300^zDvMHPQ zH}VM3q@Dz+YA`Ds__upFqP^F)eplJWB9b$gS=rgSZPaG$2p_d#NPXt=$ds?hmRffY zZ-BL^7MD@kx`v`U1y3#YnJNrAIr&UQRmJX|k?Ctt0k%)~HU`_X`G4FO{2*GlmHLq+ zV6VmX)8-?!!z#gr;To62E5BB+=aycE6voxN#~%|PolVA&dGsvWo-HbW#L8Jd91-uk zNfv$@w?47^`(ND53S1c)rNnj;9`e4BG5*Befiq3}rub^~$?W6j@ZVevs@0qveP}Qb zRZ@(v1Sgx65m{nWrB`w|+mdXB&E@>%RFL9}teG$NiHo$R!!=_m9@T%$sAlM7f>fL~ zm^QAppF$8A#S*e7w+%RO*a<{*h(mL3<%yt2@EtIp)wy!w@7Vm7nWSwdz1t` z8b*N}73j#8SCvN+VeJK?`Rreum|1oqx%`p@ng#dFae)-44YuYkrQsE9gb94#xUD z&>s90JY4zW;K%>95w&bE;tnJ*^JtsN)fO01A(W?sQ|gFNhjXi_tKpLC=)65wWo)T# zlsMftGY|OqLP-I`^uzcEBJ>@zhilp9^2)D~IuzTAK`{@!FM@49XkyqONhm(~c9!NR zIQsBcRM<{WOyy@KuRuySa9qbTd%_X|+lgDLaM5Vt85ZokeS3TzrbJ-h zJ}Ng?0mr6X+wKp@nbR1hXLwM~-FFuP=Aq)&Ntr5Hl3>tW)p*U(U9&`F8!S44mE9}X zA0fQ?>)NeR>?wRmnWqfZpkqs{sRSB<8vrr`TqD|+HYYZyei=^wsfFmC0016I$ejQ( zd~x+e^W0dcfkgH{i_KqXqfG^4<>(CiLl>@`kcRS)gN;AI(7SO}dfHfQee}Z#?gBl! zC3qOBUEWyT8M!0UJ01>hH3S^fIZ2;(L++7BZ!pKiCz+@EPGACLN7%r?(f4=+C(Y*Y zoa08x+g32A^{lCj4dl&`H(rZtVkRc)^j4+P_e6eIAaZC~@r>6r8{U5vse+lLs{;#K z{j*B+cF~FT?YuL6k6LO@41?=4LmeHFLC2JhUlnVV%D%bl-}2Z+j}BnYCFkQfBY%&j z9}F}tZvPZ`SjdCV&VDdDAU`#61x1`+ggrR#`#+k_GOEh1?b-@RBdMg)$OfdlyE`SM zyA+Tv=?>}c?(PQZM!HKxK)UN&`+nZkp$?Ql*@p*pIp)=>uV0YyPIky7P%2kjl7tCuCFStEB97SyiVAX;nR4zkWiv> z8wyJd|D@14Aw)^=W(%0qteTe37?_m%VE{{BQfdPY4!RQL8RI)*FR5dw9h&Mtw%M3B z5V$ikge~Q2CAC)7J5zG&xISijuLd{SSrf&W``(W(&pf%`g!Xy5nI{y--Da7)=b86(=-$WfFIcrd+BP4t|LfS(eGQD4EVZ?4i@+2o zQJFb?luz+v3;1hSzRk$>*@ZI&B57P=1Y)*OBf@CXh)Ad@2qQwBQ^*jKuE=DcI1&GQX>yJ@SN^nmOBT;#ei$jFx+5b{0L5{%YmV7a15cs%)lbV z>gu0q&MM7BY1~#ouf&Lh_wEw{BdY9a-JHjx55fq08VYgS=3Cpeb=eOS2uJY3kY-cc z4AXpBlf4~Q@9Xko3N_0=HcVZrF=aB^|7juS$-&-YXHg7}y;KK&x`fsvMl4~lX)TIwZwnD;`d~>B`aRSoIZdBjsVeJfzUH)k3w_!CtkkJnp z!bQf1KlqeNf(Qy9dE+#WP>dY9pwm3{46`yP)>s?bMjI-*xfUzxa)3l2iIz0`#v{Gt z(uuJ4o8OWLtrzrM47YEAL3@k%nQ7f~WBG8Y+3)%C_>n=!dG*p`uN&d^ zilg&q=Y8XIVAB+U27TGBXgw|-iX_lrLygAelERy`W`}ypBZhywW$cwzlmX|Bm=Yrg zheYSPiA{O$=qRcb7A$-|D+&qiwMIm5j}67onG4d6O;3|WP#756=g`H=F(!(B(;@ZUUeP1zxOKJ7r`i5( zD~u@5Kv!epg^f_LI1w^a=z4W4g2;48^M!H8m5IXcY9Nzg%eF3mjCw25hKJ$L>t(yq zbRH+YUKEwyNqi+5}_UKFkPlWqCzx ziKn|y3zqw#pIvCD=^P3Y*Xo$T4)&~#TCU_p!cT%0W%=s4eWoePY75g8VF*wk6NyLa zU?9rwml;eJ8DdyiRT?4rD&@eoX#}%v5tOSqet z*e>?0-(^0-d;jC}j%=25c(G!C@bRJN`NS@gh<_9o-6N>d^YOrAOYd2aA_6oWb_mX^ z?&$NxoLv_eqp!r0=8I0^NH3j8e3Y1*4MLv-1f20&Z_~_ zp@8s1q=rM(bSe&At!)e3ymWAIfKuE5kIh6eM=O~@5~3v5jV<8et6uu^?_U}KC;-uy ze869mShUqd1}70iA!^_vKM{rk%--AXQ4jjoha34lFQkYPle_<$Cv87e^@$@?RoChx zRM*Ok$Tnz$djJTE!0Jgi1x!V1>sr(aJmu?BS!3Zyt?_-B7^f^jdr?zoiWIA4@Ak{c zaO0Y(%>@i1Gl2J_0YOxpl1WVY^o3AXx?2`qya*uW~too zJM!}GQX+n@l?eX}_hVQ-kq)83&#o7@5bMm;5;pN$9nGN*yld8?V!pexjFFMTdIjri z)b$u#^T-^n{=~gS4nu-kL{^x1Wx=5hEIJa1s!Ca?bo7;xM?;%VNc7vP+0eHe=E1rD zM{m&W)}FvbW9O~h@4da71Mj2Cv$g9dF7Oj2twjGu9ACyz&ab^_D_^%G9v&v1UqK-a z9ZwPW&CgHwx1C<++I1hOT+g-Fhl9MX_L9<42;S@YQzKo1J4Jy}{#|MT1njauAi{tZ z7x>zkmxC4g4v<>w)=_WuCbVBiCVJ-p*_?lGZOZYF~p7`M@OU2paF1=VCzpQ*;@T?UB=`OCCr_AjQk zrgvBq>d;<^?S(qe=Neu!FVjGZ$l&ehA*V392~FM4M&-*!7A6stb9B`kk=nZ2BJtug zrtf~((cjd>QiLX1H=47@gzoujIIBwf4QnlY=)f})OeOs(GJBl!cS5N@OU>!!h*PAd zr@J>ggi`3MmtMqQEl*V@B{izZBa}?0V`Bv@&y8oI)wB0}~abIY-odysUggi{`6 zDfT^1BrJgRTqU1rbHihH3Xu=3}ozGrR8|Y8b0ktR(OV1YqQ?`wOig7WBneZ03`SOaJC<}PI;ai1pf=Fj( zX4*C*z6b(;4t`uQYwDOii@Bj8a1~8z{h*N2yjniE;UNIu0INz%!ttv6hZYZoTiPDToGN9Bg!rUdBQ^TRc1 ziI$0T#Pil-zyZkz;rVp(#NgfU9Nqa|Dv2=YM6^x*g(WAjOJVI zFSR>cvCgW5hb6{jp%ne*m2$@Nr@H?xR76rJIZyBTug1+ZZpZf*z$V|>1>_1%x5nNfc607z|XuFeQ$TNvN4Xn)Sdl!VJDF zfHI&DsCuvpjA~g9W1^*=QWOKF1la#`%~p8fNZUDCy!sxZj$(vrhf{6gl)@4=Vw5Yw z0H=&tK(!>R9$t{kNJRJ0os!6%o)IN}&QvqYiY5>ZkH`v7`bs!ddB|YMN2ymKV$PQY zkCJDu(J^kN2#YlLcgfW)+P_80To=j!20r`5ZJKA z#YJX0F~p&Zi#o!v>{&}}F(&NT|9B%%@{A;8vBm`D{_5Ds-f()1^l$|tZwOZZ5#q4; z@Hkr44)gME?eD?TUlN~@iwg;c>caKNEkC#VQ{d+R57eGv-{hK0;miA)i(06kFmG`;Tjw^76up_8`Li*wTNvCiFMP~*&JAb3iBn=`O%9TYDY)WF@ zP-3zKD&i&DD_^2ARTPLH7>KB8(_@1{^rgSZWs6r2gFp39gc87Ac&jesb9K@}D12nJ zPebu5<%<)_P=EfF4w<~Hu!Qd2^5W9CJX1bo-jH@)jChB1-U&Q$+Y$XR#aF^3`>u*h zZGx z5<#0Y^6*m?M$#-RK3aqxZq}4yPU*!A%WCP%v?W)7-qRC3aMXqCE

Cvy2n0R93K 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

sN1`jWG{eL5>03+W! zpc4faFs#RwrMAdf%;p}ZadGENXSm1-1uO9!k!uqLQD$BrWx$&^c7&8gP{_fQZK2xC zgLTiyIq3198KoFi@MJI}bu0VRK9Oql!WAbi0Qzj|z71UG=^j%aKdam8+watMsWfdQ zMizc(6e2g;Hecc=9ON zyT$2Fx-xmFMudgS4`p{MX(x$3>L9;5=EzD<(-Eoqe^T-`hSJtwGMG8uym{hpqM7WN zXP!m)9PDlN3Eb#)W>S6J9m(EqRl&(RtH5NlSOZwHG(f-mzU^O};;W1_lS(4{@e~tG z(KR(SpmsP9+;()*s-_scuO;yPe5FwT0mH?4T7mCk zEz@K5I!V-lUZ-naE$#PW$G`Xp<0=el0!`GL+zdLs7F(VmToOtOL<>wg?7ss;Sg%-W z2xa2WbN!eHxv~)BynkVNj@K^+YM^}Z@@z5i#niWzkIpD-E;Top^_*qMwoZ`jOvO}! zc81yd`(J<6u*LYk5dV)$9*;JrU?{jwIw=SVIWse;UYc}rh!(!Tn1^y(viO<+p92*1StuOg((x=Nw}k_>e)+%9<`(+?jUNwQc}m>xq>@Fmtf zkr_JjYLyg$$A)M27qz`?WBP=|A>07k!vbC+*Bl*f8SO0E@uk5Zr(YL z#h&xjG`^(F+LYWAM~J;$rwM{1BydXb14js}95sk)tjm2o_V}xzOeq}Zd*8L%ojlB{ z*`H=3=c&y8cCdLqb=Jj7gcFG*H~F?&qgYZef9elI4jfGIDjN5PxL~s*&VFVsnP<@` zNw7nG{8&fc;Zur3MlO@aWR-dahBR?E&Ywrxze}yeVmHS(G%*(1(qLO{;FaP)P!fhb z)=bYF1$D>{iAL~Ti>;s7v}luTQzi1wzPeMIpX=nQkunX#UR!TH?*0CJz~=aHO3l*# zm$?`4Y1JW;$v_0N=IcdrK9(s`qclvk&ms>Hw>V!BkS#OQWZToNh=S+`7vKE7o6O|@ zxGBqGEQ;MF5Hiru{-sOu?@~Sfw*#WDOcCVJPJvHZ`wbb!*fNV83_}o|yqrt+ET)N_ zY{lHJBvg#ZIBDR5MLVh~&4OStbkSXK?g*7YbKV#Ee?)x+P?cR5E-8mTba!_N(%m2p z(h`b*q)2ynhe&q{NOzY?NgP0sMp9b3?&kaNoy$1RFd!a1>)rcVYdzsbm4a)p!)9-k zL?hDTWSN1Es{H$Qg1#hx_-uat_ICpVizBvvy*7;yaV!lrx0q1mV)xBkQK#D~kMqVk z^R)uG3zzB9)^{?tiY$q5Nq+qKVD1kO8g8-w-*5-8>FMC~5X&q$n4iw$9Et5hX_c3iujY(+)hiwWWpki4J&k}1gI>$U$$&RehLBgi*@X*$`7-EjW_%*fk zLCd=G={Zf6$T)Dd^br%unP# z1$wz)XGGM>rw@H?Jib#}Mpska#Ah5VJvhht=P8XBGa-6IeKnxjvG>BSpK!AH1IdV9 z)lhQ0#Iu}|G8jsOtwJJd*zdd$>bXeiu;Zj5%b*JUT;t|K4Fn1UyM=%m1CrO6`Ao(Y zv7#Hy^5ZU>o;)|Y%J5UL90al9^kuHXag0x%4@}DUQc@8gS?TS=(5j3JbWDh*%XyIE zHo3cRq0(|oltTY7x*pGKR_mg13(!>NXdx{r~69}m5-I723y z-^YSLJa*TR=>$VeLwTu}KOxqy%dTF5AmB-NrF=3_s=BHGcjXg#(EP$S*=FmeFJd-{O@bmPAk9Ko*^^qR#r#sYlkLw z5tvF?s&NFXTR@dTu#C>+OOg<%ViFQ~k7A!4C^y?E1+abeirH!)9Jg`94()grG0 z<6?0ovMLNJJ@m7Y<6}Nt7!BRK!zzjM4Q4uI(7Tu z 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 z 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 new Date().getTime() }; global.$ = require('jquery')(global.window); + diff --git a/superset/assets/spec/javascripts/chart/Chart_spec.jsx b/superset/assets/spec/javascripts/chart/Chart_spec.jsx index 30f24feb6574e..d1e3f373c7af3 100644 --- a/superset/assets/spec/javascripts/chart/Chart_spec.jsx +++ b/superset/assets/spec/javascripts/chart/Chart_spec.jsx @@ -66,12 +66,10 @@ describe('Chart', () => { }); it('should call after resize', () => { - const prevProp = wrapper.props(); wrapper.setProps({ chartStatus: 'rendered', height: 100, }); - wrapper.instance().componentDidUpdate(prevProp); expect(stub.callCount).to.equals(1); }); }); diff --git a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx index bde4610258b41..98d8b517c0ed9 100644 --- a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx +++ b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx @@ -63,7 +63,6 @@ describe('AsyncSelect', () => { , ); const spy = sinon.spy(wrapper.instance(), 'onChange'); - wrapper.instance().fetchOptions(); server.respond(); expect(spy.callCount).to.equal(1); diff --git a/superset/assets/spec/javascripts/dashboard/components/Dashboard_spec.jsx b/superset/assets/spec/javascripts/dashboard/components/Dashboard_spec.jsx index aa82f01705e91..aa6446315bd8a 100644 --- a/superset/assets/spec/javascripts/dashboard/components/Dashboard_spec.jsx +++ b/superset/assets/spec/javascripts/dashboard/components/Dashboard_spec.jsx @@ -152,7 +152,6 @@ describe('Dashboard', () => { it('should call refresh if a filter is added', () => { const wrapper = setup({ dashboardState: overrideDashboardState }); const refreshExceptSpy = sinon.spy(wrapper.instance(), 'refreshExcept'); - const prevProps = wrapper.instance().props; wrapper.setProps({ dashboardState: { ...overrideDashboardState, @@ -162,7 +161,6 @@ describe('Dashboard', () => { }, }, }); - wrapper.instance().componentDidUpdate(prevProps); refreshExceptSpy.restore(); expect(refreshExceptSpy.callCount).to.equal(1); }); @@ -170,14 +168,12 @@ describe('Dashboard', () => { it('should call refresh if a filter is removed', () => { const wrapper = setup({ dashboardState: overrideDashboardState }); const refreshExceptSpy = sinon.spy(wrapper.instance(), 'refreshExcept'); - const prevProps = wrapper.instance().props; wrapper.setProps({ dashboardState: { ...overrideDashboardState, filters: {}, }, }); - wrapper.instance().componentDidUpdate(prevProps); refreshExceptSpy.restore(); expect(refreshExceptSpy.callCount).to.equal(1); }); @@ -185,7 +181,6 @@ describe('Dashboard', () => { it('should call refresh if a filter is changed', () => { const wrapper = setup({ dashboardState: overrideDashboardState }); const refreshExceptSpy = sinon.spy(wrapper.instance(), 'refreshExcept'); - const prevProps = wrapper.instance().props; wrapper.setProps({ dashboardState: { ...overrideDashboardState, @@ -195,7 +190,6 @@ describe('Dashboard', () => { }, }, }); - wrapper.instance().componentDidUpdate(prevProps); refreshExceptSpy.restore(); expect(refreshExceptSpy.callCount).to.equal(1); }); @@ -203,7 +197,6 @@ describe('Dashboard', () => { it('should not call refresh if filters change and refresh is false', () => { const wrapper = setup({ dashboardState: overrideDashboardState }); const refreshExceptSpy = sinon.spy(wrapper.instance(), 'refreshExcept'); - const prevProps = wrapper.instance().props; wrapper.setProps({ dashboardState: { ...overrideDashboardState, @@ -214,7 +207,6 @@ describe('Dashboard', () => { refresh: false, }, }); - wrapper.instance().componentDidUpdate(prevProps); refreshExceptSpy.restore(); expect(refreshExceptSpy.callCount).to.equal(0); }); diff --git a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Markdown_spec.jsx b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Markdown_spec.jsx index ca71045de7f42..9046089ee3c0f 100644 --- a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Markdown_spec.jsx +++ b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Markdown_spec.jsx @@ -113,9 +113,10 @@ describe('Markdown', () => { // the mode dropdown onchange instead const dropdown = wrapper.find(MarkdownModeDropdown); dropdown.prop('onChange')('preview'); + wrapper.update(); - expect(wrapper.find(AceEditor)).to.have.length(0); expect(wrapper.find(ReactMarkdown)).to.have.length(1); + expect(wrapper.find(AceEditor)).to.have.length(0); }); it('should call updateComponents when editMode changes from edit => preview, and there are markdownSource changes', () => { diff --git a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Tab_spec.jsx b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Tab_spec.jsx index a984565b4c4fb..fae59b2590e36 100644 --- a/superset/assets/spec/javascripts/dashboard/components/gridComponents/Tab_spec.jsx +++ b/superset/assets/spec/javascripts/dashboard/components/gridComponents/Tab_spec.jsx @@ -6,7 +6,7 @@ import { expect } from 'chai'; import sinon from 'sinon'; import DashboardComponent from '../../../../../src/dashboard/containers/DashboardComponent'; -import DeleteComponentButton from '../../../../../src/dashboard/components/DeleteComponentButton'; +import DeleteComponentModal from '../../../../../src/dashboard/components/DeleteComponentModal'; import DragDroppable from '../../../../../src/dashboard/components/dnd/DragDroppable'; import EditableTitle from '../../../../../src/components/EditableTitle'; import WithPopoverMenu from '../../../../../src/dashboard/components/menu/WithPopoverMenu'; @@ -86,14 +86,14 @@ describe('Tabs', () => { expect(wrapper.find(WithPopoverMenu)).to.have.length(1); }); - it('should render a DeleteComponentButton when focused if its not the only tab', () => { + it('should render a DeleteComponentModal when focused if its not the only tab', () => { let wrapper = setup(); wrapper.find(WithPopoverMenu).simulate('click'); // focus - expect(wrapper.find(DeleteComponentButton)).to.have.length(0); + expect(wrapper.find(DeleteComponentModal)).to.have.length(0); wrapper = setup({ editMode: true }); wrapper.find(WithPopoverMenu).simulate('click'); - expect(wrapper.find(DeleteComponentButton)).to.have.length(1); + expect(wrapper.find(DeleteComponentModal)).to.have.length(1); wrapper = setup({ editMode: true, @@ -103,16 +103,18 @@ describe('Tabs', () => { }, }); wrapper.find(WithPopoverMenu).simulate('click'); - expect(wrapper.find(DeleteComponentButton)).to.have.length(0); + expect(wrapper.find(DeleteComponentModal)).to.have.length(0); }); - it('should call deleteComponent when deleted', () => { + it('should show modal when clicked delete icon', () => { const deleteComponent = sinon.spy(); const wrapper = setup({ editMode: true, deleteComponent }); wrapper.find(WithPopoverMenu).simulate('click'); // focus - wrapper.find(DeleteComponentButton).simulate('click'); + wrapper.find('.icon-button').simulate('click'); - expect(deleteComponent.callCount).to.equal(1); + const modal = document.getElementsByClassName('modal'); + expect(modal).to.have.length(1); + expect(deleteComponent.callCount).to.equal(0); }); }); diff --git a/superset/assets/spec/javascripts/datasource/DatasourceEditor_spec.jsx b/superset/assets/spec/javascripts/datasource/DatasourceEditor_spec.jsx index 137ac3956ffb6..e167045362360 100644 --- a/superset/assets/spec/javascripts/datasource/DatasourceEditor_spec.jsx +++ b/superset/assets/spec/javascripts/datasource/DatasourceEditor_spec.jsx @@ -8,6 +8,7 @@ import $ from 'jquery'; import sinon from 'sinon'; import DatasourceEditor from '../../../src/datasource/DatasourceEditor'; +import Field from '../../../src/CRUD/Field'; import mockDatasource from '../../fixtures/mockDatasource'; const props = { diff --git a/superset/assets/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx b/superset/assets/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx index 3b062ed272855..b6395813b9258 100644 --- a/superset/assets/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx @@ -106,7 +106,7 @@ describe('AdhocFilterEditPopover', () => { expect(wrapper.find('i.glyphicon-resize-full')).to.have.lengthOf(1); expect(wrapper.instance().onDragDown.calledOnce).to.be.false; - wrapper.find('i.glyphicon-resize-full').simulate('mouseDown'); + wrapper.find('i.glyphicon-resize-full').simulate('mouseDown', {}); expect(wrapper.instance().onDragDown.calledOnce).to.be.true; }); }); diff --git a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx index 4acb24e279dd3..015999a4d7f10 100644 --- a/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx @@ -36,7 +36,7 @@ describe('AdhocMetricEditPopoverTitle', () => { it('renders an OverlayTrigger wrapper with the title', () => { const { wrapper } = setup(); expect(wrapper.find(OverlayTrigger)).to.have.lengthOf(1); - expect(wrapper.find(OverlayTrigger).dive().text()).to.equal('My Metric\xa0'); + expect(wrapper.find(OverlayTrigger).find('span').text()).to.equal('My Metric\xa0'); }); it('transfers to edit mode when clicked', () => { diff --git a/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx b/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx index 0892d05abbb23..9c380c4202909 100644 --- a/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/DateFilterControl_spec.jsx @@ -4,7 +4,7 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { describe, it, beforeEach } from 'mocha'; import { shallow } from 'enzyme'; -import { Button } from 'react-bootstrap'; +import { Button, Label } from 'react-bootstrap'; import DateFilterControl from '../../../../src/explore/components/controls/DateFilterControl'; import ControlHeader from '../../../../src/explore/components/ControlHeader'; @@ -29,36 +29,28 @@ describe('DateFilterControl', () => { expect(controlHeader).to.have.lengthOf(1); }); it('renders 3 Buttons', () => { - const label = wrapper.find('.label').first(); + const label = wrapper.find(Label).first(); label.simulate('click'); setTimeout(() => { expect(wrapper.find(Button)).to.have.length(3); }, 10); }); it('loads the right state', () => { - const label = wrapper.find('.label').first(); + const label = wrapper.find(Label).first(); label.simulate('click'); setTimeout(() => { expect(wrapper.state().num).to.equal('90'); }, 10); }); - it('sets now and closes', () => { - const label = wrapper.find('.now').first(); - label.simulate('click'); - setTimeout(() => { - expect(wrapper.state().free).to.equal('now'); - expect(wrapper.find('.popover')).to.have.length(0); - }, 10); - }); it('renders 2 dimmed sections', () => { - const label = wrapper.find('.label').first(); + const label = wrapper.find(Label).first(); label.simulate('click'); setTimeout(() => { expect(wrapper.find(Button)).to.have.length(3); }, 10); }); it('opens and closes', () => { - const label = wrapper.find('.label').first(); + const label = wrapper.find(Label).first(); label.simulate('click'); setTimeout(() => { expect(wrapper.find('.popover')).to.have.length(1); diff --git a/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx b/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx index 49c41d37037aa..ab43ddf8643c7 100644 --- a/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx +++ b/superset/assets/spec/javascripts/explore/components/DisplayQueryButton_spec.jsx @@ -2,7 +2,6 @@ import React from 'react'; import { expect } from 'chai'; import { describe, it } from 'mocha'; import { mount } from 'enzyme'; -import { Modal } from 'react-bootstrap'; import ModalTrigger from './../../../../src/components/ModalTrigger'; import DisplayQueryButton from '../../../../src/explore/components/DisplayQueryButton'; @@ -27,6 +26,5 @@ describe('DisplayQueryButton', () => { it('renders a dropdown', () => { const wrapper = mount(); expect(wrapper.find(ModalTrigger)).to.have.lengthOf(2); - expect(wrapper.find(Modal)).to.have.lengthOf(2); }); }); diff --git a/superset/assets/spec/javascripts/modules/time_spec.js b/superset/assets/spec/javascripts/modules/time_spec.js index 59dab8effe031..36260a461f4e1 100644 --- a/superset/assets/spec/javascripts/modules/time_spec.js +++ b/superset/assets/spec/javascripts/modules/time_spec.js @@ -1,6 +1,32 @@ import { it, describe } from 'mocha'; import { expect } from 'chai'; -import { getPlaySliderParams } from '../../../src/modules/time'; + +import moment from 'moment'; +import { getPlaySliderParams, truncate } from '../../../src/modules/time'; + +describe('truncate', () => { + it('truncates timestamps', () => { + const timestamp = moment('2018-03-03T03:03:03.333'); + const isoDurations = [ + // basic units + [moment.duration('PT1S'), moment('2018-03-03T03:03:03')], + [moment.duration('PT1M'), moment('2018-03-03T03:03:00')], + [moment.duration('PT1H'), moment('2018-03-03T03:00:00')], + [moment.duration('P1D'), moment('2018-03-03T00:00:00')], + [moment.duration('P1M'), moment('2018-03-01T00:00:00')], + [moment.duration('P1Y'), moment('2018-01-01T00:00:00')], + + // durations that are multiples + [moment.duration('PT2H'), moment('2018-03-03T02:00:00')], + [moment.duration('P2D'), moment('2018-03-03T00:00:00')], + ]; + let result; + isoDurations.forEach(([step, expected]) => { + result = truncate(timestamp, step); + expect(result.format()).to.equal(expected.format()); + }); + }); +}); describe('getPlaySliderParams', () => { it('is a function', () => { @@ -9,49 +35,49 @@ describe('getPlaySliderParams', () => { it('handles durations', () => { const timestamps = [ - new Date('2018-01-01'), - new Date('2018-01-02'), - new Date('2018-01-03'), - new Date('2018-01-04'), - new Date('2018-01-05'), - new Date('2018-01-06'), - new Date('2018-01-07'), - new Date('2018-01-08'), - new Date('2018-01-09'), - new Date('2018-01-10'), - ].map(d => d.getTime()); - const { start, end, step, values, disabled } = getPlaySliderParams(timestamps, 'P2D'); - expect(new Date(start)).to.eql(new Date('2018-01-01')); - expect(new Date(end)).to.eql(new Date('2018-01-11')); - expect(step).to.equal(2 * 24 * 60 * 60 * 1000); - expect(values.map(v => new Date(v))).to.eql([ - new Date('2018-01-01'), - new Date('2018-01-03'), + moment('2018-01-01T00:00:00'), + moment('2018-01-02T00:00:00'), + moment('2018-01-03T00:00:00'), + moment('2018-01-04T00:00:00'), + moment('2018-01-05T00:00:00'), + moment('2018-01-06T00:00:00'), + moment('2018-01-07T00:00:00'), + moment('2018-01-08T00:00:00'), + moment('2018-01-09T00:00:00'), + moment('2018-01-10T00:00:00'), + ].map(d => parseInt(d.format('x'), 10)); + const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, 'P2D'); + expect(moment(start).format()).to.equal(moment('2018-01-01T00:00:00').format()); + expect(moment(end).format()).to.equal(moment('2018-01-11T00:00:00').format()); + expect(getStep(start)).to.equal(2 * 24 * 60 * 60 * 1000); + expect(values.map(v => moment(v).format())).to.eql([ + moment('2018-01-01T00:00:00').format(), + moment('2018-01-03T00:00:00').format(), ]); expect(disabled).to.equal(false); }); it('handles intervals', () => { const timestamps = [ - new Date('2018-01-01'), - new Date('2018-01-02'), - new Date('2018-01-03'), - new Date('2018-01-04'), - new Date('2018-01-05'), - new Date('2018-01-06'), - new Date('2018-01-07'), - new Date('2018-01-08'), - new Date('2018-01-09'), - new Date('2018-01-10'), - ].map(d => d.getTime()); + moment('2018-01-01T00:00:00'), + moment('2018-01-02T00:00:00'), + moment('2018-01-03T00:00:00'), + moment('2018-01-04T00:00:00'), + moment('2018-01-05T00:00:00'), + moment('2018-01-06T00:00:00'), + moment('2018-01-07T00:00:00'), + moment('2018-01-08T00:00:00'), + moment('2018-01-09T00:00:00'), + moment('2018-01-10T00:00:00'), + ].map(d => parseInt(d.format('x'), 10)); // 1970-01-03 was a Saturday - const { start, end, step, values, disabled } = getPlaySliderParams(timestamps, 'P1W/1970-01-03T00:00:00Z'); - expect(new Date(start)).to.eql(new Date('2017-12-30')); // Saturday - expect(new Date(end)).to.eql(new Date('2018-01-13')); // Saturday - expect(step).to.equal(7 * 24 * 60 * 60 * 1000); - expect(values.map(v => new Date(v))).to.eql([ - new Date('2017-12-30'), - new Date('2018-01-06'), + const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, 'P1W/1970-01-03T00:00:00Z'); + expect(moment(start).format()).to.equal(moment('2017-12-30T00:00:00Z').format()); // Saturday + expect(moment(end).format()).to.equal(moment('2018-01-13T00:00:00Z').format()); // Saturday + expect(getStep(start)).to.equal(7 * 24 * 60 * 60 * 1000); + expect(values.map(v => moment(v).format())).to.eql([ + moment('2017-12-30T00:00:00Z').format(), + moment('2018-01-06T00:00:00Z').format(), ]); expect(disabled).to.equal(false); }); diff --git a/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx b/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx index cff450137d831..0ebcaf3e6a1b3 100644 --- a/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx +++ b/superset/assets/spec/javascripts/sqllab/QuerySearch_spec.jsx @@ -9,6 +9,7 @@ import sinon from 'sinon'; import QuerySearch from '../../../src/SqlLab/components/QuerySearch'; describe('QuerySearch', () => { + const search = sinon.spy(QuerySearch.prototype, 'refreshQueries'); const mockedProps = { actions: {}, height: 0, @@ -54,15 +55,21 @@ describe('QuerySearch', () => { expect(wrapper.state().searchText).to.equal('text'); }); + it('refreshes queries when enter (only) is pressed on the input', () => { + const callCount = search.callCount; + wrapper.find('input').simulate('keyDown', { keyCode: 'a'.charCodeAt(0) }); + expect(search.callCount).to.equal(callCount); + wrapper.find('input').simulate('keyDown', { keyCode: '\r'.charCodeAt(0) }); + expect(search.callCount).to.equal(callCount + 1); + }); + it('should have one Button', () => { expect(wrapper.find(Button)).to.have.length(1); }); it('refreshes queries when clicked', () => { - const search = sinon.spy(QuerySearch.prototype, 'refreshQueries'); - wrapper = shallow(); + const callCount = search.callCount; wrapper.find(Button).simulate('click'); - /* eslint-disable no-unused-expressions */ - expect(search.called).to.equal(true); + expect(search.callCount).to.equal(callCount + 1); }); }); diff --git a/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx b/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx index bc4957e13fcb1..86ad64a79c572 100644 --- a/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx +++ b/superset/assets/spec/javascripts/sqllab/SqlEditorLeftBar_spec.jsx @@ -43,14 +43,10 @@ describe('SqlEditorLeftBar', () => { expect(wrapper.find(TableElement)).to.have.length(1); }); describe('onDatabaseChange', () => { - it('should fetch tables', () => { - sinon.stub(wrapper.instance(), 'fetchTables'); + it('should fetch schemas', () => { sinon.stub(wrapper.instance(), 'fetchSchemas'); wrapper.instance().onDatabaseChange({ value: 1, label: 'main' }); - - expect(wrapper.instance().fetchTables.getCall(0).args[0]).to.equal(1); expect(wrapper.instance().fetchSchemas.getCall(0).args[0]).to.equal(1); - wrapper.instance().fetchTables.restore(); wrapper.instance().fetchSchemas.restore(); }); it('should clear tableOptions', () => { @@ -105,9 +101,9 @@ describe('SqlEditorLeftBar', () => { d.resolve(tables); return d.promise(); }); - wrapper.instance().fetchTables(1, 'main', 'birth_names'); + wrapper.instance().fetchTables(1, 'main', 'true', 'birth_names'); - expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/tables/1/main/birth_names/'); + expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/tables/1/main/birth_names/true/'); expect(wrapper.state().tableLength).to.equal(3); }); it('should handle error', () => { @@ -132,7 +128,7 @@ describe('SqlEditorLeftBar', () => { return d.promise(); }); wrapper.instance().fetchSchemas(1); - expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/schemas/1/'); + expect(ajaxStub.getCall(0).args[0]).to.equal('/superset/schemas/1/false/'); expect(wrapper.state().schemaOptions).to.have.length(3); }); it('should handle error', () => { diff --git a/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx b/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx index ff3087158599f..9909bd6af0a63 100644 --- a/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx +++ b/superset/assets/spec/javascripts/sqllab/TableElement_spec.jsx @@ -36,7 +36,7 @@ describe('TableElement', () => { mount(); }); it('sorts columns', () => { - const wrapper = mount(); + const wrapper = shallow(); expect(wrapper.state().sortColumns).to.equal(false); expect(wrapper.find(ColumnElement).first().props().column.name).to.equal('id'); wrapper.find('.sort-cols').simulate('click'); @@ -50,7 +50,7 @@ describe('TableElement', () => { expect(mockedActions.collapseTable.called).to.equal(true); }); it('removes the table', () => { - const wrapper = mount(); + const wrapper = shallow(); expect(wrapper.state().expanded).to.equal(true); wrapper.find('.table-remove').simulate('click'); expect(wrapper.state().expanded).to.equal(false); diff --git a/superset/assets/spec/javascripts/sqllab/actions_spec.js b/superset/assets/spec/javascripts/sqllab/actions_spec.js index 5909ca8241c25..c3d4aa275792a 100644 --- a/superset/assets/spec/javascripts/sqllab/actions_spec.js +++ b/superset/assets/spec/javascripts/sqllab/actions_spec.js @@ -56,7 +56,7 @@ describe('async actions', () => { }); it('calls querySuccess on ajax success', () => { - ajaxStub.yieldsTo('success', { data: '' }); + ajaxStub.yieldsTo('success', '{ "data": "" }'); makeRequest(); expect(dispatch.callCount).to.equal(2); expect(dispatch.getCall(1).args[0].type).to.equal(actions.QUERY_SUCCESS); @@ -86,13 +86,6 @@ describe('async actions', () => { expect(dispatch.args[0][0].type).to.equal(actions.START_QUERY); }); - it('calls querySuccess on ajax success', () => { - ajaxStub.yieldsTo('success', { data: '' }); - makeRequest(); - expect(dispatch.callCount).to.equal(2); - expect(dispatch.getCall(1).args[0].type).to.equal(actions.QUERY_SUCCESS); - }); - it('calls queryFailed on ajax error', () => { ajaxStub.yieldsTo('error', { responseJSON: { error: 'error text' } }); makeRequest(); diff --git a/superset/assets/spec/javascripts/visualizations/table_spec.jsx b/superset/assets/spec/javascripts/visualizations/table_spec.jsx new file mode 100644 index 0000000000000..db3e8938e33fd --- /dev/null +++ b/superset/assets/spec/javascripts/visualizations/table_spec.jsx @@ -0,0 +1,105 @@ +import { describe, it } from 'mocha'; +import { expect } from 'chai'; +import $ from 'jquery'; + +import { d3format } from '../../../src/modules/utils'; + +import '../../helpers/shim'; +import tableVis from '../../../src/visualizations/table'; + +describe('table viz', () => { + const div = '

'; + const baseSlice = { + selector: '#slice-container', + formData: { + metrics: ['count'], + timeseries_limit_metric: null, + }, + datasource: { + verbose_map: {}, + }, + getFilters: () => {}, + d3format, + removeFilter: null, + addFilter: null, + height: () => 0, + }; + const basePayload = { + data: { + records: [ + { gender: 'boy', count: 39245 }, + { gender: 'girl', count: 36446 }, + ], + columns: ['gender', 'count'], + }, + }; + + it('renders into a container', () => { + $('body').html(div); + const container = $(baseSlice.selector); + expect(container.length).to.equal(1); + }); + + it('renders header and body datatables in container', () => { + $('body').html(div); + const container = $(baseSlice.selector); + + expect(container.find('.dataTable').length).to.equal(0); + tableVis(baseSlice, basePayload); + expect(container.find('.dataTable').length).to.equal(2); + + const tableHeader = container.find('.dataTable')[0]; + expect($(tableHeader).find('thead tr').length).to.equal(1); + expect($(tableHeader).find('th').length).to.equal(2); + + const tableBody = container.find('.dataTable')[1]; + expect($(tableBody).find('tbody tr').length).to.equal(2); + expect($(tableBody).find('th').length).to.equal(2); + }); + + it('hides the sort by column', () => { + $('body').html(div); + const slice = { ...baseSlice }; + slice.formData = { ...baseSlice.formData, + timeseries_limit_metric: { + label: 'SUM(sum_boys)', + }, + }; + const payload = { + data: { + records: [ + { gender: 'boy', count: 39245, 'SUM(sum_boys)': 48133355 }, + { gender: 'girl', count: 36446, 'SUM(sum_boys)': 0 }, + ], + columns: ['gender', 'count', 'SUM(sum_boys)'], + }, + }; + tableVis(slice, payload); + + const container = $(slice.selector); + const tableHeader = container.find('.dataTable')[0]; + expect($(tableHeader).find('th').length).to.equal(2); + }); + + it('works with empty list for sort by', () => { + $('body').html(div); + const slice = { ...baseSlice }; + slice.formData = { ...baseSlice.formData, + timeseries_limit_metric: [], + }; + const payload = { + data: { + records: [ + { gender: 'boy', count: 39245, 'SUM(sum_boys)': 48133355 }, + { gender: 'girl', count: 36446, 'SUM(sum_boys)': 0 }, + ], + columns: ['gender', 'count', 'SUM(sum_boys)'], + }, + }; + tableVis(slice, payload); + + const container = $(slice.selector); + const tableBody = container.find('.dataTable')[1]; + expect($(tableBody).find('th').length).to.equal(3); + }); +}); diff --git a/superset/assets/spec/javascripts/welcome/App_spec.jsx b/superset/assets/spec/javascripts/welcome/App_spec.jsx index 46c6fdb90600f..408458ac28000 100644 --- a/superset/assets/spec/javascripts/welcome/App_spec.jsx +++ b/superset/assets/spec/javascripts/welcome/App_spec.jsx @@ -13,10 +13,10 @@ describe('App', () => { React.isValidElement(), ).to.equal(true); }); - it('renders 4 Tab, Panel, and Row components', () => { + it('renders Tab, Panel, and Row components', () => { const wrapper = shallow(); - expect(wrapper.find(Tab)).to.have.length(3); - expect(wrapper.find(Panel)).to.have.length(3); - expect(wrapper.find(Row)).to.have.length(3); + expect(wrapper.find(Tab)).to.have.length(4); + expect(wrapper.find(Panel)).to.have.length(4); + expect(wrapper.find(Row)).to.have.length(5); }); }); diff --git a/superset/assets/src/CRUD/utils.js b/superset/assets/src/CRUD/utils.js index 6de8c4b1653b7..3bf24e539427a 100644 --- a/superset/assets/src/CRUD/utils.js +++ b/superset/assets/src/CRUD/utils.js @@ -7,7 +7,7 @@ export function recurseReactClone(children, type, propExtender) { */ return React.Children.map(children, (child) => { let newChild = child; - if (child && child.type === type) { + if (child && child.type.name === type.name) { newChild = React.cloneElement(child, propExtender(child)); } if (newChild && newChild.props.children) { diff --git a/superset/assets/src/SqlLab/actions.js b/superset/assets/src/SqlLab/actions.js index dae8ebf7a5954..81bd91356db7f 100644 --- a/superset/assets/src/SqlLab/actions.js +++ b/superset/assets/src/SqlLab/actions.js @@ -2,6 +2,8 @@ /* eslint no-undef: 2 */ import $ from 'jquery'; import shortid from 'shortid'; +import JSONbig from 'json-bigint'; + import { now } from '../modules/dates'; import { t } from '../locales'; import { @@ -9,7 +11,7 @@ import { addDangerToast as addDangerToastAction, addInfoToast as addInfoToastAction, } from '../messageToasts/actions'; -import { COMMON_ERR_MESSAGES } from '../common'; +import { COMMON_ERR_MESSAGES } from '../utils/common'; export const RESET_STATE = 'RESET_STATE'; export const ADD_QUERY_EDITOR = 'ADD_QUERY_EDITOR'; @@ -125,10 +127,11 @@ export function fetchQueryResults(query) { const sqlJsonUrl = `/superset/results/${query.resultsKey}/`; $.ajax({ type: 'GET', - dataType: 'json', + dataType: 'text', url: sqlJsonUrl, success(results) { - dispatch(querySuccess(query, results)); + const parsedResults = JSONbig.parse(results); + dispatch(querySuccess(query, parsedResults)); }, error(err) { let msg = t('Failed at retrieving results from the results backend'); @@ -441,7 +444,6 @@ export function popDatasourceQuery(datasourceKey, sql) { }); }; } - export function createDatasourceStarted() { return { type: CREATE_DATASOURCE_STARTED }; } diff --git a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx index b6412389755db..369209972905a 100644 --- a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx +++ b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx @@ -59,7 +59,7 @@ class ExploreResultsButton extends React.PureComponent { title: t('Explore'), body: msg, actions: [ - Dialog.DefaultAction('Ok', () => {}, 'btn-danger'), + Dialog.DefaultAction('Ok', () => {}, 'btn-primary'), ], bsSize: 'large', bsStyle: 'warning', @@ -82,8 +82,11 @@ class ExploreResultsButton extends React.PureComponent { return moment.duration(this.props.query.endDttm - this.props.query.startDttm).asSeconds(); } getInvalidColumns() { - const re = /^[A-Za-z_]\w*$/; - return this.props.query.results.columns.map(col => col.name).filter(col => !re.test(col)); + const re1 = /^[A-Za-z_]\w*$/; // starts with char or _, then only alphanum + const re2 = /__\d+$/; // does not finish with __ and then a number which screams dup col name + + return this.props.query.results.columns.map(col => col.name) + .filter(col => !re1.test(col) || re2.test(col)); } datasourceName() { const { query } = this.props; @@ -156,7 +159,9 @@ class ExploreResultsButton extends React.PureComponent { SELECT count(*) AS my_alias ){' '} - {t('limited to alphanumeric characters and underscores')} + {t('limited to alphanumeric characters and underscores. Column aliases ending with ' + + 'double underscores followed by a numeric value are not allowed for reasons ' + + 'discussed in Github issue #5739.')} ); } render() { diff --git a/superset/assets/src/SqlLab/components/QuerySearch.jsx b/superset/assets/src/SqlLab/components/QuerySearch.jsx index d13d99376bcbb..9e0efeef39db3 100644 --- a/superset/assets/src/SqlLab/components/QuerySearch.jsx +++ b/superset/assets/src/SqlLab/components/QuerySearch.jsx @@ -42,6 +42,7 @@ class QuerySearch extends React.PureComponent { this.dbMutator = this.dbMutator.bind(this); this.onChange = this.onChange.bind(this); this.changeSearch = this.changeSearch.bind(this); + this.onKeyDown = this.onKeyDown.bind(this); this.changeFrom = this.changeFrom.bind(this); this.changeTo = this.changeTo.bind(this); this.changeStatus = this.changeStatus.bind(this); @@ -66,6 +67,11 @@ class QuerySearch extends React.PureComponent { const val = db ? db.value : null; this.setState({ databaseId: val }); } + onKeyDown(event) { + if (event.keyCode === 13) { + this.refreshQueries(); + } + } getTimeFromSelection(selection) { switch (selection) { case 'now': @@ -174,6 +180,7 @@ class QuerySearch extends React.PureComponent { diff --git a/superset/assets/src/SqlLab/components/SqlEditor.jsx b/superset/assets/src/SqlLab/components/SqlEditor.jsx index 4fd3fda580148..d3ed2bb6eb44e 100644 --- a/superset/assets/src/SqlLab/components/SqlEditor.jsx +++ b/superset/assets/src/SqlLab/components/SqlEditor.jsx @@ -89,7 +89,7 @@ class SqlEditor extends React.PureComponent { height, }); - if (this.refs.ace.clientHeight) { + if (this.refs.ace && this.refs.ace.clientHeight) { this.props.actions.persistEditorHeight(this.props.queryEditor, this.refs.ace.clientHeight); } } diff --git a/superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx b/superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx index d20d494bcfb2a..f7e58d32f82ad 100644 --- a/superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx +++ b/superset/assets/src/SqlLab/components/SqlEditorLeftBar.jsx @@ -8,6 +8,7 @@ import createFilterOptions from 'react-select-fast-filter-options'; import TableElement from './TableElement'; import AsyncSelect from '../../components/AsyncSelect'; +import RefreshLabel from '../../components/RefreshLabel'; import { t } from '../../locales'; const $ = require('jquery'); @@ -39,16 +40,13 @@ class SqlEditorLeftBar extends React.PureComponent { this.fetchSchemas(this.props.queryEditor.dbId); this.fetchTables(this.props.queryEditor.dbId, this.props.queryEditor.schema); } - onDatabaseChange(db) { + onDatabaseChange(db, force) { const val = db ? db.value : null; - this.setState({ schemaOptions: [] }); + this.setState({ schemaOptions: [], tableOptions: [] }); this.props.actions.queryEditorSetSchema(this.props.queryEditor, null); this.props.actions.queryEditorSetDb(this.props.queryEditor, val); - if (!(db)) { - this.setState({ tableOptions: [] }); - } else { - this.fetchTables(val, this.props.queryEditor.schema); - this.fetchSchemas(val); + if (db) { + this.fetchSchemas(val, force || false); } } getTableNamesBySubStr(input) { @@ -70,11 +68,12 @@ class SqlEditorLeftBar extends React.PureComponent { resetState() { this.props.actions.resetState(); } - fetchTables(dbId, schema, substr) { + fetchTables(dbId, schema, force, substr) { // This can be large so it shouldn't be put in the Redux store + const forceRefresh = force || false; if (dbId && schema) { this.setState({ tableLoading: true, tableOptions: [] }); - const url = `/superset/tables/${dbId}/${schema}/${substr}/`; + const url = `/superset/tables/${dbId}/${schema}/${substr}/${forceRefresh}/`; $.get(url).done((data) => { const filterOptions = createFilterOptions({ options: data.options }); this.setState({ @@ -111,16 +110,17 @@ class SqlEditorLeftBar extends React.PureComponent { } this.props.actions.addTable(this.props.queryEditor, tableName, schemaName); } - changeSchema(schemaOpt) { + changeSchema(schemaOpt, force) { const schema = (schemaOpt) ? schemaOpt.value : null; this.props.actions.queryEditorSetSchema(this.props.queryEditor, schema); - this.fetchTables(this.props.queryEditor.dbId, schema); + this.fetchTables(this.props.queryEditor.dbId, schema, force); } - fetchSchemas(dbId) { + fetchSchemas(dbId, force) { const actualDbId = dbId || this.props.queryEditor.dbId; + const forceRefresh = force || false; if (actualDbId) { this.setState({ schemaLoading: true }); - const url = `/superset/schemas/${actualDbId}/`; + const url = `/superset/schemas/${actualDbId}/${forceRefresh}/`; $.get(url).done((data) => { const schemaOptions = data.schemas.map(s => ({ value: s, label: s })); this.setState({ schemaOptions, schemaLoading: false }); @@ -146,6 +146,7 @@ class SqlEditorLeftBar extends React.PureComponent { tableSelectPlaceholder = t('Select table '); tableSelectDisabled = true; } + const database = this.props.database || {}; return (
@@ -174,20 +175,31 @@ class SqlEditorLeftBar extends React.PureComponent { />
- ( +
+ {t('Schema:')} {o.label} +
+ )} + isLoading={this.state.schemaLoading} + autosize={false} + onChange={this.changeSchema.bind(this)} + /> +
+
+ +
+

@@ -202,30 +214,41 @@ class SqlEditorLeftBar extends React.PureComponent { ) - {this.props.queryEditor.schema && - - } +
+
+ {this.props.queryEditor.schema && + + } +
+
+ +
+

diff --git a/superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx b/superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx index 8a3387ad54635..843735ec124b3 100644 --- a/superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx +++ b/superset/assets/src/SqlLab/components/TemplateParamsEditor.jsx @@ -64,8 +64,9 @@ export default class TemplateParamsEditor extends React.Component { Assign a set of parameters as JSON below (example: {'{"my_table": "foo"}'}), and they become available - in your SQL (example: SELECT * FROM {'{{ my_table }}'} ) - by using  + in your SQL (example: SELECT * FROM {'{{ my_table }}'}) + by using + {' '} -
+ {typeof (this.state.tooltip.content) === 'string' ? +
+ : + this.state.tooltip.content + } ); } diff --git a/superset/assets/src/chart/chartAction.js b/superset/assets/src/chart/chartAction.js index 22de6b82852f1..05e76e4f39ae7 100644 --- a/superset/assets/src/chart/chartAction.js +++ b/superset/assets/src/chart/chartAction.js @@ -1,7 +1,8 @@ +import URI from 'urijs'; import { getExploreUrlAndPayload, getAnnotationJsonUrl } from '../explore/exploreUtils'; import { requiresQuery, ANNOTATION_SOURCE_TYPES } from '../modules/AnnotationTypes'; import { Logger, LOG_ACTIONS_LOAD_CHART } from '../logger'; -import { COMMON_ERR_MESSAGES } from '../common'; +import { COMMON_ERR_MESSAGES } from '../utils/common'; import { t } from '../locales'; const $ = (window.$ = require('jquery')); @@ -201,23 +202,28 @@ export function runQuery(formData, force = false, timeout = 60, key) { }; } +export const SQLLAB_REDIRECT_FAILED = 'SQLLAB_REDIRECT_FAILED'; +export function sqllabRedirectFailed(error, key) { + return { type: SQLLAB_REDIRECT_FAILED, error, key }; +} + export function redirectSQLLab(formData) { - return function () { - const { url } = getExploreUrlAndPayload({ formData, endpointType: 'query' }); + return function (dispatch) { + const { url, payload } = getExploreUrlAndPayload({ formData, endpointType: 'query' }); $.ajax({ - type: 'GET', + type: 'POST', url, + data: { + form_data: JSON.stringify(payload), + }, success: (response) => { - const redirectUrl = new URL(window.location); - redirectUrl.pathname = '/superset/sqllab'; - for (const k of redirectUrl.searchParams.keys()) { - redirectUrl.searchParams.delete(k); - } - redirectUrl.searchParams.set('datasourceKey', formData.datasource); - redirectUrl.searchParams.set('sql', response.query); - window.open(redirectUrl.href, '_blank'); + const redirectUrl = new URI(window.location); + redirectUrl + .pathname('/superset/sqllab') + .search({ datasourceKey: formData.datasource, sql: response.query }); + window.open(redirectUrl.href(), '_blank'); }, - error: () => notify.error(t("The SQL couldn't be loaded")), + error: (xhr, status, error) => dispatch(sqllabRedirectFailed(error, formData.slice_id)), }); }; } diff --git a/superset/assets/src/chart/chartReducer.js b/superset/assets/src/chart/chartReducer.js index ea8de8b54d9ea..5563d5c8b2096 100644 --- a/superset/assets/src/chart/chartReducer.js +++ b/superset/assets/src/chart/chartReducer.js @@ -133,6 +133,12 @@ export default function chartReducer(charts = {}, action) { annotationQuery, }; }, + [actions.SQLLAB_REDIRECT_FAILED](state) { + return { ...state, + chartStatus: 'failed', + chartAlert: t('An error occurred while redirecting to SQL Lab: %s', action.error), + }; + }, }; /* eslint-disable no-param-reassign */ diff --git a/superset/assets/src/common.js b/superset/assets/src/common.js index cc509eb892e8b..67ce4982d2041 100644 --- a/superset/assets/src/common.js +++ b/superset/assets/src/common.js @@ -1,6 +1,7 @@ /* eslint-disable global-require */ import $ from 'jquery'; -import { t } from './locales'; +// Everything imported in this file ends up in the common entry file +// be mindful of double-imports const utils = require('./modules/utils'); @@ -31,8 +32,3 @@ export function appSetup() { window.jQuery = $; require('bootstrap'); } - -// Error messages used in many places across applications -export const COMMON_ERR_MESSAGES = { - SESSION_TIMED_OUT: t('Your session timed out, please refresh your page and try again.'), -}; diff --git a/superset/assets/src/components/BootstrapSliderWrapper.css b/superset/assets/src/components/BootstrapSliderWrapper.css new file mode 100644 index 0000000000000..f2fef455e7d19 --- /dev/null +++ b/superset/assets/src/components/BootstrapSliderWrapper.css @@ -0,0 +1,8 @@ +.BootstrapSliderWrapper .slider-selection { + background: #efefef; +} + +.BootstrapSliderWrapper .slider-handle { + background: #b3b3b3; +} + diff --git a/superset/assets/src/components/BootstrapSliderWrapper.jsx b/superset/assets/src/components/BootstrapSliderWrapper.jsx new file mode 100644 index 0000000000000..6bcda11f650e3 --- /dev/null +++ b/superset/assets/src/components/BootstrapSliderWrapper.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactBootstrapSlider from 'react-bootstrap-slider'; +import 'bootstrap-slider/dist/css/bootstrap-slider.min.css'; +import './BootstrapSliderWrapper.css'; + +export default function BootstrapSliderWrapper(props) { + return ( + + + + ); +} diff --git a/superset/assets/src/components/ModalTrigger.jsx b/superset/assets/src/components/ModalTrigger.jsx index 67a83e6c21627..f8ab6510530ed 100644 --- a/superset/assets/src/components/ModalTrigger.jsx +++ b/superset/assets/src/components/ModalTrigger.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Modal, MenuItem } from 'react-bootstrap'; import cx from 'classnames'; @@ -8,7 +8,7 @@ import Button from './Button'; const propTypes = { animation: PropTypes.bool, triggerNode: PropTypes.node.isRequired, - modalTitle: PropTypes.node.isRequired, + modalTitle: PropTypes.node, modalBody: PropTypes.node, // not required because it can be generated by beforeOpen modalFooter: PropTypes.node, beforeOpen: PropTypes.func, @@ -28,6 +28,7 @@ const defaultProps = { isMenuItem: false, bsSize: null, className: '', + modalTitle: '', }; export default class ModalTrigger extends React.Component { @@ -59,9 +60,11 @@ export default class ModalTrigger extends React.Component { bsSize={this.props.bsSize} className={this.props.className} > - - {this.props.modalTitle} - + {this.props.modalTitle && + + {this.props.modalTitle} + + } {this.props.modalBody} @@ -80,29 +83,35 @@ export default class ModalTrigger extends React.Component { }); if (this.props.isButton) { return ( - {this.renderModal()} - + ); } else if (this.props.isMenuItem) { return ( - - {this.props.triggerNode} + + + {this.props.triggerNode} + {this.renderModal()} - + ); } /* eslint-disable jsx-a11y/interactive-supports-focus */ return ( - - {this.props.triggerNode} + + + {this.props.triggerNode} + {this.renderModal()} - + ); } } diff --git a/superset/assets/src/components/ObjectTags.css b/superset/assets/src/components/ObjectTags.css new file mode 100644 index 0000000000000..4c4a8d5b57f42 --- /dev/null +++ b/superset/assets/src/components/ObjectTags.css @@ -0,0 +1,195 @@ +/** + *
+ *
+ * + *
+ *
+

{t('Delete dashboard tab?')}

+
+ Deleting a tab will remove all content within it. You may still + reverse this action with the undo button (cmd + z) until + you save your changes. +
+
+ + +
+
+ } + /> + ); + } +} + +DeleteComponentModal.propTypes = propTypes; diff --git a/superset/assets/src/dashboard/components/Header.jsx b/superset/assets/src/dashboard/components/Header.jsx index bc66a0136cfd0..12748c6c9421b 100644 --- a/superset/assets/src/dashboard/components/Header.jsx +++ b/superset/assets/src/dashboard/components/Header.jsx @@ -6,7 +6,9 @@ import HeaderActionsDropdown from './HeaderActionsDropdown'; import EditableTitle from '../../components/EditableTitle'; import Button from '../../components/Button'; import FaveStar from '../../components/FaveStar'; +import ObjectTags from '../../components/ObjectTags'; import UndoRedoKeylisteners from './UndoRedoKeylisteners'; +import { addTag, deleteTag, fetchSuggestions, fetchTags } from '../../tags'; import { chartPropShape } from '../util/propShapes'; import { t } from '../../locales'; @@ -71,6 +73,24 @@ class Header extends React.PureComponent { this.toggleEditMode = this.toggleEditMode.bind(this); this.forceRefresh = this.forceRefresh.bind(this); this.overwriteDashboard = this.overwriteDashboard.bind(this); + + this.fetchTags = fetchTags.bind(this, { + objectType: 'dashboard', + objectId: props.dashboardInfo.id, + includeTypes: false, + }); + this.fetchSuggestions = fetchSuggestions.bind(this, { + includeTypes: false, + }); + this.deleteTag = deleteTag.bind(this, { + objectType: 'dashboard', + objectId: props.dashboardInfo.id, + }); + this.addTag = addTag.bind(this, { + objectType: 'dashboard', + objectId: props.dashboardInfo.id, + includeTypes: false, + }); } componentWillReceiveProps(nextProps) { @@ -208,6 +228,13 @@ class Header extends React.PureComponent { saveFaveStar={this.props.saveFaveStar} isStarred={this.props.isStarred} /> +
diff --git a/superset/assets/src/dashboard/components/gridComponents/Tab.jsx b/superset/assets/src/dashboard/components/gridComponents/Tab.jsx index b91d8089fd2fe..dad3be4c72bb5 100644 --- a/superset/assets/src/dashboard/components/gridComponents/Tab.jsx +++ b/superset/assets/src/dashboard/components/gridComponents/Tab.jsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import DashboardComponent from '../../containers/DashboardComponent'; import DragDroppable from '../dnd/DragDroppable'; import EditableTitle from '../../../components/EditableTitle'; -import DeleteComponentButton from '../DeleteComponentButton'; +import DeleteComponentModal from '../DeleteComponentModal'; import WithPopoverMenu from '../menu/WithPopoverMenu'; import { componentShape } from '../../util/propShapes'; import { DASHBOARD_ROOT_DEPTH } from '../../util/constants'; @@ -178,6 +178,11 @@ export default class Tab extends React.PureComponent { renderTab() { const { isFocused } = this.state; const { component, parentComponent, index, depth, editMode } = this.props; + const deleteTabIcon = ( +
+ +
+ ); return ( , ] diff --git a/superset/assets/src/dashboard/components/gridComponents/Tags.jsx b/superset/assets/src/dashboard/components/gridComponents/Tags.jsx new file mode 100644 index 0000000000000..6763279c5e78f --- /dev/null +++ b/superset/assets/src/dashboard/components/gridComponents/Tags.jsx @@ -0,0 +1,309 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import cx from 'classnames'; +import { ListGroup, ListGroupItem, Panel } from 'react-bootstrap'; +import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table'; +import moment from 'moment'; +import { unsafe } from 'reactable'; +import 'whatwg-fetch'; + +import DeleteComponentButton from '../DeleteComponentButton'; +import DragDroppable from '../dnd/DragDroppable'; +import HoverMenu from '../menu/HoverMenu'; +import IconButton from '../IconButton'; +import ResizableContainer from '../resizable/ResizableContainer'; +import SelectControl from '../../../explore/components/controls/SelectControl'; +import WithPopoverMenu from '../menu/WithPopoverMenu'; +import { componentShape } from '../../util/propShapes'; +import { fetchObjects, fetchSuggestions } from '../../../tags'; +import { ROW_TYPE, COLUMN_TYPE } from '../../util/componentTypes'; +import { + GRID_MIN_COLUMN_COUNT, + GRID_MIN_ROW_UNITS, + GRID_BASE_UNIT, + STANDARD_TAGS, + TAGGED_CONTENT_TYPES, +} from '../../util/constants'; + +const HEADER_HEIGHT = 48; + +const propTypes = { + id: PropTypes.string.isRequired, + parentId: PropTypes.string.isRequired, + component: componentShape.isRequired, + parentComponent: componentShape.isRequired, + index: PropTypes.number.isRequired, + depth: PropTypes.number.isRequired, + editMode: PropTypes.bool.isRequired, + + // grid related + availableColumnCount: PropTypes.number.isRequired, + columnWidth: PropTypes.number.isRequired, + onResizeStart: PropTypes.func.isRequired, + onResize: PropTypes.func.isRequired, + onResizeStop: PropTypes.func.isRequired, + + // dnd + deleteComponent: PropTypes.func.isRequired, + handleComponentDrop: PropTypes.func.isRequired, + updateComponents: PropTypes.func.isRequired, +}; + +const defaultProps = {}; + +function linkFormatter(cell, row) { + const url = `${cell}`; + return ( + + {row.name} + + ); +} + +function changedOnFormatter(cell) { + const date = new Date(cell); + return unsafe(moment.utc(date).fromNow()); +} + +class Tags extends React.PureComponent { + constructor(props) { + super(props); + this.state = { + isFocused: false, + isConfiguring: false, + data: [], + tagSuggestions: STANDARD_TAGS, + }; + + this.handleChangeFocus = this.handleChangeFocus.bind(this); + this.handleDeleteComponent = this.handleDeleteComponent.bind(this); + this.toggleConfiguring = this.toggleConfiguring.bind(this); + this.handleUpdateMeta = this.handleUpdateMeta.bind(this); + this.handleChangeTags = this.handleUpdateMeta.bind(this, 'tags'); + this.handleChangeTypes = this.handleUpdateMeta.bind(this, 'types'); + + this.fetchResults = this.fetchResults.bind(this); + this.fetchTagSuggestions = this.fetchTagSuggestions.bind(this); + } + + componentDidMount() { + this.fetchResults(this.props.component); + this.fetchTagSuggestions(); + } + + handleChangeFocus(nextFocus) { + this.setState(() => ({ isFocused: nextFocus })); + } + + handleUpdateMeta(metaKey, nextValue) { + const { updateComponents, component } = this.props; + if (nextValue && component.meta[metaKey] !== nextValue) { + const nextComponent = { + ...component, + meta: { + ...component.meta, + [metaKey]: nextValue, + }, + }; + updateComponents({ [component.id]: nextComponent }); + this.fetchResults(nextComponent); + } + } + + fetchResults(component) { + const tags = component.meta.tags || []; + const types = component.meta.types || TAGGED_CONTENT_TYPES; + fetchObjects({ tags: tags.join(','), types: types.join(',') }, data => + this.setState({ data }), + ); + } + + fetchTagSuggestions() { + fetchSuggestions({ includeTypes: false }, suggestions => { + const tagSuggestions = STANDARD_TAGS.concat( + suggestions.map(tag => tag.name), + ); + this.setState({ tagSuggestions }); + }); + } + + handleDeleteComponent() { + const { deleteComponent, id, parentId } = this.props; + deleteComponent(id, parentId); + } + + toggleConfiguring() { + this.setState({ isConfiguring: !this.state.isConfiguring }); + } + + renderEditMode() { + const { component } = this.props; + return ( + + + + + + + + + + + ); + } + + renderPreviewMode() { + const component = this.props.component; + const height = component.meta.height * GRID_BASE_UNIT - HEADER_HEIGHT; + return ( + + + + Name + + + Type + + + Creator + + + Changed on + + + ); + } + + render() { + const { isFocused, isConfiguring } = this.state; + + const { + component, + parentComponent, + index, + depth, + availableColumnCount, + columnWidth, + onResizeStart, + onResize, + onResizeStop, + handleComponentDrop, + editMode, + } = this.props; + + // inherit the size of parent columns + const widthMultiple = + parentComponent.type === COLUMN_TYPE + ? parentComponent.meta.width || GRID_MIN_COLUMN_COUNT + : component.meta.width || GRID_MIN_COLUMN_COUNT; + + const buttonClass = isConfiguring ? 'fa fa-table' : 'fa fa-cog'; + + return ( + + {({ dropIndicatorProps, dragSourceRef }) => ( + +
+ +
+ {isConfiguring + ? this.renderEditMode() + : this.renderPreviewMode()} + {editMode && ( + + + + + )} +
+
+
+ {dropIndicatorProps &&
} + + )} + + ); + } +} + +Tags.propTypes = propTypes; +Tags.defaultProps = defaultProps; + +export default Tags; diff --git a/superset/assets/src/dashboard/components/gridComponents/index.js b/superset/assets/src/dashboard/components/gridComponents/index.js index c56bed01cdc4e..d775268f856fc 100644 --- a/superset/assets/src/dashboard/components/gridComponents/index.js +++ b/superset/assets/src/dashboard/components/gridComponents/index.js @@ -7,6 +7,7 @@ import { ROW_TYPE, TAB_TYPE, TABS_TYPE, + TAGS_TYPE, } from '../../util/componentTypes'; import ChartHolder from './ChartHolder'; @@ -17,6 +18,7 @@ import Header from './Header'; import Row from './Row'; import Tab from './Tab'; import Tabs from './Tabs'; +import Tags from './Tags'; export { default as ChartHolder } from './ChartHolder'; export { default as Markdown } from './Markdown'; @@ -26,6 +28,7 @@ export { default as Header } from './Header'; export { default as Row } from './Row'; export { default as Tab } from './Tab'; export { default as Tabs } from './Tabs'; +export { default as Tags } from './Tags'; export default { [CHART_TYPE]: ChartHolder, @@ -36,4 +39,5 @@ export default { [ROW_TYPE]: Row, [TAB_TYPE]: Tab, [TABS_TYPE]: Tabs, + [TAGS_TYPE]: Tags, }; diff --git a/superset/assets/src/dashboard/components/gridComponents/new/NewTags.jsx b/superset/assets/src/dashboard/components/gridComponents/new/NewTags.jsx new file mode 100644 index 0000000000000..7ab41a7199ea2 --- /dev/null +++ b/superset/assets/src/dashboard/components/gridComponents/new/NewTags.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import { TAGS_TYPE } from '../../../util/componentTypes'; +import { NEW_TAGS_ID } from '../../../util/constants'; +import DraggableNewComponent from './DraggableNewComponent'; + +export default function DraggableNewTags() { + return ( + + ); +} diff --git a/superset/assets/src/dashboard/components/menu/WithPopoverMenu.jsx b/superset/assets/src/dashboard/components/menu/WithPopoverMenu.jsx index 2a047ac573a18..f98b17e650365 100644 --- a/superset/assets/src/dashboard/components/menu/WithPopoverMenu.jsx +++ b/superset/assets/src/dashboard/components/menu/WithPopoverMenu.jsx @@ -20,7 +20,8 @@ const defaultProps = { onPressDelete() {}, menuItems: [], isFocused: false, - shouldFocus: (event, container) => container.contains(event.target), + shouldFocus: (event, container) => + container && container.contains(event.target), style: null, }; @@ -36,19 +37,19 @@ class WithPopoverMenu extends React.PureComponent { componentWillReceiveProps(nextProps) { if (nextProps.editMode && nextProps.isFocused && !this.state.isFocused) { - document.addEventListener('click', this.handleClick, true); - document.addEventListener('drag', this.handleClick, true); + document.addEventListener('click', this.handleClick); + document.addEventListener('drag', this.handleClick); this.setState({ isFocused: true }); } else if (this.state.isFocused && !nextProps.editMode) { - document.removeEventListener('click', this.handleClick, true); - document.removeEventListener('drag', this.handleClick, true); + document.removeEventListener('click', this.handleClick); + document.removeEventListener('drag', this.handleClick); this.setState({ isFocused: false }); } } componentWillUnmount() { - document.removeEventListener('click', this.handleClick, true); - document.removeEventListener('drag', this.handleClick, true); + document.removeEventListener('click', this.handleClick); + document.removeEventListener('drag', this.handleClick); } setRef(ref) { @@ -69,15 +70,15 @@ class WithPopoverMenu extends React.PureComponent { if (!disableClick && shouldFocus && !this.state.isFocused) { // if not focused, set focus and add a window event listener to capture outside clicks // this enables us to not set a click listener for ever item on a dashboard - document.addEventListener('click', this.handleClick, true); - document.addEventListener('drag', this.handleClick, true); + document.addEventListener('click', this.handleClick); + document.addEventListener('drag', this.handleClick); this.setState(() => ({ isFocused: true })); if (onChangeFocus) { onChangeFocus(true); } } else if (!shouldFocus && this.state.isFocused) { - document.removeEventListener('click', this.handleClick, true); - document.removeEventListener('drag', this.handleClick, true); + document.removeEventListener('click', this.handleClick); + document.removeEventListener('drag', this.handleClick); this.setState(() => ({ isFocused: false })); if (onChangeFocus) { onChangeFocus(false); diff --git a/superset/assets/src/dashboard/reducers/dashboardState.js b/superset/assets/src/dashboard/reducers/dashboardState.js index 1479f88311255..c703af8f6fc58 100644 --- a/superset/assets/src/dashboard/reducers/dashboardState.js +++ b/superset/assets/src/dashboard/reducers/dashboardState.js @@ -95,46 +95,34 @@ export default function dashboardStateReducer(state = {}, action) { let filters = state.filters; const { chart, col, vals: nextVals, merge, refresh } = action; const sliceId = chart.id; - const filterKeys = [ - '__time_range', - '__time_col', - '__time_grain', - '__time_origin', - '__granularity', - ]; - if ( - filterKeys.indexOf(col) >= 0 || - action.chart.formData.groupby.indexOf(col) !== -1 - ) { - let newFilter = {}; - if (!(sliceId in filters)) { - // if no filters existed for the slice, set them - newFilter = { [col]: nextVals }; - } else if ((filters[sliceId] && !(col in filters[sliceId])) || !merge) { - // If no filters exist for this column, or we are overwriting them - newFilter = { ...filters[sliceId], [col]: nextVals }; - } else if (filters[sliceId][col] instanceof Array) { - newFilter[col] = [...filters[sliceId][col], ...nextVals]; - } else { - newFilter[col] = [filters[sliceId][col], ...nextVals]; - } - filters = { ...filters, [sliceId]: newFilter }; + let newFilter = {}; + if (!(sliceId in filters)) { + // if no filters existed for the slice, set them + newFilter = { [col]: nextVals }; + } else if ((filters[sliceId] && !(col in filters[sliceId])) || !merge) { + // If no filters exist for this column, or we are overwriting them + newFilter = { ...filters[sliceId], [col]: nextVals }; + } else if (filters[sliceId][col] instanceof Array) { + newFilter[col] = [...filters[sliceId][col], ...nextVals]; + } else { + newFilter[col] = [filters[sliceId][col], ...nextVals]; + } + filters = { ...filters, [sliceId]: newFilter }; - // remove any empty filters so they don't pollute the logs - Object.keys(filters).forEach(chartId => { - Object.keys(filters[chartId]).forEach(column => { - if ( - !filters[chartId][column] || - filters[chartId][column].length === 0 - ) { - delete filters[chartId][column]; - } - }); - if (Object.keys(filters[chartId]).length === 0) { - delete filters[chartId]; + // remove any empty filters so they don't pollute the logs + Object.keys(filters).forEach(chartId => { + Object.keys(filters[chartId]).forEach(column => { + if ( + !filters[chartId][column] || + filters[chartId][column].length === 0 + ) { + delete filters[chartId][column]; } }); - } + if (Object.keys(filters[chartId]).length === 0) { + delete filters[chartId]; + } + }); return { ...state, filters, refresh }; }, [SET_UNSAVED_CHANGES]() { diff --git a/superset/assets/src/dashboard/stylesheets/dashboard.less b/superset/assets/src/dashboard/stylesheets/dashboard.less index 56f5d437745c4..2b5242e87ac50 100644 --- a/superset/assets/src/dashboard/stylesheets/dashboard.less +++ b/superset/assets/src/dashboard/stylesheets/dashboard.less @@ -129,10 +129,38 @@ body { } } -.modal img.loading { - width: 50px; - margin: 0; - position: relative; +.modal { + img.loading { + width: 50px; + margin: 0; + position: relative; + } + + .modal-body { + padding: 24px 24px 29px 24px; + + div { + margin-top: 24px; + + &:first-child { + margin-top: 0; + } + } + } + + .delete-modal-actions-container { + .btn { + margin-right: 16px; + &:last-child { + margin-right: 0; + } + + &.btn-primary { + background: @pink !important; + border-color: @pink !important; + } + } + } } .react-bs-container-body { diff --git a/superset/assets/src/dashboard/util/componentIsResizable.js b/superset/assets/src/dashboard/util/componentIsResizable.js index 45812d762b58e..2d07902d61a25 100644 --- a/superset/assets/src/dashboard/util/componentIsResizable.js +++ b/superset/assets/src/dashboard/util/componentIsResizable.js @@ -1,5 +1,13 @@ -import { COLUMN_TYPE, CHART_TYPE, MARKDOWN_TYPE } from './componentTypes'; +import { + COLUMN_TYPE, + CHART_TYPE, + MARKDOWN_TYPE, + TAGS_TYPE, +} from './componentTypes'; export default function componentIsResizable(entity) { - return [COLUMN_TYPE, CHART_TYPE, MARKDOWN_TYPE].indexOf(entity.type) > -1; + return ( + [COLUMN_TYPE, CHART_TYPE, MARKDOWN_TYPE, TAGS_TYPE].indexOf(entity.type) > + -1 + ); } diff --git a/superset/assets/src/dashboard/util/componentTypes.js b/superset/assets/src/dashboard/util/componentTypes.js index 47478e6119d8b..25f363b7511ea 100644 --- a/superset/assets/src/dashboard/util/componentTypes.js +++ b/superset/assets/src/dashboard/util/componentTypes.js @@ -10,6 +10,7 @@ export const NEW_COMPONENT_SOURCE_TYPE = 'NEW_COMPONENT_SOURCE'; export const ROW_TYPE = 'ROW'; export const TABS_TYPE = 'TABS'; export const TAB_TYPE = 'TAB'; +export const TAGS_TYPE = 'TAGS'; export default { CHART_TYPE, @@ -24,4 +25,5 @@ export default { ROW_TYPE, TABS_TYPE, TAB_TYPE, + TAGS_TYPE, }; diff --git a/superset/assets/src/dashboard/util/constants.js b/superset/assets/src/dashboard/util/constants.js index b26cbff85fdbb..c8ca8ffaafea0 100644 --- a/superset/assets/src/dashboard/util/constants.js +++ b/superset/assets/src/dashboard/util/constants.js @@ -13,6 +13,7 @@ export const NEW_MARKDOWN_ID = 'NEW_MARKDOWN_ID'; export const NEW_ROW_ID = 'NEW_ROW_ID'; export const NEW_TAB_ID = 'NEW_TAB_ID'; export const NEW_TABS_ID = 'NEW_TABS_ID'; +export const NEW_TAGS_ID = 'NEW_TAGS_ID'; // grid constants export const DASHBOARD_ROOT_DEPTH = 0; @@ -41,6 +42,13 @@ export const UNDO_LIMIT = 50; export const SAVE_TYPE_OVERWRITE = 'overwrite'; export const SAVE_TYPE_NEWDASHBOARD = 'newDashboard'; +// objects that can be tagged +export const TAGGED_CONTENT_TYPES = ['dashboard', 'chart', 'query']; +export const STANDARD_TAGS = [ + ['owner:{{ current_user_id() }}', 'Owned by me'], + ['favorited_by:{{ current_user_id() }}', 'Favorited by me'], +]; + // default dashboard layout data size limit // could be overwritten by server-side config export const DASHBOARD_POSITION_DATA_LIMIT = 65535; diff --git a/superset/assets/src/dashboard/util/getDetailedComponentWidth.js b/superset/assets/src/dashboard/util/getDetailedComponentWidth.js index ee3096d6710e7..88337560aa962 100644 --- a/superset/assets/src/dashboard/util/getDetailedComponentWidth.js +++ b/superset/assets/src/dashboard/util/getDetailedComponentWidth.js @@ -5,6 +5,7 @@ import { COLUMN_TYPE, MARKDOWN_TYPE, CHART_TYPE, + TAGS_TYPE, } from './componentTypes'; function getTotalChildWidth({ id, components }) { @@ -67,7 +68,8 @@ export default function getDetailedComponentWidth({ }); } else if ( component.type === MARKDOWN_TYPE || - component.type === CHART_TYPE + component.type === CHART_TYPE || + component.type === TAGS_TYPE ) { result.minimumWidth = GRID_MIN_COLUMN_COUNT; } diff --git a/superset/assets/src/dashboard/util/isValidChild.js b/superset/assets/src/dashboard/util/isValidChild.js index c975496baa40c..b11e0dc67b45a 100644 --- a/superset/assets/src/dashboard/util/isValidChild.js +++ b/superset/assets/src/dashboard/util/isValidChild.js @@ -25,6 +25,7 @@ import { ROW_TYPE, TABS_TYPE, TAB_TYPE, + TAGS_TYPE, } from './componentTypes'; import { DASHBOARD_ROOT_DEPTH as rootDepth } from './constants'; @@ -50,12 +51,14 @@ const parentMaxDepthLookup = { [HEADER_TYPE]: depthOne, [ROW_TYPE]: depthOne, [TABS_TYPE]: depthOne, + [TAGS_TYPE]: depthOne, }, [ROW_TYPE]: { [CHART_TYPE]: depthFour, [MARKDOWN_TYPE]: depthFour, [COLUMN_TYPE]: depthFour, + [TAGS_TYPE]: depthFour, }, [TABS_TYPE]: { @@ -70,6 +73,7 @@ const parentMaxDepthLookup = { [HEADER_TYPE]: depthTwo, [ROW_TYPE]: depthTwo, [TABS_TYPE]: depthTwo, + [TAGS_TYPE]: depthTwo, }, [COLUMN_TYPE]: { @@ -78,6 +82,7 @@ const parentMaxDepthLookup = { [MARKDOWN_TYPE]: depthFive, [ROW_TYPE]: depthThree, [DIVIDER_TYPE]: depthThree, + [TAGS_TYPE]: depthFive, }, // these have no valid children @@ -85,6 +90,7 @@ const parentMaxDepthLookup = { [DIVIDER_TYPE]: {}, [HEADER_TYPE]: {}, [MARKDOWN_TYPE]: {}, + [TAGS_TYPE]: {}, }; export default function isValidChild({ parentType, childType, parentDepth }) { diff --git a/superset/assets/src/dashboard/util/newComponentFactory.js b/superset/assets/src/dashboard/util/newComponentFactory.js index 18b433b0135eb..620235072c405 100644 --- a/superset/assets/src/dashboard/util/newComponentFactory.js +++ b/superset/assets/src/dashboard/util/newComponentFactory.js @@ -9,6 +9,7 @@ import { ROW_TYPE, TABS_TYPE, TAB_TYPE, + TAGS_TYPE, } from './componentTypes'; import { @@ -33,6 +34,7 @@ const typeToDefaultMetaData = { [ROW_TYPE]: { background: BACKGROUND_TRANSPARENT }, [TABS_TYPE]: null, [TAB_TYPE]: { text: 'New Tab' }, + [TAGS_TYPE]: { width: 3, height: 30 }, }; function uuid(type) { diff --git a/superset/assets/src/dashboard/util/shouldWrapChildInRow.js b/superset/assets/src/dashboard/util/shouldWrapChildInRow.js index e7e648cf1bf64..56a317b814bb7 100644 --- a/superset/assets/src/dashboard/util/shouldWrapChildInRow.js +++ b/superset/assets/src/dashboard/util/shouldWrapChildInRow.js @@ -4,6 +4,7 @@ import { COLUMN_TYPE, MARKDOWN_TYPE, TAB_TYPE, + TAGS_TYPE, } from './componentTypes'; const typeToWrapChildLookup = { @@ -11,12 +12,14 @@ const typeToWrapChildLookup = { [CHART_TYPE]: true, [COLUMN_TYPE]: true, [MARKDOWN_TYPE]: true, + [TAGS_TYPE]: true, }, [TAB_TYPE]: { [CHART_TYPE]: true, [COLUMN_TYPE]: true, [MARKDOWN_TYPE]: true, + [TAGS_TYPE]: true, }, }; diff --git a/superset/assets/src/datasource/DatasourceEditor.jsx b/superset/assets/src/datasource/DatasourceEditor.jsx index 10523eaf90666..7193e69637da7 100644 --- a/superset/assets/src/datasource/DatasourceEditor.jsx +++ b/superset/assets/src/datasource/DatasourceEditor.jsx @@ -329,11 +329,23 @@ export class DatasourceEditor extends React.PureComponent { control={} /> } /> + {this.state.isSqla && + } + />}
@@ -456,6 +473,7 @@ export class DatasourceEditor extends React.PureComponent { } collection={this.state.datasource.metrics} + allowAddItem onChange={this.onDatasourcePropChange.bind(this, 'metrics')} itemGenerator={() => ({ metric_name: '', diff --git a/superset/assets/src/explore/components/AdhocFilterEditPopoverSimpleTabContent.jsx b/superset/assets/src/explore/components/AdhocFilterEditPopoverSimpleTabContent.jsx index 94535cdea79e9..6c670b6d7c309 100644 --- a/superset/assets/src/explore/components/AdhocFilterEditPopoverSimpleTabContent.jsx +++ b/superset/assets/src/explore/components/AdhocFilterEditPopoverSimpleTabContent.jsx @@ -283,6 +283,7 @@ export default class AdhocFilterEditPopoverSimpleTabContent extends React.Compon value={adhocFilter.comparator || ''} className="form-control input-sm" placeholder={t('Filter value')} + disabled={adhocFilter.operator === 'IS NOT NULL' || adhocFilter.operator === 'IS NULL'} /> } diff --git a/superset/assets/src/explore/components/AdhocMetricEditPopover.jsx b/superset/assets/src/explore/components/AdhocMetricEditPopover.jsx index d55105e06fadc..77926a836cca2 100644 --- a/superset/assets/src/explore/components/AdhocMetricEditPopover.jsx +++ b/superset/assets/src/explore/components/AdhocMetricEditPopover.jsx @@ -86,10 +86,12 @@ export default class AdhocMetricEditPopover extends React.Component { } onColumnChange(column) { - this.setState({ adhocMetric: this.state.adhocMetric.duplicateWith({ - column, - expressionType: EXPRESSION_TYPES.SIMPLE, - }) }); + this.setState({ + adhocMetric: this.state.adhocMetric.duplicateWith({ + column, + expressionType: EXPRESSION_TYPES.SIMPLE, + }), + }); } onAggregateChange(aggregate) { @@ -221,7 +223,7 @@ export default class AdhocMetricEditPopover extends React.Component { aggregate - + diff --git a/superset/assets/src/explore/components/ExploreChartHeader.jsx b/superset/assets/src/explore/components/ExploreChartHeader.jsx index 8c9ea91f2a590..063444b859ff0 100644 --- a/superset/assets/src/explore/components/ExploreChartHeader.jsx +++ b/superset/assets/src/explore/components/ExploreChartHeader.jsx @@ -10,6 +10,13 @@ import FaveStar from '../../components/FaveStar'; import TooltipWrapper from '../../components/TooltipWrapper'; import Timer from '../../components/Timer'; import CachedLabel from '../../components/CachedLabel'; +import ObjectTags from '../../components/ObjectTags'; +import { + addTag, + deleteTag, + fetchSuggestions, + fetchTags, +} from '../../tags'; import { t } from '../../locales'; const CHART_STATUS_MAP = { @@ -32,9 +39,35 @@ const propTypes = { }; class ExploreChartHeader extends React.PureComponent { + constructor(props) { + super(props); + + this.fetchTags = fetchTags.bind(this, { + objectType: 'chart', + objectId: props.chart.id, + includeTypes: false, + }); + this.fetchSuggestions = fetchSuggestions.bind(this, { + includeTypes: false, + }); + this.deleteTag = deleteTag.bind(this, { + objectType: 'chart', + objectId: props.chart.id, + }); + this.addTag = addTag.bind(this, { + objectType: 'chart', + objectId: props.chart.id, + includeTypes: false, + }); + } + runQuery() { - this.props.actions.runQuery(this.props.form_data, true, - this.props.timeout, this.props.chart.id); + this.props.actions.runQuery( + this.props.form_data, + true, + this.props.timeout, + this.props.chart.id, + ); } updateChartTitleOrSaveSlice(newTitle) { @@ -43,17 +76,23 @@ class ExploreChartHeader extends React.PureComponent { slice_name: newTitle, action: isNewSlice ? 'saveas' : 'overwrite', }; - this.props.actions.saveSlice(this.props.form_data, params) - .then((data) => { - if (isNewSlice) { - this.props.actions.createNewSlice( - data.can_add, data.can_download, data.can_overwrite, - data.slice, data.form_data); - this.props.addHistory({ isReplace: true, title: `[chart] ${data.slice.slice_name}` }); - } else { - this.props.actions.updateChartTitle(newTitle); - } - }); + this.props.actions.saveSlice(this.props.form_data, params).then((data) => { + if (isNewSlice) { + this.props.actions.createNewSlice( + data.can_add, + data.can_download, + data.can_overwrite, + data.slice, + data.form_data, + ); + this.props.addHistory({ + isReplace: true, + title: `[chart] ${data.slice.slice_name}`, + }); + } else { + this.props.actions.updateChartTitle(newTitle); + } + }); } renderChartTitle() { @@ -73,58 +112,69 @@ class ExploreChartHeader extends React.PureComponent { chartUpdateEndTime, chartUpdateStartTime, latestQueryFormData, - queryResponse } = this.props.chart; - const chartSucceeded = ['success', 'rendered'].indexOf(this.props.chart.chartStatus) > 0; + queryResponse, + } = this.props.chart; + const chartSucceeded = + ['success', 'rendered'].indexOf(this.props.chart.chartStatus) > 0; return ( -
+
- {this.props.slice && - - + {this.props.slice && ( + + - - - - - - - } - {this.props.chart.sliceFormData && + + + + + + )} + {this.props.chart.sliceFormData && ( - } + )} +
- {chartSucceeded && queryResponse && - } - {chartSucceeded && queryResponse && queryResponse.is_cached && - } + {chartSucceeded && + queryResponse && ( + + )} + {chartSucceeded && + queryResponse && + queryResponse.is_cached && ( + + )} = 0) { - this.state.type = TYPES.CUSTOM_START_END; - [this.state.since, this.state.until] = value.split(SEPARATOR, 2); - } else { - this.state.type = TYPES.DEFAULTS; - if (COMMON_TIME_FRAMES.indexOf(value) >= 0) { - this.state.common = value; - } else { - this.state.common = null; - [this.state.rel, this.state.num, this.state.grain] = value.split(' ', 3); - } - } - this.state.freeformInputs.since = isFreeform(this.state.since); - this.state.freeformInputs.until = isFreeform(this.state.until); - // We need direct access to the state of the `DateTimeField` component - this.dateTimeFieldRefs = {}; + // react-datetime has a `closeOnSelect` prop, but it's buggy... so we + // handle the calendar visibility here ourselves + showSinceCalendar: false, + showUntilCalendar: false, + sinceViewMode: 'days', + untilViewMode: 'days', + }; + this.close = this.close.bind(this); this.handleClick = this.handleClick.bind(this); + this.isValidSince = this.isValidSince.bind(this); + this.isValidUntil = this.isValidUntil.bind(this); + this.onEnter = this.onEnter.bind(this); + this.renderInput = this.renderInput.bind(this); + this.setCustomRange = this.setCustomRange.bind(this); + this.setCustomStartEnd = this.setCustomStartEnd.bind(this); + this.setTypeCustomRange = this.setTypeCustomRange.bind(this); + this.setTypeCustomStartEnd = this.setTypeCustomStartEnd.bind(this); + this.toggleCalendar = this.toggleCalendar.bind(this); } componentDidMount() { + const value = this.props.value; + if (value.indexOf(SEPARATOR) >= 0) { + this.state = { ...this.state, ...getStateFromSeparator(value) }; + } else if (COMMON_TIME_FRAMES.indexOf(value) >= 0) { + this.state = { ...this.state, ...getStateFromCommonTimeFrame(value) }; + } else { + this.state = { ...this.state, ...getStateFromCustomRange(value) }; + } document.addEventListener('click', this.handleClick); } componentWillUnmount() { @@ -128,66 +176,37 @@ export default class DateFilterControl extends React.Component { this.close(); } } - setDefaults(timeFrame) { - const nextState = { - type: TYPES.DEFAULTS, - common: timeFrame, - until: moment().startOf('day').format(MOMENT_FORMAT), - }; - const units = timeFrame.split(' ')[1] + 's'; - nextState.since = moment().startOf('day').subtract(1, units).format(MOMENT_FORMAT); - this.setState(nextState, this.updateRefs); - } setCustomRange(key, value) { - const nextState = { ...this.state, type: TYPES.CUSTOM_RANGE }; - if (key !== undefined && value !== undefined) { - nextState[key] = value; - } - if (nextState.rel === RELATIVE_TIME_OPTIONS.LAST) { - nextState.until = moment().startOf('day').format(MOMENT_FORMAT); - nextState.since = moment() - .startOf('day') - .subtract(nextState.num, nextState.grain) - .format(MOMENT_FORMAT); - } else { - nextState.until = moment() - .startOf('day') - .add(nextState.num, nextState.grain) - .format(MOMENT_FORMAT); - nextState.since = moment().startOf('day').format(MOMENT_FORMAT); - } - this.setState(nextState, this.updateRefs); + const updatedState = { ...this.state, [key]: value }; + const combinedValue = [updatedState.rel, updatedState.num, updatedState.grain].join(' '); + this.setState(getStateFromCustomRange(combinedValue)); } setCustomStartEnd(key, value) { - const nextState = { + const closeCalendar = ( + (key === 'since' && this.state.sinceViewMode === 'days') || + (key === 'until' && this.state.untilViewMode === 'days') + ); + this.setState({ type: TYPES.CUSTOM_START_END, - freeformInputs: { ...this.state.freeformInputs }, - }; - if (value === INVALID_DATE_MESSAGE) { - // the DateTimeField component will return `Invalid date` for freeform - // text, so we need to cheat and steal the value from the state - const freeformValue = this.dateTimeFieldRefs[key].state.inputValue; - nextState.freeformInputs[key] = true; - nextState[key] = freeformValue; - } else { - nextState.freeformInputs[key] = false; - nextState[key] = value; - } - this.setState(nextState, this.updateRefs); + [key]: typeof value === 'string' ? value : value.format(MOMENT_FORMAT), + showSinceCalendar: this.state.showSinceCalendar && !closeCalendar, + showUntilCalendar: this.state.showUntilCalendar && !closeCalendar, + sinceViewMode: closeCalendar ? 'days' : this.state.sinceViewMode, + untilViewMode: closeCalendar ? 'days' : this.state.untilViewMode, + }); + } + setTypeCustomRange() { + this.setState({ type: TYPES.CUSTOM_RANGE }); + } + setTypeCustomStartEnd() { + this.setState({ type: TYPES.CUSTOM_START_END }); } handleClick(e) { // switch to `TYPES.CUSTOM_START_END` when the calendar is clicked if (this.startEndSectionRef && this.startEndSectionRef.contains(e.target)) { - this.setState({ type: TYPES.CUSTOM_START_END }); + this.setTypeCustomStartEnd(); } } - updateRefs() { - /* This is required because the component does not accept - * freeform dates as props, since they can't be parsed by `moment`. - */ - this.dateTimeFieldRefs.since.setState({ inputValue: this.state.since }); - this.dateTimeFieldRefs.until.setState({ inputValue: this.state.until }); - } close() { let val; if (this.state.type === TYPES.DEFAULTS) { @@ -199,11 +218,53 @@ export default class DateFilterControl extends React.Component { } this.props.onChange(val); this.refs.trigger.hide(); + this.setState({ showSinceCalendar: false, showUntilCalendar: false }); + } + isValidSince(date) { + return (!isValidMoment(this.state.until) || date <= moment(this.state.until, MOMENT_FORMAT)); + } + isValidUntil(date) { + return (!isValidMoment(this.state.since) || date >= moment(this.state.since, MOMENT_FORMAT)); + } + toggleCalendar(key) { + const nextState = {}; + if (key === 'showSinceCalendar') { + nextState.showSinceCalendar = !this.state.showSinceCalendar; + if (!this.state.showSinceCalendar) { + nextState.showUntilCalendar = false; + } + } else if (key === 'showUntilCalendar') { + nextState.showUntilCalendar = !this.state.showUntilCalendar; + if (!this.state.showUntilCalendar) { + nextState.showSinceCalendar = false; + } + } + this.setState(nextState); + } + renderInput(props, key) { + return ( + + + {}} + /> + this.toggleCalendar(key)}> + + + + + ); } renderPopover() { const grainOptions = TIME_GRAIN_OPTIONS.map(grain => ( this.setCustomRange('grain', value)} key={grain} eventKey={grain} active={grain === this.state.grain} @@ -215,7 +276,7 @@ export default class DateFilterControl extends React.Component { this.setState(getStateFromCommonTimeFrame(timeFrame))} > {timeFrame} @@ -236,7 +297,7 @@ export default class DateFilterControl extends React.Component {
@@ -245,17 +306,17 @@ export default class DateFilterControl extends React.Component { componentClass={InputGroup.Button} id="input-dropdown-rel" title={this.state.rel} - onFocus={this.setCustomRange.bind(this)} + onFocus={this.setTypeCustomRange} > this.setCustomRange('rel', value)} key={RELATIVE_TIME_OPTIONS.LAST} eventKey={RELATIVE_TIME_OPTIONS.LAST} active={this.state.rel === RELATIVE_TIME_OPTIONS.LAST} >Last this.setCustomRange('rel', value)} key={RELATIVE_TIME_OPTIONS.NEXT} eventKey={RELATIVE_TIME_OPTIONS.NEXT} active={this.state.rel === RELATIVE_TIME_OPTIONS.NEXT} @@ -267,11 +328,9 @@ export default class DateFilterControl extends React.Component { ( - this.setCustomRange.call(this, 'num', event.target.value) - )} - onFocus={this.setCustomRange.bind(this)} - onKeyPress={this.onEnter.bind(this)} + onChange={event => this.setCustomRange('num', event.target.value)} + onFocus={this.setTypeCustomRange} + onKeyPress={this.onEnter} value={this.state.num} style={{ height: '30px' }} /> @@ -282,7 +341,7 @@ export default class DateFilterControl extends React.Component { componentClass={InputGroup.Button} id="input-dropdown-grain" title={this.state.grain} - onFocus={this.setCustomRange.bind(this)} + onFocus={this.setTypeCustomRange} > {grainOptions} @@ -292,48 +351,37 @@ export default class DateFilterControl extends React.Component {
{ this.startEndSectionRef = ref; }}>
- { this.dateTimeFieldRefs.since = ref; }} - dateTime={ - this.state.freeformInputs.since ? - DEFAULT_SINCE : - this.state.since - } - defaultText={this.state.since} - onChange={this.setCustomStartEnd.bind(this, 'since')} - maxDate={moment(this.state.until, MOMENT_FORMAT)} - format={MOMENT_FORMAT} - inputFormat={MOMENT_FORMAT} - onClick={this.setCustomStartEnd.bind(this)} - inputProps={{ - onKeyPress: this.onEnter.bind(this), - onFocus: this.setCustomStartEnd.bind(this), - }} + this.setCustomStartEnd('since', value)} + isValidDate={this.isValidSince} + onClick={this.setTypeCustomStartEnd} + renderInput={props => this.renderInput(props, 'showSinceCalendar')} + open={this.state.showSinceCalendar} + viewMode={this.state.sinceViewMode} + onViewModeChange={sinceViewMode => this.setState({ sinceViewMode })} />
- { this.dateTimeFieldRefs.until = ref; }} - dateTime={ - this.state.freeformInputs.until ? - DEFAULT_UNTIL : - this.state.until - } - defaultText={this.state.until} - onChange={this.setCustomStartEnd.bind(this, 'until')} - minDate={moment(this.state.since, MOMENT_FORMAT).add(1, 'days')} - format={MOMENT_FORMAT} - inputFormat={MOMENT_FORMAT} - inputProps={{ - onKeyPress: this.onEnter.bind(this), - onFocus: this.setCustomStartEnd.bind(this), - }} + this.setCustomStartEnd('until', value)} + isValidDate={this.isValidUntil} + onClick={this.setTypeCustomStartEnd} + renderInput={props => this.renderInput(props, 'showUntilCalendar')} + open={this.state.showUntilCalendar} + viewMode={this.state.untilViewMode} + onViewModeChange={untilViewMode => this.setState({ untilViewMode })} />
@@ -347,7 +395,7 @@ export default class DateFilterControl extends React.Component { bsSize="small" className="float-right ok" bsStyle="primary" - onClick={this.close.bind(this)} + onClick={this.close} > Ok diff --git a/superset/assets/src/explore/components/controls/HiddenControl.jsx b/superset/assets/src/explore/components/controls/HiddenControl.jsx index 3b1f44547676b..0fa7a4430495e 100644 --- a/superset/assets/src/explore/components/controls/HiddenControl.jsx +++ b/superset/assets/src/explore/components/controls/HiddenControl.jsx @@ -7,6 +7,7 @@ const propTypes = { value: PropTypes.oneOfType([ PropTypes.string, PropTypes.number, + PropTypes.object, ]), }; diff --git a/superset/assets/src/explore/components/controls/SliderControl.jsx b/superset/assets/src/explore/components/controls/SliderControl.jsx new file mode 100644 index 0000000000000..eee6fa524c287 --- /dev/null +++ b/superset/assets/src/explore/components/controls/SliderControl.jsx @@ -0,0 +1,35 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import BootstrapSliderWrapper from '../../../components/BootstrapSliderWrapper'; +import ControlHeader from '../ControlHeader'; + +const propTypes = { + onChange: PropTypes.func, + value: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + ]), +}; + +const defaultProps = { + onChange: () => {}, +}; + +export default function SliderControl(props) { + // This wouldn't be necessary but might as well + return ( +
+ + { + props.onChange(obj.target.value); + }} + /> +
+ ); +} + +SliderControl.propTypes = propTypes; +SliderControl.defaultProps = defaultProps; diff --git a/superset/assets/src/explore/components/controls/SpatialControl.jsx b/superset/assets/src/explore/components/controls/SpatialControl.jsx index 97e6b0c3e4f12..dac5cb9ca8b96 100644 --- a/superset/assets/src/explore/components/controls/SpatialControl.jsx +++ b/superset/assets/src/explore/components/controls/SpatialControl.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import { Row, Col, Button, Label, OverlayTrigger, Popover, } from 'react-bootstrap'; -import 'react-datetime/css/react-datetime.css'; import ControlHeader from '../ControlHeader'; import SelectControl from './SelectControl'; diff --git a/superset/assets/src/explore/components/controls/index.js b/superset/assets/src/explore/components/controls/index.js index 4a2df4237bc2e..cc9651faf6996 100644 --- a/superset/assets/src/explore/components/controls/index.js +++ b/superset/assets/src/explore/components/controls/index.js @@ -10,6 +10,7 @@ import FixedOrMetricControl from './FixedOrMetricControl'; import HiddenControl from './HiddenControl'; import SelectAsyncControl from './SelectAsyncControl'; import SelectControl from './SelectControl'; +import SliderControl from './SliderControl'; import SpatialControl from './SpatialControl'; import TextAreaControl from './TextAreaControl'; import TextControl from './TextControl'; @@ -32,6 +33,7 @@ const controlMap = { HiddenControl, SelectAsyncControl, SelectControl, + SliderControl, SpatialControl, TextAreaControl, TextControl, diff --git a/superset/assets/src/explore/controls.jsx b/superset/assets/src/explore/controls.jsx index 68fcb05c29010..d2ee20b11ebb8 100644 --- a/superset/assets/src/explore/controls.jsx +++ b/superset/assets/src/explore/controls.jsx @@ -242,6 +242,14 @@ export const controls = { renderTrigger: true, }, + target_color_picker: { + label: t('Target Color'), + description: t('Color of the target location'), + type: 'ColorPickerControl', + default: colorPrimary, + renderTrigger: true, + }, + legend_position: { label: t('Legend Position'), description: t('Choose the position of the legend'), @@ -249,6 +257,7 @@ export const controls = { clearable: false, default: 'tr', choices: [ + [null, 'None'], ['tl', 'Top left'], ['tr', 'Top right'], ['bl', 'Bottom left'], @@ -725,6 +734,7 @@ export const controls = { label: t('Stroke Width'), validators: [v.integer], default: null, + renderTrigger: true, choices: formatSelectOptions([1, 2, 3, 4, 5]), }, @@ -1298,7 +1308,7 @@ export const controls = { label: t('Rotation'), choices: formatSelectOptions(['random', 'flat', 'square']), renderTrigger: true, - default: 'square', + default: 'flat', description: t('Rotation to apply to words in the cloud'), }, @@ -1459,10 +1469,10 @@ export const controls = { table_filter: { type: 'CheckboxControl', - label: t('Table Filter'), + label: t('Emit Filter Events'), renderTrigger: true, default: false, - description: t('Whether to apply filter when table cell is clicked'), + description: t('Whether to apply filter when items are clicked'), }, align_pn: { @@ -1505,6 +1515,43 @@ export const controls = { description: t('Send range filter events to other charts'), }, + propagate_filter: { + type: 'CheckboxControl', + label: t('Propagate'), + renderTrigger: true, + default: true, + description: t('Send filter events to other charts'), + }, + + toggle_zipcodes: { + type: 'CheckboxControl', + label: t('Multiple filtering'), + renderTrigger: true, + default: true, + description: t('Allow sending multiple ZIP codes as a filter event'), + }, + + num_categories: { + type: 'SelectControl', + multi: false, + freeForm: true, + label: t('Number of categories for legend'), + default: 5, + choices: formatSelectOptions([2, 3, 5, 10]), + description: t('How many categories should be shown in the legend.'), + renderTrigger: true, + }, + + break_points: { + type: 'SelectControl', + multi: true, + freeForm: true, + label: t('Category break points'), + choices: formatSelectOptions([]), + description: t('List of values for categorizing metric.'), + renderTrigger: true, + }, + show_labels: { type: 'CheckboxControl', label: t('Show Labels'), @@ -1766,6 +1813,17 @@ export const controls = { 'Between 0 and 1.'), }, + opacity: { + type: 'SliderControl', + label: t('Opacity'), + default: 80, + step: 1, + min: 0, + max: 100, + renderTrigger: true, + description: t('Opacity, expects values between 0 and 100'), + }, + viewport: { type: 'ViewportControl', label: t('Viewport'), @@ -1780,28 +1838,37 @@ export const controls = { viewport_zoom: { type: 'TextControl', label: t('Zoom'), + renderTrigger: true, isFloat: true, default: 11, description: t('Zoom level of the map'), places: 8, + // Viewport zoom shouldn't prompt user to re-run query + dontRefreshOnChange: true, }, viewport_latitude: { type: 'TextControl', label: t('Default latitude'), + renderTrigger: true, default: 37.772123, isFloat: true, description: t('Latitude of default viewport'), places: 8, + // Viewport latitude changes shouldn't prompt user to re-run query + dontRefreshOnChange: true, }, viewport_longitude: { type: 'TextControl', label: t('Default longitude'), + renderTrigger: true, default: -122.405293, isFloat: true, description: t('Longitude of default viewport'), places: 8, + // Viewport longitude changes shouldn't prompt user to re-run query + dontRefreshOnChange: true, }, render_while_dragging: { @@ -2110,6 +2177,7 @@ export const controls = { choices: [ ['polyline', 'Polyline'], ['json', 'JSON'], + ['geohash', 'geohash (square)'], ], }, @@ -2231,7 +2299,7 @@ export const controls = { label: t('Filled'), renderTrigger: true, description: t('Whether to fill the objects'), - default: false, + default: true, }, normalized: { diff --git a/superset/assets/src/explore/visTypes.jsx b/superset/assets/src/explore/visTypes.jsx index 8e719817f214f..0ee2c8faf94cd 100644 --- a/superset/assets/src/explore/visTypes.jsx +++ b/superset/assets/src/explore/visTypes.jsx @@ -605,6 +605,14 @@ export const visTypes = { ], }, ], + controlOverrides: { + line_type: { + choices: [ + ['polyline', 'Polyline'], + ['json', 'JSON'], + ], + }, + }, }, deck_screengrid: { @@ -695,6 +703,57 @@ export const visTypes = { ], }, + deck_zipcodes: { + label: t('Deck.gl - Zip codes'), + requiresTime: true, + controlPanelSections: [ + { + label: t('Query'), + expanded: true, + controlSetRows: [ + ['groupby', 'size'], + ['autozoom', 'filter_nulls'], + ['color_picker', 'legend_position'], + ['num_categories', 'break_points'], + ['row_limit', null], + ['adhoc_filters'], + ['propagate_filter', 'toggle_zipcodes'], + ], + }, + { + label: t('Map'), + controlSetRows: [ + ['mapbox_style', 'viewport'], + ], + }, + { + label: t('Advanced'), + controlSetRows: [ + ['js_columns'], + ['js_data_mutator'], + ['js_tooltip'], + ['js_onclick_href'], + ], + }, + ], + controlOverrides: { + adhoc_filters: { + validators: [v.nonEmpty], + }, + groupby: { + multi: false, + label: t('ZIP code'), + description: t('Column with ZIP codes'), + }, + size: { + label: t('Weight'), + description: t("Metric used as a weight for the grid's coloring"), + validators: [v.nonEmpty], + }, + time_grain_sqla: timeGrainSqlaAnimationOverrides, + }, + }, + deck_polygon: { label: t('Deck.gl - Polygon'), requiresTime: true, @@ -703,25 +762,31 @@ export const visTypes = { label: t('Query'), expanded: true, controlSetRows: [ - ['line_column', 'line_type'], - ['row_limit', 'filter_nulls'], ['adhoc_filters'], + ['metric'], + ['row_limit', null], + ['line_column', 'line_type'], + ['reverse_long_lat', 'filter_nulls'], ], }, { label: t('Map'), + expanded: true, controlSetRows: [ ['mapbox_style', 'viewport'], - ['reverse_long_lat', null], + ['autozoom', null], ], }, { label: t('Polygon Settings'), + expanded: true, controlSetRows: [ ['fill_color_picker', 'stroke_color_picker'], ['filled', 'stroked'], ['extruded', null], - ['point_radius_scale', null], + ['line_width', null], + ['linear_color_scheme', 'opacity'], + ['table_filter', null], ], }, { @@ -734,6 +799,17 @@ export const visTypes = { ], }, ], + controlOverrides: { + metric: { + validators: [], + }, + line_column: { + label: t('Polygon Column'), + }, + line_type: { + label: t('Polygon Encoding'), + }, + }, }, deck_arc: { @@ -759,9 +835,9 @@ export const visTypes = { { label: t('Arc'), controlSetRows: [ - ['color_picker', 'legend_position'], + ['color_picker', 'target_color_picker'], ['dimension', 'color_scheme'], - ['stroke_width', null], + ['stroke_width', 'legend_position'], ], }, { @@ -1077,6 +1153,7 @@ export const visTypes = { ['metrics'], ['adhoc_filters'], ['groupby'], + ['row_limit'], ], }, { @@ -1718,6 +1795,7 @@ export const visTypes = { }, { label: t('Viewport'), + expanded: true, controlSetRows: [ ['viewport_longitude', 'viewport_latitude'], ['viewport_zoom', null], diff --git a/superset/assets/src/modules/colors.js b/superset/assets/src/modules/colors.js index 0bb3221080d11..1cb9eed4e85ec 100644 --- a/superset/assets/src/modules/colors.js +++ b/superset/assets/src/modules/colors.js @@ -525,6 +525,16 @@ export const spectrums = { ], }; +export function hexToRGB(hex, alpha = 255) { + if (!hex) { + return [0, 0, 0, alpha]; + } + const r = parseInt(hex.slice(1, 3), 16); + const g = parseInt(hex.slice(3, 5), 16); + const b = parseInt(hex.slice(5, 7), 16); + return [r, g, b, alpha]; +} + /** * Get a color from a scheme specific palette (scheme) * The function cycles through the palette while memoizing labels @@ -566,7 +576,7 @@ export const getColorFromScheme = (function () { }; }()); -export const colorScalerFactory = function (colors, data, accessor, extents) { +export const colorScalerFactory = function (colors, data, accessor, extents, outputRGBA = false) { // Returns a linear scaler our of an array of color if (!Array.isArray(colors)) { /* eslint no-param-reassign: 0 */ @@ -581,15 +591,9 @@ export const colorScalerFactory = function (colors, data, accessor, extents) { } const chunkSize = (ext[1] - ext[0]) / (colors.length - 1); const points = colors.map((col, i) => ext[0] + (i * chunkSize)); - return d3.scale.linear().domain(points).range(colors).clamp(true); -}; - -export function hexToRGB(hex, alpha = 255) { - if (!hex) { - return [0, 0, 0, alpha]; + const scaler = d3.scale.linear().domain(points).range(colors).clamp(true); + if (outputRGBA) { + return v => hexToRGB(scaler(v)); } - const r = parseInt(hex.slice(1, 3), 16); - const g = parseInt(hex.slice(3, 5), 16); - const b = parseInt(hex.slice(5, 7), 16); - return [r, g, b, alpha]; -} + return scaler; +}; diff --git a/superset/assets/src/modules/time.js b/superset/assets/src/modules/time.js index 7ebc4d77668ab..8b9437fe86f34 100644 --- a/superset/assets/src/modules/time.js +++ b/superset/assets/src/modules/time.js @@ -1,38 +1,106 @@ -import parseIsoDuration from 'parse-iso-duration'; +import moment from 'moment'; +// array with the minimum values of each part of a timestamp -- note that +// months are zero-indexed in Javascript +const truncatePartTo = [ + 1, // year + 0, // month + 1, // day + 0, // hour + 0, // minute + 0, // second + 0, // millisecond +]; + + +export function truncate(timestamp, step) { + /* + * Truncate timestamp down to duration resolution. + */ + const lowerBound = moment(timestamp).subtract(step); + const explodedTimestamp = timestamp.toArray(); + const explodedLowerBound = lowerBound.toArray(); + + const firstDiffIndex = explodedTimestamp + .map((part, i) => (explodedLowerBound[i] !== part)) + .indexOf(true); + const dateParts = explodedTimestamp.map((part, i) => { + if (i === firstDiffIndex) { + // truncate down to closest `truncatePartTo[i] + n * step` + const difference = part - explodedLowerBound[i]; + return part - ((part - truncatePartTo[i]) % difference); + } else if (i < firstDiffIndex || firstDiffIndex === -1) { + return part; + } + return truncatePartTo[i]; + }); + + return moment(dateParts); +} + +function getStepSeconds(step, start) { + /* Return number of seconds in a step. + * + * The step might be ambigous, eg, "1 month" has a variable number of + * seconds, which is why we need to know the start time. + */ + const startMillliseconds = parseInt(moment(start).format('x'), 10); + const endMilliseconds = parseInt(moment(start).add(step).format('x'), 10); + return endMilliseconds - startMillliseconds; +} + export const getPlaySliderParams = function (timestamps, timeGrain) { - let start = Math.min(...timestamps); - let end = Math.max(...timestamps); + const minTimestamp = moment(Math.min(...timestamps)); + const maxTimestamp = moment(Math.max(...timestamps)); let step; + let reference; - if (timeGrain.indexOf('/') > 0) { + if (timeGrain.indexOf('/') !== -1) { // Here, time grain is a time interval instead of a simple duration, either // `reference/duration` or `duration/reference`. We need to parse the // duration and make sure that start and end are in the right places. For // example, if `reference` is a Saturday and `duration` is 1 week (P1W) // then both start and end should be Saturdays. const parts = timeGrain.split('/', 2); - let reference; if (parts[0].endsWith('Z')) { // ISO string - reference = new Date(parts[0]).getTime(); - step = parseIsoDuration(parts[1]); + reference = moment(parts[0]); + step = moment.duration(parts[1]); } else { - reference = new Date(parts[1]).getTime(); - step = parseIsoDuration(parts[0]); + reference = moment(parts[1]); + step = moment.duration(parts[0]); } - start = reference + step * Math.floor((start - reference) / step); - end = reference + step * (Math.floor((end - reference) / step) + 1); } else { - // lock start and end to the closest steps - step = parseIsoDuration(timeGrain); - start -= start % step; - end += step - end % step; + step = moment.duration(timeGrain); + reference = truncate(minTimestamp, step); } - const values = timeGrain != null ? [start, start + step] : [start, end]; + // find the largest `reference + n * step` smaller than the minimum timestamp + const start = moment(reference); + while (start < minTimestamp) { + start.add(step); + } + while (start > minTimestamp) { + start.subtract(step); + } + + // find the smallest `reference + n * step` larger than the maximum timestamp + const end = moment(reference); + while (end > maxTimestamp) { + end.subtract(step); + } + while (end < maxTimestamp) { + end.add(step); + } + + const values = timeGrain != null ? [start, moment(start).add(step)] : [start, end]; const disabled = timestamps.every(timestamp => timestamp === null); - return { start, end, step, values, disabled }; + return { + start: parseInt(start.format('x'), 10), + end: parseInt(end.format('x'), 10), + getStep: getStepSeconds.bind(this, step), + values: values.map(v => parseInt(v.format('x'), 10)), + disabled, + }; }; - diff --git a/superset/assets/src/modules/utils.js b/superset/assets/src/modules/utils.js index c5d4e75450ae9..8fb77cc79f12e 100644 --- a/superset/assets/src/modules/utils.js +++ b/superset/assets/src/modules/utils.js @@ -231,10 +231,17 @@ export function customizeToolTip(chart, xAxisFormatter, yAxisFormatters) { }); } +export function getCSRFToken() { + if (document && document.getElementById('csrf_token')) { + return document.getElementById('csrf_token').value; + } + return ''; +} + export function initJQueryAjax() { // Works in conjunction with a Flask-WTF token as described here: // http://flask-wtf.readthedocs.io/en/stable/csrf.html#javascript-requests - const token = $('input#csrf_token').val(); + const token = getCSRFToken(); if (token) { $.ajaxSetup({ beforeSend(xhr, settings) { diff --git a/superset/assets/src/tags.js b/superset/assets/src/tags.js new file mode 100644 index 0000000000000..8c0e7dc884095 --- /dev/null +++ b/superset/assets/src/tags.js @@ -0,0 +1,114 @@ +import 'whatwg-fetch'; +import { getCSRFToken } from './modules/utils'; + +export function fetchTags(options, callback, error) { + if (options.objectType === undefined || options.objectId === undefined) { + throw new Error('Need to specify objectType and objectId'); + } + const objectType = options.objectType; + const objectId = options.objectId; + const includeTypes = options.includeTypes !== undefined ? options.includeTypes : false; + + const url = `/tagview/tags/${objectType}/${objectId}/`; + window.fetch(url) + .then((response) => { + if (response.ok) { + return response.json(); + } + throw new Error(response.text()); + }) + .then(json => callback( + json.filter(tag => tag.name.indexOf(':') === -1 || includeTypes))) + .catch(text => error(text)); +} + +export function fetchSuggestions(options, callback, error) { + const includeTypes = options.includeTypes !== undefined ? options.includeTypes : false; + window.fetch('/tagview/tags/suggestions/') + .then((response) => { + if (response.ok) { + return response.json(); + } + throw new Error(response.text()); + }) + .then(json => callback( + json.filter(tag => tag.name.indexOf(':') === -1 || includeTypes))) + .catch(text => error(text)); +} + +export function deleteTag(options, tag, callback, error) { + if (options.objectType === undefined || options.objectId === undefined) { + throw new Error('Need to specify objectType and objectId'); + } + const objectType = options.objectType; + const objectId = options.objectId; + + const url = `/tagview/tags/${objectType}/${objectId}/`; + const CSRF_TOKEN = getCSRFToken(); + window.fetch(url, { + body: JSON.stringify([tag]), + headers: { + 'content-type': 'application/json', + 'X-CSRFToken': CSRF_TOKEN, + }, + credentials: 'same-origin', + method: 'DELETE', + }) + .then((response) => { + if (response.ok) { + callback(response.text()); + } else { + error(response.text()); + } + }); +} + +export function addTag(options, tag, callback, error) { + if (options.objectType === undefined || options.objectId === undefined) { + throw new Error('Need to specify objectType and objectId'); + } + const objectType = options.objectType; + const objectId = options.objectId; + const includeTypes = options.includeTypes !== undefined ? options.includeTypes : false; + + if (tag.indexOf(':') !== -1 && !includeTypes) { + return; + } + const url = `/tagview/tags/${objectType}/${objectId}/`; + const CSRF_TOKEN = getCSRFToken(); + window.fetch(url, { + body: JSON.stringify([tag]), + headers: { + 'content-type': 'application/json', + 'X-CSRFToken': CSRF_TOKEN, + }, + credentials: 'same-origin', + method: 'POST', + }) + .then((response) => { + if (response.ok) { + callback(response.text()); + } else { + error(response.text()); + } + }); +} + +export function fetchObjects(options, callback) { + const tags = options.tags !== undefined ? options.tags : ''; + const types = options.types; + + let url = `/tagview/tagged_objects/?tags=${tags}`; + if (types) { + url += `&types=${types}`; + } + const CSRF_TOKEN = getCSRFToken(); + window.fetch(url, { + headers: { + 'X-CSRFToken': CSRF_TOKEN, + }, + credentials: 'same-origin', + }) + .then(response => response.json()) + .then(json => callback(json)); +} diff --git a/superset/assets/src/utils/common.js b/superset/assets/src/utils/common.js index c5bdfb9f6d53c..dac1bdf1fff0c 100644 --- a/superset/assets/src/utils/common.js +++ b/superset/assets/src/utils/common.js @@ -1,5 +1,7 @@ /* eslint global-require: 0 */ import $ from 'jquery'; +import URI from 'urijs'; +import { t } from '../locales'; const d3 = require('d3'); @@ -8,9 +10,6 @@ export const LUMINANCE_RED_WEIGHT = 0.2126; export const LUMINANCE_GREEN_WEIGHT = 0.7152; export const LUMINANCE_BLUE_WEIGHT = 0.0722; export const MILES_PER_KM = 1.60934; -export const DEFAULT_LONGITUDE = -122.405293; -export const DEFAULT_LATITUDE = 37.772123; -export const DEFAULT_ZOOM = 11; // Regexp for the label added to time shifted series (1 hour offset, 2 days offset, etc.) export const TIME_SHIFT_PATTERN = /\d+ \w+ offset/; @@ -90,11 +89,9 @@ export function getShortUrl(longUrl, callback, onError) { } export function supersetURL(rootUrl, getParams = {}) { - const url = new URL(rootUrl, window.location.origin); - for (const k in getParams) { - url.searchParams.set(k, getParams[k]); - } - return url.href; + const parsedUrl = new URI(rootUrl).absoluteTo(window.location.origin); + parsedUrl.search(getParams); + return parsedUrl.href(); } export function isTruthy(obj) { @@ -132,3 +129,8 @@ export function optionFromValue(opt) { // From a list of options, handles special values & labels return { value: optionValue(opt), label: optionLabel(opt) }; } + +// Error messages used in many places across applications +export const COMMON_ERR_MESSAGES = { + SESSION_TIMED_OUT: t('Your session timed out, please refresh your page and try again.'), +}; diff --git a/superset/assets/src/visualizations/BigNumber.jsx b/superset/assets/src/visualizations/BigNumber.jsx index f5c701d0acdae..62b2afb8c5063 100644 --- a/superset/assets/src/visualizations/BigNumber.jsx +++ b/superset/assets/src/visualizations/BigNumber.jsx @@ -231,14 +231,18 @@ BigNumberVis.defaultProps = defaultProps; function adaptor(slice, payload) { const { formData, containerId } = slice; const { data, subheader, compare_suffix: compareSuffix } = payload.data; - const { r, g, b } = formData.color_picker; const compareLag = Number(payload.data.compare_lag); const supportTrendline = formData.viz_type === 'big_number'; const showTrendline = supportTrendline && formData.show_trend_line; const startYAxisAtZero = formData.start_y_axis_at_zero; const formatValue = d3FormatPreset(formData.y_axis_format); const bigNumber = supportTrendline ? data[data.length - 1][1] : data[0][0]; - const userColor = color.rgb(r, g, b).hex(); + + let userColor = '#000'; + if (formData.color_picker) { + const { r, g, b } = formData.color_picker; + userColor = color.rgb(r, g, b).hex(); + } let percentChange = 0; let formattedSubheader = subheader; diff --git a/superset/assets/src/visualizations/Legend.jsx b/superset/assets/src/visualizations/Legend.jsx index 57bd430dc9d53..41f60b9bbd098 100644 --- a/superset/assets/src/visualizations/Legend.jsx +++ b/superset/assets/src/visualizations/Legend.jsx @@ -7,7 +7,7 @@ const propTypes = { categories: PropTypes.object, toggleCategory: PropTypes.func, showSingleCategory: PropTypes.func, - position: PropTypes.oneOf(['tl', 'tr', 'bl', 'br']), + position: PropTypes.oneOf([null, 'tl', 'tr', 'bl', 'br']), }; const defaultProps = { @@ -19,7 +19,7 @@ const defaultProps = { export default class Legend extends React.PureComponent { render() { - if (Object.keys(this.props.categories).length === 0) { + if (Object.keys(this.props.categories).length === 0 || this.props.position === null) { return null; } @@ -27,7 +27,7 @@ export default class Legend extends React.PureComponent { const style = { color: 'rgba(' + v.color.join(', ') + ')' }; const icon = v.enabled ? '\u25CF' : '\u25CB'; return ( -
  • +
  • this.props.toggleCategory(k)} diff --git a/superset/assets/src/visualizations/MapBox/MapBox.css b/superset/assets/src/visualizations/MapBox/MapBox.css new file mode 100644 index 0000000000000..3ec640dac6e99 --- /dev/null +++ b/superset/assets/src/visualizations/MapBox/MapBox.css @@ -0,0 +1,3 @@ +.mapbox .slice_container div { + padding-top: 0px; +} diff --git a/superset/assets/src/visualizations/MapBox/MapBox.jsx b/superset/assets/src/visualizations/MapBox/MapBox.jsx new file mode 100644 index 0000000000000..e6eb71a51b212 --- /dev/null +++ b/superset/assets/src/visualizations/MapBox/MapBox.jsx @@ -0,0 +1,205 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ReactDOM from 'react-dom'; +import MapGL from 'react-map-gl'; +import Immutable from 'immutable'; +import supercluster from 'supercluster'; +import ViewportMercator from 'viewport-mercator-project'; +import ScatterPlotGlowOverlay from './ScatterPlotGlowOverlay'; +import './MapBox.css'; + +const NOOP = () => {}; +const DEFAULT_POINT_RADIUS = 60; +const DEFAULT_MAX_ZOOM = 16; + +const propTypes = { + width: PropTypes.number, + height: PropTypes.number, + aggregatorName: PropTypes.string, + clusterer: PropTypes.object, + globalOpacity: PropTypes.number, + mapStyle: PropTypes.string, + mapboxApiKey: PropTypes.string, + onViewportChange: PropTypes.func, + pointRadius: PropTypes.number, + pointRadiusUnit: PropTypes.string, + renderWhileDragging: PropTypes.bool, + rgb: PropTypes.array, + bounds: PropTypes.array, +}; + +const defaultProps = { + globalOpacity: 1, + onViewportChange: NOOP, + pointRadius: DEFAULT_POINT_RADIUS, + pointRadiusUnit: 'Pixels', +}; + +class MapBox extends React.Component { + constructor(props) { + super(props); + + const { width, height, bounds } = this.props; + // Get a viewport that fits the given bounds, which all marks to be clustered. + // Derive lat, lon and zoom from this viewport. This is only done on initial + // render as the bounds don't update as we pan/zoom in the current design. + const mercator = new ViewportMercator({ + width, + height, + }).fitBounds(bounds); + const { latitude, longitude, zoom } = mercator; + // Compute the clusters based on the bounds. Again, this is only done once because + // we don't update the clusters as we pan/zoom in the current design. + const bbox = [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]]; + this.clusters = this.props.clusterer.getClusters(bbox, Math.round(zoom)); + + this.state = { + viewport: { + longitude, + latitude, + zoom, + }, + }; + this.onViewportChange = this.onViewportChange.bind(this); + } + + onViewportChange(viewport) { + this.setState({ viewport }); + this.props.onViewportChange(viewport); + } + + render() { + const { + width, + height, + aggregatorName, + globalOpacity, + mapStyle, + mapboxApiKey, + pointRadius, + pointRadiusUnit, + renderWhileDragging, + rgb, + } = this.props; + const { viewport } = this.state; + const isDragging = viewport.isDragging === undefined ? false : + viewport.isDragging; + return ( + + { + const coordinates = location.get('geometry').get('coordinates'); + return [coordinates.get(0), coordinates.get(1)]; + }} + /> + + ); + } +} + +MapBox.propTypes = propTypes; +MapBox.defaultProps = defaultProps; + +function createReducer(aggregatorName, customMetric) { + if (aggregatorName === 'sum' || !customMetric) { + return (a, b) => a + b; + } else if (aggName === 'min') { + return Math.min; + } else if (aggName === 'max') { + return Math.max; + } + return function (a, b) { + if (a instanceof Array) { + if (b instanceof Array) { + return a.concat(b); + } + a.push(b); + return a; + } + if (b instanceof Array) { + b.push(a); + return b; + } + return [a, b]; + }; +} + +function mapbox(slice, payload, setControlValue) { + const { formData, selector } = slice; + const { + customMetric, + geoJSON, + bounds, + mapboxApiKey, + } = payload.data; + const { + clustering_radius: clusteringRadius, + global_opacity: globalOpacity, + mapbox_color: color, + mapbox_style: mapStyle, + pandas_aggfunc: aggregatorName, + point_radius: pointRadius, + point_radius_unit: pointRadiusUnit, + render_while_dragging: renderWhileDragging, + } = formData; + + // Validate mapbox color + const rgb = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/ + .exec(color); + if (rgb === null) { + slice.error('Color field must be of form \'rgb(%d, %d, %d)\''); + return; + } + + const clusterer = supercluster({ + radius: clusteringRadius, + maxZoom: DEFAULT_MAX_ZOOM, + metricKey: 'metric', + metricReducer: createReducer(aggregatorName, customMetric), + }); + clusterer.load(geoJSON.features); + + ReactDOM.render( + { + setControlValue('viewport_longitude', longitude); + setControlValue('viewport_latitude', latitude); + setControlValue('viewport_zoom', zoom); + }} + pointRadius={pointRadius === 'Auto' ? DEFAULT_POINT_RADIUS : pointRadius} + pointRadiusUnit={pointRadiusUnit} + renderWhileDragging={renderWhileDragging} + rgb={rgb} + bounds={bounds} + />, + document.querySelector(selector), + ); +} + +export default mapbox; diff --git a/superset/assets/src/visualizations/mapbox.jsx b/superset/assets/src/visualizations/MapBox/ScatterPlotGlowOverlay.jsx similarity index 59% rename from superset/assets/src/visualizations/mapbox.jsx rename to superset/assets/src/visualizations/MapBox/ScatterPlotGlowOverlay.jsx index 1a156ae520e9d..ea4e115de3b00 100644 --- a/superset/assets/src/visualizations/mapbox.jsx +++ b/superset/assets/src/visualizations/MapBox/ScatterPlotGlowOverlay.jsx @@ -1,28 +1,46 @@ -/* eslint-disable no-param-reassign */ -/* eslint-disable react/no-multi-comp */ import d3 from 'd3'; +import Immutable from 'immutable'; import React from 'react'; import PropTypes from 'prop-types'; -import ReactDOM from 'react-dom'; -import MapGL from 'react-map-gl'; -import Immutable from 'immutable'; -import supercluster from 'supercluster'; import ViewportMercator from 'viewport-mercator-project'; - import { kmToPixels, rgbLuminance, isNumeric, MILES_PER_KM, - DEFAULT_LONGITUDE, - DEFAULT_LATITUDE, - DEFAULT_ZOOM, -} from '../utils/common'; -import './mapbox.css'; +} from '../../utils/common'; + +const propTypes = { + locations: PropTypes.instanceOf(Immutable.List).isRequired, + lngLatAccessor: PropTypes.func, + renderWhileDragging: PropTypes.bool, + globalOpacity: PropTypes.number, + dotRadius: PropTypes.number, + dotFill: PropTypes.string, + compositeOperation: PropTypes.string, +}; + +const defaultProps = { + lngLatAccessor: location => [location.get(0), location.get(1)], + renderWhileDragging: true, + dotRadius: 4, + dotFill: '#1FBAD6', + globalOpacity: 1, + // Same as browser default. + compositeOperation: 'source-over', +}; -const NOOP = () => {}; +const contextTypes = { + viewport: PropTypes.object, + isDragging: PropTypes.bool, +}; class ScatterPlotGlowOverlay extends React.Component { + constructor(props) { + super(props); + this.setCanvasRef = this.setCanvasRef.bind(this); + } + componentDidMount() { this.redraw(); } @@ -30,6 +48,11 @@ class ScatterPlotGlowOverlay extends React.Component { componentDidUpdate() { this.redraw(); } + + setCanvasRef(element) { + this.canvas = element; + } + drawText(ctx, pixel, options = {}) { const IS_DARK_THRESHOLD = 110; const { fontHeight = 0, label = '', radius = 0, rgb = [0, 0, 0], shadow = false } = options; @@ -62,8 +85,7 @@ class ScatterPlotGlowOverlay extends React.Component { redraw() { const props = this.props; const pixelRatio = window.devicePixelRatio || 1; - const canvas = this.refs.overlay; - const ctx = canvas.getContext('2d'); + const ctx = this.canvas.getContext('2d'); const radius = props.dotRadius; const mercator = new ViewportMercator(props); const rgb = props.rgb; @@ -185,9 +207,9 @@ class ScatterPlotGlowOverlay extends React.Component { } }, this); } - ctx.restore(); } + render() { let width = 0; let height = 0; @@ -198,11 +220,11 @@ class ScatterPlotGlowOverlay extends React.Component { const { globalOpacity } = this.props; const pixelRatio = window.devicePixelRatio || 1; return ( - React.createElement('canvas', { - ref: 'overlay', - width: width * pixelRatio, - height: height * pixelRatio, - style: { + [location.get(0), location.get(1)], - renderWhileDragging: true, - dotRadius: 4, - dotFill: '#1FBAD6', - globalOpacity: 1, - // Same as browser default. - compositeOperation: 'source-over', -}; -ScatterPlotGlowOverlay.contextTypes = { - viewport: PropTypes.object, - isDragging: PropTypes.bool, -}; - -class MapboxViz extends React.Component { - constructor(props) { - super(props); - const longitude = this.props.viewportLongitude || DEFAULT_LONGITUDE; - const latitude = this.props.viewportLatitude || DEFAULT_LATITUDE; - - this.state = { - viewport: { - longitude, - latitude, - zoom: this.props.viewportZoom || DEFAULT_ZOOM, - startDragLngLat: [longitude, latitude], - }, - }; - this.onViewportChange = this.onViewportChange.bind(this); - } - - onViewportChange(viewport) { - this.setState({ viewport }); - this.props.setControlValue('viewport_longitude', viewport.longitude); - this.props.setControlValue('viewport_latitude', viewport.latitude); - this.props.setControlValue('viewport_zoom', viewport.zoom); - } - - render() { - const mercator = new ViewportMercator({ - width: this.props.sliceWidth, - height: this.props.sliceHeight, - longitude: this.state.viewport.longitude, - latitude: this.state.viewport.latitude, - zoom: this.state.viewport.zoom, - }); - const topLeft = mercator.unproject([0, 0]); - const bottomRight = mercator.unproject([this.props.sliceWidth, this.props.sliceHeight]); - const bbox = [topLeft[0], bottomRight[1], bottomRight[0], topLeft[1]]; - const clusters = this.props.clusterer.getClusters(bbox, Math.round(this.state.viewport.zoom)); - const isDragging = this.state.viewport.isDragging === undefined ? false : - this.state.viewport.isDragging; - return ( - - - + }} + /> ); } } -MapboxViz.propTypes = { - aggregatorName: PropTypes.string, - clusterer: PropTypes.object, - setControlValue: PropTypes.func, - globalOpacity: PropTypes.number, - mapStyle: PropTypes.string, - mapboxApiKey: PropTypes.string, - pointRadius: PropTypes.number, - pointRadiusUnit: PropTypes.string, - renderWhileDragging: PropTypes.bool, - rgb: PropTypes.array, - sliceHeight: PropTypes.number, - sliceWidth: PropTypes.number, - viewportLatitude: PropTypes.number, - viewportLongitude: PropTypes.number, - viewportZoom: PropTypes.number, -}; - -function mapbox(slice, json, setControlValue) { - const div = d3.select(slice.selector); - const DEFAULT_POINT_RADIUS = 60; - const DEFAULT_MAX_ZOOM = 16; - // Validate mapbox color - const rgb = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/.exec(json.data.color); - if (rgb === null) { - slice.error('Color field must be of form \'rgb(%d, %d, %d)\''); - return; - } - - const aggName = json.data.aggregatorName; - let reducer; - - if (aggName === 'sum' || !json.data.customMetric) { - reducer = function (a, b) { - return a + b; - }; - } else if (aggName === 'min') { - reducer = Math.min; - } else if (aggName === 'max') { - reducer = Math.max; - } else { - reducer = function (a, b) { - if (a instanceof Array) { - if (b instanceof Array) { - return a.concat(b); - } - a.push(b); - return a; - } - if (b instanceof Array) { - b.push(a); - return b; - } - return [a, b]; - }; - } - - const clusterer = supercluster({ - radius: json.data.clusteringRadius, - maxZoom: DEFAULT_MAX_ZOOM, - metricKey: 'metric', - metricReducer: reducer, - }); - clusterer.load(json.data.geoJSON.features); - - div.selectAll('*').remove(); - ReactDOM.render( - , - div.node(), - ); -} +ScatterPlotGlowOverlay.propTypes = propTypes; +ScatterPlotGlowOverlay.defaultProps = defaultProps; +ScatterPlotGlowOverlay.contextTypes = contextTypes; -module.exports = mapbox; +export default ScatterPlotGlowOverlay; diff --git a/superset/assets/src/visualizations/PlaySlider.css b/superset/assets/src/visualizations/PlaySlider.css index df0fe77dba691..e4919db38fb89 100644 --- a/superset/assets/src/visualizations/PlaySlider.css +++ b/superset/assets/src/visualizations/PlaySlider.css @@ -5,14 +5,6 @@ margin: 0; } -.slider-selection { - background: #efefef; -} - -.slider-handle { - background: #b3b3b3; -} - .slider.slider-horizontal { width: 100% !important; } diff --git a/superset/assets/src/visualizations/PlaySlider.jsx b/superset/assets/src/visualizations/PlaySlider.jsx index 107aa55a4ab05..88b033524fa26 100644 --- a/superset/assets/src/visualizations/PlaySlider.jsx +++ b/superset/assets/src/visualizations/PlaySlider.jsx @@ -4,8 +4,7 @@ import { Row, Col } from 'react-bootstrap'; import Mousetrap from 'mousetrap'; -import 'bootstrap-slider/dist/css/bootstrap-slider.min.css'; -import ReactBootstrapSlider from 'react-bootstrap-slider'; +import BootrapSliderWrapper from '../components/BootstrapSliderWrapper'; import './PlaySlider.css'; import { t } from '../locales'; @@ -48,7 +47,8 @@ export default class PlaySlider extends React.PureComponent { this.onChange = this.onChange.bind(this); this.play = this.play.bind(this); this.pause = this.pause.bind(this); - this.step = this.step.bind(this); + this.stepBackward = this.stepBackward.bind(this); + this.stepForward = this.stepForward.bind(this); this.getPlayClass = this.getPlayClass.bind(this); this.formatter = this.formatter.bind(this); } @@ -77,7 +77,7 @@ export default class PlaySlider extends React.PureComponent { if (this.state.intervalId != null) { this.pause(); } else { - const id = setInterval(this.step, this.intervalMilliseconds); + const id = setInterval(this.stepForward, this.intervalMilliseconds); this.setState({ intervalId: id }); } } @@ -85,7 +85,7 @@ export default class PlaySlider extends React.PureComponent { clearInterval(this.state.intervalId); this.setState({ intervalId: null }); } - step() { + stepForward() { const { start, end, step, values, disabled } = this.props; if (disabled) { @@ -98,6 +98,19 @@ export default class PlaySlider extends React.PureComponent { this.props.onChange(nextValues.map(value => value - carriageReturn)); } + stepBackward() { + const { start, end, step, values, disabled } = this.props; + + if (disabled) { + return; + } + + const currentValues = Array.isArray(values) ? values : [values, values + step]; + const nextValues = currentValues.map(value => value - this.increment); + const carriageReturn = (nextValues[0] < start) ? (end - nextValues[1]) : 0; + + this.props.onChange(nextValues.map(value => value + carriageReturn)); + } formatter(values) { if (this.props.disabled) { return t('Data has no time steps'); @@ -116,11 +129,12 @@ export default class PlaySlider extends React.PureComponent { return ( + - + - {}, + onValuesChange: () => {}, }; export default class AnimatableDeckGLContainer extends React.Component { constructor(props) { super(props); - const { getLayers, start, end, step, values, disabled, viewport, ...other } = props; - this.state = { values, viewport }; + const { getLayers, start, end, getStep, values, disabled, viewport, ...other } = props; this.other = other; - this.onChange = this.onChange.bind(this); } componentWillReceiveProps(nextProps) { - this.setState({ values: nextProps.values, viewport: nextProps.viewport }); - } - onChange(newValues) { - this.setState({ - values: Array.isArray(newValues) - ? newValues - : [newValues, newValues + this.props.step], - }); + this.setState({ values: nextProps.values }); } render() { - const { start, end, step, disabled, aggregation, children, getLayers } = this.props; - const { values, viewport } = this.state; + const { + start, + end, + getStep, + disabled, + aggregation, + children, + getLayers, + values, + viewport, + } = this.props; const layers = getLayers(values); return (
    @@ -50,16 +54,16 @@ export default class AnimatableDeckGLContainer extends React.Component { {...this.other} viewport={viewport} layers={layers} - onViewportChange={newViewport => this.setState({ viewport: newViewport })} + onViewportChange={this.props.onViewportChange} /> {!disabled && } {children} diff --git a/superset/assets/src/visualizations/deckgl/CategoricalDeckGLContainer.jsx b/superset/assets/src/visualizations/deckgl/CategoricalDeckGLContainer.jsx index 39a202519b2ca..0d1394bab14f4 100644 --- a/superset/assets/src/visualizations/deckgl/CategoricalDeckGLContainer.jsx +++ b/superset/assets/src/visualizations/deckgl/CategoricalDeckGLContainer.jsx @@ -30,11 +30,11 @@ function getCategories(fd, data) { const propTypes = { slice: PropTypes.object.isRequired, - data: PropTypes.array.isRequired, mapboxApiKey: PropTypes.string.isRequired, setControlValue: PropTypes.func.isRequired, viewport: PropTypes.object.isRequired, getLayer: PropTypes.func.isRequired, + payload: PropTypes.object.isRequired, }; export default class CategoricalDeckGLContainer extends React.PureComponent { @@ -44,28 +44,32 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { * The container will have an interactive legend, populated from the * categories present in the data. */ - - /* eslint-disable-next-line react/sort-comp */ - static getDerivedStateFromProps(nextProps) { - const fd = nextProps.slice.formData; - - const timeGrain = fd.time_grain_sqla || fd.granularity || 'PT1M'; - const timestamps = nextProps.data.map(f => f.__timestamp); - const { start, end, step, values, disabled } = getPlaySliderParams(timestamps, timeGrain); - const categories = getCategories(fd, nextProps.data); - - return { start, end, step, values, disabled, categories }; - } constructor(props) { super(props); - this.state = CategoricalDeckGLContainer.getDerivedStateFromProps(props); + + const fd = props.payload.form_data; + const timeGrain = fd.time_grain_sqla || fd.granularity || 'PT1M'; + const timestamps = props.payload.data.features.map(f => f.__timestamp); + const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, timeGrain); + const categories = getCategories(fd, props.payload.data.features); + this.state = { start, end, getStep, values, disabled, categories, viewport: props.viewport }; this.getLayers = this.getLayers.bind(this); + this.onValuesChange = this.onValuesChange.bind(this); + this.onViewportChange = this.onViewportChange.bind(this); this.toggleCategory = this.toggleCategory.bind(this); this.showSingleCategory = this.showSingleCategory.bind(this); + this.onViewportChange = this.onViewportChange.bind(this); + } + onValuesChange(values) { + this.setState({ + values: Array.isArray(values) + ? values + : [values, values + this.state.getStep(values)], + }); } - componentWillReceiveProps(nextProps) { - this.setState(CategoricalDeckGLContainer.getDerivedStateFromProps(nextProps, this.state)); + onViewportChange(viewport) { + this.setState({ viewport }); } addColor(data, fd) { const c = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; @@ -81,32 +85,41 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { return { ...d, color }; }); } + onViewportChange(viewport) { + this.setState({ viewport }); + } getLayers(values) { - const fd = this.props.slice.formData; - let data = [...this.props.data]; + const { getLayer, payload, slice } = this.props; + const fd = slice.formData; + let features = [...payload.data.features]; // Add colors from categories or fixed color - data = this.addColor(data, fd); + features = this.addColor(features, fd); // Apply user defined data mutator if defined if (fd.js_data_mutator) { const jsFnMutator = sandboxedEval(fd.js_data_mutator); - data = jsFnMutator(data); + features = jsFnMutator(features); } // Filter by time if (values[0] === values[1] || values[1] === this.end) { - data = data.filter(d => d.__timestamp >= values[0] && d.__timestamp <= values[1]); + features = features.filter(d => d.__timestamp >= values[0] && d.__timestamp <= values[1]); } else { - data = data.filter(d => d.__timestamp >= values[0] && d.__timestamp < values[1]); + features = features.filter(d => d.__timestamp >= values[0] && d.__timestamp < values[1]); } // Show only categories selected in the legend if (fd.dimension) { - data = data.filter(d => this.state.categories[d.cat_color].enabled); + features = features.filter(d => this.state.categories[d.cat_color].enabled); } - return [this.props.getLayer(fd, data, this.props.slice)]; + const filteredPayload = { + ...payload, + data: { ...payload.data, features }, + }; + + return [getLayer(fd, filteredPayload, slice)]; } toggleCategory(category) { const categoryState = this.state.categories[category]; @@ -135,10 +148,12 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { getLayers={this.getLayers} start={this.state.start} end={this.state.end} - step={this.state.step} + getStep={this.state.getStep} values={this.state.values} + onValuesChange={this.onValuesChange} disabled={this.state.disabled} - viewport={this.props.viewport} + viewport={this.state.viewport} + onViewportChange={this.onViewportChange} mapboxApiAccessToken={this.props.mapboxApiKey} mapStyle={this.props.slice.formData.mapbox_style} setControlValue={this.props.setControlValue} diff --git a/superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx b/superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx index 1b7ca317cad39..435a541bbc693 100644 --- a/superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx +++ b/superset/assets/src/visualizations/deckgl/DeckGLContainer.jsx @@ -7,7 +7,7 @@ import 'mapbox-gl/dist/mapbox-gl.css'; const propTypes = { viewport: PropTypes.object.isRequired, layers: PropTypes.array.isRequired, - setControlValue: PropTypes.func.isRequired, + setControlValue: PropTypes.func, mapStyle: PropTypes.string, mapboxApiAccessToken: PropTypes.string.isRequired, onViewportChange: PropTypes.func, @@ -15,6 +15,7 @@ const propTypes = { const defaultProps = { mapStyle: 'light', onViewportChange: () => {}, + setControlValue: () => {}, }; export default class DeckGLContainer extends React.Component { diff --git a/superset/assets/src/visualizations/deckgl/layers/arc.jsx b/superset/assets/src/visualizations/deckgl/layers/arc.jsx index b17e357326c80..883ffbd6c68fd 100644 --- a/superset/assets/src/visualizations/deckgl/layers/arc.jsx +++ b/superset/assets/src/visualizations/deckgl/layers/arc.jsx @@ -18,10 +18,15 @@ function getPoints(data) { return points; } -function getLayer(fd, data, slice) { +function getLayer(fd, payload, slice) { + const data = payload.data.features; + const sc = fd.color_picker; + const tc = fd.target_color_picker; return new ArcLayer({ id: `path-layer-${fd.slice_id}`, data, + getSourceColor: d => d.sourceColor || d.color || [sc.r, sc.g, sc.b, 255 * sc.a], + getTargetColor: d => d.targetColor || d.color || [tc.r, tc.g, tc.b, 255 * tc.a], strokeWidth: (fd.stroke_width) ? fd.stroke_width : 3, ...common.commonLayerProps(fd, slice), }); @@ -36,17 +41,17 @@ function deckArc(slice, payload, setControlValue) { }; if (fd.autozoom) { - viewport = common.fitViewport(viewport, getPoints(payload.data.arcs)); + viewport = common.fitViewport(viewport, getPoints(payload.data.features)); } ReactDOM.render( , document.getElementById(slice.containerId), ); diff --git a/superset/assets/src/visualizations/deckgl/layers/common.js b/superset/assets/src/visualizations/deckgl/layers/common.jsx similarity index 65% rename from superset/assets/src/visualizations/deckgl/layers/common.js rename to superset/assets/src/visualizations/deckgl/layers/common.jsx index 6fb15dfd38944..b67ae7dcb12c7 100644 --- a/superset/assets/src/visualizations/deckgl/layers/common.js +++ b/superset/assets/src/visualizations/deckgl/layers/common.jsx @@ -1,4 +1,4 @@ -import dompurify from 'dompurify'; +import React from 'react'; import { fitBounds } from 'viewport-mercator-project'; import sandboxedEval from '../../../modules/sandbox'; @@ -34,12 +34,22 @@ export function fitViewport(viewport, points, padding = 10) { export function commonLayerProps(formData, slice) { const fd = formData; let onHover; + let tooltipContentGenerator; if (fd.js_tooltip) { - const jsTooltip = sandboxedEval(fd.js_tooltip); + tooltipContentGenerator = sandboxedEval(fd.js_tooltip); + } else if (fd.line_column && fd.line_type === 'geohash') { + tooltipContentGenerator = o => ( +
    +
    {fd.line_column}: {o.object[fd.line_column]}
    + {fd.metric && +
    {fd.metric}: {o.object[fd.metric]}
    } +
    ); + } + if (tooltipContentGenerator) { onHover = (o) => { if (o.picked) { slice.setTooltip({ - content: dompurify.sanitize(jsTooltip(o)), + content: tooltipContentGenerator(o), x: o.x, y: o.y, }); @@ -54,6 +64,8 @@ export function commonLayerProps(formData, slice) { const href = sandboxedEval(fd.js_onclick_href)(o); window.open(href); }; + } else if (fd.table_filter && fd.line_type === 'geohash') { + onClick = o => slice.addFilter(fd.line_column, [o.object[fd.line_column]], false); } return { onClick, diff --git a/superset/assets/src/visualizations/deckgl/layers/index.js b/superset/assets/src/visualizations/deckgl/layers/index.js index d8d25d5b0e91b..00e170a537e49 100644 --- a/superset/assets/src/visualizations/deckgl/layers/index.js +++ b/superset/assets/src/visualizations/deckgl/layers/index.js @@ -7,6 +7,7 @@ import { getLayer as deck_scatter } from './scatter'; import { getLayer as deck_geojson } from './geojson'; import { getLayer as deck_arc } from './arc'; import { getLayer as deck_polygon } from './polygon'; +import { getLayer as deck_zipcodes } from './zipcodes'; const layerGenerators = { deck_grid, @@ -17,5 +18,6 @@ const layerGenerators = { deck_geojson, deck_arc, deck_polygon, + deck_zipcodes, }; export default layerGenerators; diff --git a/superset/assets/src/visualizations/deckgl/layers/polygon.jsx b/superset/assets/src/visualizations/deckgl/layers/polygon.jsx index ae8a34c7bc7a2..c0ac6d0c35c07 100644 --- a/superset/assets/src/visualizations/deckgl/layers/polygon.jsx +++ b/superset/assets/src/visualizations/deckgl/layers/polygon.jsx @@ -2,19 +2,36 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { PolygonLayer } from 'deck.gl'; +import _ from 'underscore'; +import d3 from 'd3'; import DeckGLContainer from './../DeckGLContainer'; import * as common from './common'; +import { colorScalerFactory } from '../../../modules/colors'; import sandboxedEval from '../../../modules/sandbox'; +function getPoints(features) { + return _.flatten(features.map(d => d.polygon), true); +} + function getLayer(formData, payload, slice) { const fd = formData; const fc = fd.fill_color_picker; - let data = payload.data.features.map(d => ({ - ...d, - fillColor: [fc.r, fc.g, fc.b, 255 * fc.a], - })); + const sc = fd.stroke_color_picker; + let data = [...payload.data.features]; + const mainMetric = payload.data.metricLabels.length ? payload.data.metricLabels[0] : null; + + let colorScaler; + if (mainMetric) { + const ext = d3.extent(data, d => d[mainMetric]); + const scaler = colorScalerFactory(fd.linear_color_scheme, null, null, ext, true); + colorScaler = (d) => { + const c = scaler(d[mainMetric]); + c[3] = (fd.opacity / 100.0) * 255; + return c; + }; + } if (fd.js_data_mutator) { // Applying user defined data mutator if defined @@ -26,19 +43,29 @@ function getLayer(formData, payload, slice) { id: `path-layer-${fd.slice_id}`, data, filled: fd.filled, - stroked: fd.stoked, + stroked: fd.stroked, + getFillColor: colorScaler || [fc.r, fc.g, fc.b, 255 * fc.a], + getLineColor: [sc.r, sc.g, sc.b, 255 * sc.a], + getLineWidth: fd.line_width, extruded: fd.extruded, + fp64: true, ...common.commonLayerProps(fd, slice), }); } function deckPolygon(slice, payload, setControlValue) { const layer = getLayer(slice.formData, payload, slice); - const viewport = { + const fd = slice.formData; + let viewport = { ...slice.formData.viewport, width: slice.width(), height: slice.height(), }; + + if (fd.autozoom) { + viewport = common.fitViewport(viewport, getPoints(payload.data.features)); + } + ReactDOM.render( d.position); } -function getLayer(fd, data, slice) { - const dataWithRadius = data.map((d) => { +function getLayer(fd, payload, slice) { + const dataWithRadius = payload.data.features.map((d) => { let radius = unitToRadius(fd.point_unit, d.radius) || 10; if (fd.multiplier) { radius *= fd.multiplier; } - return { ...d, radius }; + if (d.color) { + return { ...d, radius }; + } + const c = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; + const color = [c.r, c.g, c.b, c.a * 255]; + return { ...d, radius, color }; }); return new ScatterplotLayer({ @@ -49,11 +54,11 @@ function deckScatter(slice, payload, setControlValue) { ReactDOM.render( , document.getElementById(slice.containerId), ); diff --git a/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx b/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx index 4ec6e8d77bc7f..e13a25387ea60 100644 --- a/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx +++ b/superset/assets/src/visualizations/deckgl/layers/screengrid.jsx @@ -59,24 +59,28 @@ const propTypes = { }; class DeckGLScreenGrid extends React.PureComponent { - /* eslint-disable-next-line react/sort-comp */ - static getDerivedStateFromProps(nextProps) { - const fd = nextProps.slice.formData; - - const timeGrain = fd.time_grain_sqla || fd.granularity || 'PT1M'; - const timestamps = nextProps.payload.data.features.map(f => f.__timestamp); - const { start, end, step, values, disabled } = getPlaySliderParams(timestamps, timeGrain); - - return { start, end, step, values, disabled }; - } constructor(props) { super(props); - this.state = DeckGLScreenGrid.getDerivedStateFromProps(props); + + const fd = props.slice.formData; + const timeGrain = fd.time_grain_sqla || fd.granularity || 'PT1M'; + const timestamps = props.payload.data.features.map(f => f.__timestamp); + const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, timeGrain); + this.state = { start, end, getStep, values, disabled, viewport: props.viewport }; this.getLayers = this.getLayers.bind(this); + this.onValuesChange = this.onValuesChange.bind(this); + this.onViewportChange = this.onViewportChange.bind(this); + } + onValuesChange(values) { + this.setState({ + values: Array.isArray(values) + ? values + : [values, values + this.state.getStep(values)], + }); } - componentWillReceiveProps(nextProps) { - this.setState(DeckGLScreenGrid.getDerivedStateFromProps(nextProps, this.state)); + onViewportChange(viewport) { + this.setState({ viewport }); } getLayers(values) { const filters = []; @@ -96,6 +100,9 @@ class DeckGLScreenGrid extends React.PureComponent { return [layer]; } + onViewportChange(viewport) { + this.setState({ viewport }); + } render() { return (
    @@ -103,10 +110,12 @@ class DeckGLScreenGrid extends React.PureComponent { getLayers={this.getLayers} start={this.state.start} end={this.state.end} - step={this.state.step} + getStep={this.state.getStep} values={this.state.values} + onValuesChange={this.onValuesChange} disabled={this.state.disabled} - viewport={this.props.viewport} + viewport={this.state.viewport} + onViewportChange={this.onViewportChange} mapboxApiAccessToken={this.props.payload.data.mapboxApiKey} mapStyle={this.props.slice.formData.mapbox_style} setControlValue={this.props.setControlValue} diff --git a/superset/assets/src/visualizations/deckgl/layers/zipcodes.jsx b/superset/assets/src/visualizations/deckgl/layers/zipcodes.jsx new file mode 100644 index 0000000000000..cd4381f478639 --- /dev/null +++ b/superset/assets/src/visualizations/deckgl/layers/zipcodes.jsx @@ -0,0 +1,310 @@ +/* eslint no-underscore-dangle: ["error", { "allow": ["", "__timestamp"] }] */ + +import React from 'react'; +import ReactDOM from 'react-dom'; +import PropTypes from 'prop-types'; + +import { GeoJsonLayer } from 'deck.gl'; + +import AnimatableDeckGLContainer from '../AnimatableDeckGLContainer'; +import Legend from '../../Legend'; + +import * as common from './common'; +import { getPlaySliderParams } from '../../../modules/time'; +import sandboxedEval from '../../../modules/sandbox'; + +const DOUBLE_CLICK_TRESHOLD = 250; // milliseconds + +function getPoints(geojson) { + const points = []; + Object.values(geojson).forEach((geometry) => { + geometry.coordinates.forEach((polygon) => { + polygon.forEach((coordinates) => { + coordinates.forEach((point) => { + points.push(point); + }); + }); + }); + }); + return points; +} + +function getRange(data) { + let minValue = Infinity; + let maxValue = -Infinity; + data.forEach((d) => { + if (d.zipcode !== '') { + minValue = Math.min(minValue, d.metric); + maxValue = Math.max(maxValue, d.metric); + } + }); + return [minValue, maxValue]; +} + +function getAlpha(value, breakPoints) { + const i = breakPoints.map(point => point >= value).indexOf(true); + return i === -1 ? 1 : i / (breakPoints.length - 1); +} + +function getBreakPoints(fd, features) { + if (fd.break_points === undefined || fd.break_points.length === 0) { + const numCategories = parseInt(fd.num_categories, 10); + const [minValue, maxValue] = getRange(features); + const delta = (maxValue - minValue) / numCategories; + const precision = Math.max(0, Math.floor(Math.log10(numCategories / delta))); + return Array(numCategories + 1) + .fill() + .map((_, i) => (minValue + i * delta).toFixed(precision)); + } + return fd.break_points.sort((a, b) => parseFloat(a) - parseFloat(b)); +} + +function getLayer(formData, payload, slice, selected, onSelect, filters) { + const fd = formData; + let data = payload.data.features.map(d => ({ ...d, geometry: payload.data.geojson[d.zipcode] })); + data = data.filter(d => d.geometry !== undefined); + + if (filters != null) { + filters.forEach((f) => { + data = data.filter(f); + }); + } + + const c = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; + const breakPoints = getBreakPoints(fd, payload.data.features); + data = data.map(d => ({ + ...d, + properties: { + color: [c.r, c.g, c.b, 255 * c.a * getAlpha(d.metric, breakPoints)], + metric: d.metric, + zipcode: d.zipcode, + }, + })); + + if (fd.js_data_mutator) { + // Applying user defined data mutator if defined + const jsFnMutator = sandboxedEval(fd.js_data_mutator); + data = jsFnMutator(data); + } + + const layerProps = common.commonLayerProps(fd, slice); + if (layerProps.onHover === undefined) { + layerProps.pickable = true; + layerProps.onHover = (o) => { + if (o.picked) { + slice.setTooltip({ + content: 'ZIP code: ' + o.object.zipcode + '
    Metric: ' + o.object.metric, + x: o.x, + y: o.y, + }); + } else { + slice.setTooltip(null); + } + }; + } + if (layerProps.onClick === undefined) { + layerProps.onClick = o => onSelect(o.object.zipcode); + } + + function getLineColor(d) { + if (selected.indexOf(d.properties.zipcode) === -1) { + return [0, 0, 0, 100]; + } + return [255, 0, 0, 100]; + } + + function getLineWidth(d) { + if (selected.indexOf(d.properties.zipcode) === -1) { + return 1; + } + return 10; + } + + return new GeoJsonLayer({ + id: `zipcodes-layer-${fd.slice_id}`, + data, + pickable: true, + stroked: true, + filled: true, + extruded: false, + lineWidthScale: 20, + lineWidthMinPixels: 1, + getFillColor: d => d.properties.color, + getLineColor, + getRadius: 100, + getLineWidth, + getElevation: 30, + ...layerProps, + }); +} + +function getCategories(features, fd) { + const color = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; + const breakPoints = getBreakPoints(fd, features); + const categories = {}; + breakPoints.slice(1).forEach((value, i) => { + const range = breakPoints[i] + ' - ' + breakPoints[i + 1]; + const alpha = (i + 1) / (breakPoints.length - 1); + categories[range] = { + color: [color.r, color.g, color.b, alpha], + enabled: true, + }; + }); + return categories; +} + +const propTypes = { + slice: PropTypes.object.isRequired, + payload: PropTypes.object.isRequired, + setControlValue: PropTypes.func.isRequired, + viewport: PropTypes.object.isRequired, +}; + +class DeckGLZipCodes extends React.PureComponent { + /* eslint-disable-next-line react/sort-comp */ + static getDerivedStateFromProps(nextProps) { + const fd = nextProps.slice.formData; + const features = nextProps.payload.data.features || []; + + const timeGrain = fd.time_grain_sqla || fd.granularity || 'PT1M'; + const timestamps = features.map(f => f.__timestamp); + const { start, end, getStep, values, disabled } = getPlaySliderParams(timestamps, timeGrain); + const categories = getCategories(features, fd); + + return { + start, + end, + getStep, + values, + disabled, + categories, + }; + } + constructor(props) { + super(props); + this.state = { + ...DeckGLZipCodes.getDerivedStateFromProps(props), + selected: [], + lastClick: 0, + viewport: this.props.viewport, + }; + + this.getLayers = this.getLayers.bind(this); + this.onSelect = this.onSelect.bind(this); + this.onViewportChange = this.onViewportChange.bind(this); + } + componentWillReceiveProps(nextProps) { + if (nextProps.payload !== this.props.payload) { + this.setState(DeckGLZipCodes.getDerivedStateFromProps(nextProps)); + } + } + getLayers(values) { + if (this.props.payload.data.features === undefined) { + return []; + } + + const filters = []; + + // time filter + if (values[0] === values[1] || values[1] === this.end) { + filters.push(d => d.__timestamp >= values[0] && d.__timestamp <= values[1]); + } else { + filters.push(d => d.__timestamp >= values[0] && d.__timestamp < values[1]); + } + + const layer = getLayer( + this.props.slice.formData, + this.props.payload, + this.props.slice, + this.state.selected, + this.onSelect, + filters); + + return [layer]; + } + onSelect(zipcode) { + const { slice } = this.props; + const fd = slice.formData; + + const now = new Date(); + const doubleClick = (now - this.state.lastClick) <= DOUBLE_CLICK_TRESHOLD; + + // toggle selected zipcodes + const selected = [...this.state.selected]; + if (doubleClick) { + selected.splice(0, selected.length, zipcode); + } else if (fd.toggle_zipcodes) { + const i = selected.indexOf(zipcode); + if (i === -1) { + selected.push(zipcode); + } else { + selected.splice(i, 1); + } + } else { + selected.splice(0, 1, zipcode); + } + + this.setState({ selected, lastClick: now }); + if (fd.propagate_filter) { + slice.addFilter(fd.groupby, selected, false, true); + } + } + onViewportChange(viewport) { + this.setState({ viewport }); + } + render() { + return ( +
    + + + +
    + ); + } +} + +DeckGLZipCodes.propTypes = propTypes; + +function deckZipCodes(slice, payload, setControlValue) { + const fd = slice.formData; + let viewport = { + ...fd.viewport, + width: slice.width(), + height: slice.height(), + }; + + if (fd.autozoom && payload.data.geojson) { + viewport = common.fitViewport(viewport, getPoints(payload.data.geojson)); + } + + ReactDOM.render( + , + document.getElementById(slice.containerId), + ); +} + +module.exports = { + default: deckZipCodes, + getLayer, +}; diff --git a/superset/assets/src/visualizations/deckgl/multi.jsx b/superset/assets/src/visualizations/deckgl/multi.jsx index 9bd80750a91d4..8b35c86768990 100644 --- a/superset/assets/src/visualizations/deckgl/multi.jsx +++ b/superset/assets/src/visualizations/deckgl/multi.jsx @@ -33,10 +33,11 @@ function deckMulti(slice, payload, setControlValue) { // Filters applied to multi_deck are passed down to underlying charts // note that dashboard contextual information (filter_immune_slices and such) aren't // taken into consideration here - let filters = subslice.form_data.filters.concat(fd.filters); - if (fd.extra_filters) { - filters = filters.concat(fd.extra_filters); - } + const filters = [ + ...(subslice.form_data.filters || []), + ...(fd.filters || []), + ...(fd.extra_filters || []), + ]; const subsliceCopy = { ...subslice, form_data: { diff --git a/superset/assets/src/visualizations/filter_box.jsx b/superset/assets/src/visualizations/filter_box.jsx index d059f82611aab..408abbe925d42 100644 --- a/superset/assets/src/visualizations/filter_box.jsx +++ b/superset/assets/src/visualizations/filter_box.jsx @@ -228,9 +228,6 @@ FilterBox.propTypes = propTypes; FilterBox.defaultProps = defaultProps; function filterBox(slice, payload) { - const d3token = d3.select(slice.selector); - d3token.selectAll('*').remove(); - // filter box should ignore the dashboard's filters // const url = slice.jsonEndpoint({ extraFilters: false }); const fd = slice.formData; diff --git a/superset/assets/src/visualizations/index.js b/superset/assets/src/visualizations/index.js index 098079ea500dd..f50c17f7d9a81 100644 --- a/superset/assets/src/visualizations/index.js +++ b/superset/assets/src/visualizations/index.js @@ -49,6 +49,7 @@ export const VIZ_TYPES = { deck_multi: 'deck_multi', deck_arc: 'deck_arc', deck_polygon: 'deck_polygon', + deck_zipcodes: 'deck_zipcodes', rose: 'rose', }; @@ -89,7 +90,7 @@ const vizMap = { [VIZ_TYPES.line_multi]: () => loadVis(import(/* webpackChunkName: "line_multi" */ './line_multi.js')), [VIZ_TYPES.time_pivot]: loadNvd3, - [VIZ_TYPES.mapbox]: () => loadVis(import(/* webpackChunkName: "mapbox" */ './mapbox.jsx')), + [VIZ_TYPES.mapbox]: () => loadVis(import(/* webpackChunkName: "mapbox" */ './MapBox/MapBox.jsx')), [VIZ_TYPES.markup]: () => loadVis(import(/* webpackChunkName: "markup" */ './markup.js')), [VIZ_TYPES.para]: () => loadVis(import(/* webpackChunkName: "parallel_coordinates" */ './parallel_coordinates.js')), @@ -136,6 +137,8 @@ const vizMap = { loadVis(import(/* webpackChunkName: "deckgl/layers/polygon" */ './deckgl/layers/polygon.jsx')), [VIZ_TYPES.deck_multi]: () => loadVis(import(/* webpackChunkName: "deckgl/multi" */ './deckgl/multi.jsx')), + [VIZ_TYPES.deck_zipcodes]: () => + loadVis(import(/* webpackChunkName: "deckgl/layers/zipcodes" */ './deckgl/layers/zipcodes.jsx')), [VIZ_TYPES.rose]: () => loadVis(import(/* webpackChunkName: "rose" */ './rose.js')), }; diff --git a/superset/assets/src/visualizations/mapbox.css b/superset/assets/src/visualizations/mapbox.css deleted file mode 100644 index babb33be0eace..0000000000000 --- a/superset/assets/src/visualizations/mapbox.css +++ /dev/null @@ -1,16 +0,0 @@ -.mapbox div.widget .slice_container { - cursor: grab; - cursor: -moz-grab; - cursor: -webkit-grab; - overflow: hidden; -} - -.mapbox div.widget .slice_container:active { - cursor: grabbing; - cursor: -moz-grabbing; - cursor: -webkit-grabbing; -} - -.mapbox .slice_container div { - padding-top: 0px; -} diff --git a/superset/assets/src/visualizations/nvd3_vis.js b/superset/assets/src/visualizations/nvd3_vis.js index 1baf5f576a0c1..8a7ed915f61df 100644 --- a/superset/assets/src/visualizations/nvd3_vis.js +++ b/superset/assets/src/visualizations/nvd3_vis.js @@ -517,6 +517,12 @@ export default function nvd3Vis(slice, payload) { // This is needed for correct chart dimensions if a chart is rendered in a hidden container chart.width(width); chart.height(height); + + //XXX: quick fix while I figure out the real problem + if (slice.container === null) { + return; + } + slice.container.css('height', height + 'px'); svg diff --git a/superset/assets/src/visualizations/pivot_table.js b/superset/assets/src/visualizations/pivot_table.js index fded4616b350a..1fcbb291813a1 100644 --- a/superset/assets/src/visualizations/pivot_table.js +++ b/superset/assets/src/visualizations/pivot_table.js @@ -35,6 +35,7 @@ module.exports = function (slice, payload) { const tdText = $(this)[0].textContent; if (!isNaN(tdText) && tdText !== '') { $(this)[0].textContent = d3format(format, tdText); + $(this).attr('data-sort', tdText); } }); }); diff --git a/superset/assets/src/visualizations/table.js b/superset/assets/src/visualizations/table.js index a715d19acbf6d..d1490ecc43166 100644 --- a/superset/assets/src/visualizations/table.js +++ b/superset/assets/src/visualizations/table.js @@ -185,9 +185,12 @@ function tableVis(slice, payload) { container.find('.dataTables_wrapper'), height); // Sorting table by main column let sortBy; - if (fd.timeseries_limit_metric) { + const limitMetric = Array.isArray(fd.timeseries_limit_metric) + ? fd.timeseries_limit_metric[0] + : fd.timeseries_limit_metric; + if (limitMetric) { // Sort by as specified - sortBy = fd.timeseries_limit_metric.label || fd.timeseries_limit_metric; + sortBy = limitMetric.label || limitMetric; } else if (metrics.length > 0) { // If not specified, use the first metric from the list sortBy = metrics[0]; diff --git a/superset/assets/src/visualizations/time_table.jsx b/superset/assets/src/visualizations/time_table.jsx index c34e5d01c7379..d2bf633e46f75 100644 --- a/superset/assets/src/visualizations/time_table.jsx +++ b/superset/assets/src/visualizations/time_table.jsx @@ -123,6 +123,7 @@ function viz(slice, payload) { } else if (column.comparisonType === 'perc_change') { v = (recent / v) - 1; } + v = v || 0; } else if (column.colType === 'contrib') { // contribution to column total v = recent / Object.keys(reversedData[0]) diff --git a/superset/assets/src/visualizations/word_cloud.js b/superset/assets/src/visualizations/word_cloud.js index 6fdd96237e1fa..5ef73e79cc273 100644 --- a/superset/assets/src/visualizations/word_cloud.js +++ b/superset/assets/src/visualizations/word_cloud.js @@ -33,11 +33,9 @@ function wordCloud(element, props) { colorScheme, } = props; - console.log('data', data); - const chart = d3.select(element); const size = [width, height]; - const rotationFn = ROTATION[rotation] || ROTATION.random; + const rotationFn = ROTATION[rotation] || ROTATION.flat; const scale = d3.scale.linear() .range(sizeRange) diff --git a/superset/assets/src/welcome/App.jsx b/superset/assets/src/welcome/App.jsx index 5c694de928441..d82174e539563 100644 --- a/superset/assets/src/welcome/App.jsx +++ b/superset/assets/src/welcome/App.jsx @@ -1,10 +1,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Panel, Row, Col, Tabs, Tab, FormControl } from 'react-bootstrap'; +import URI from 'urijs'; import RecentActivity from '../profile/components/RecentActivity'; import Favorites from '../profile/components/Favorites'; import DashboardTable from './DashboardTable'; +import SelectControl from '../explore/components/controls/SelectControl'; +import TagsTable from './TagsTable'; +import { fetchSuggestions } from '../tags'; import { t } from '../locales'; +import { STANDARD_TAGS } from '../dashboard/util/constants'; const propTypes = { user: PropTypes.object.isRequired, @@ -13,19 +18,60 @@ const propTypes = { export default class App extends React.PureComponent { constructor(props) { super(props); + + const parsedUrl = new URI(window.location); + const key = parsedUrl.fragment() || 'dashboards'; + const searchParams = parsedUrl.search(true); + const dashboardSearch = searchParams.search || ''; + const tagSearch = searchParams.tags || ''; this.state = { - search: '', + key, + dashboardSearch, + tagSearch, + tagSuggestions: STANDARD_TAGS, }; - this.onSearchChange = this.onSearchChange.bind(this); + + this.handleSelect = this.handleSelect.bind(this); + this.onDashboardSearchChange = this.onDashboardSearchChange.bind(this); + this.onTagSearchChange = this.onTagSearchChange.bind(this); + } + componentDidMount() { + fetchSuggestions({ includeTypes: false }, (suggestions) => { + const tagSuggestions = [ + ...STANDARD_TAGS, + ...suggestions.map(tag => tag.name), + ]; + this.setState({ tagSuggestions }); + }); + } + onDashboardSearchChange(event) { + const dashboardSearch = event.target.value; + this.setState({ dashboardSearch }, () => this.updateURL('search', dashboardSearch)); + } + onTagSearchChange(tags) { + const tagSearch = tags.join(','); + this.setState({ tagSearch }, () => this.updateURL('tags', tagSearch)); } - onSearchChange(event) { - this.setState({ search: event.target.value }); + updateURL(key, value) { + const parsedUrl = new URI(window.location); + parsedUrl.search(data => ({ ...data, [key]: value })); + window.history.pushState({ value }, value, parsedUrl.href()); + } + handleSelect(key) { + // store selected tab in URL + window.history.pushState({ tab: key }, key, `#${key}`); + + this.setState({ key }); } render() { return (
    - - + +

    {t('Dashboards')}

    @@ -35,16 +81,16 @@ export default class App extends React.PureComponent { bsSize="sm" style={{ marginTop: '25px' }} placeholder="Search" - value={this.state.search} - onChange={this.onSearchChange} + value={this.state.dashboardSearch} + onChange={this.onDashboardSearchChange} />

    - +
    - +

    {t('Recently Viewed')}

    @@ -53,7 +99,7 @@ export default class App extends React.PureComponent {
    - +

    {t('Favorites')}

    @@ -62,6 +108,26 @@ export default class App extends React.PureComponent {
    + + + +

    {t('Tags')}

    +
    + + + + + +
    + +
    +
    ); diff --git a/superset/assets/src/welcome/TagsTable.jsx b/superset/assets/src/welcome/TagsTable.jsx new file mode 100644 index 0000000000000..15040a84905c9 --- /dev/null +++ b/superset/assets/src/welcome/TagsTable.jsx @@ -0,0 +1,94 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import moment from 'moment'; +import { Table, Tr, Td, unsafe } from 'reactable'; +import 'whatwg-fetch'; + +import { fetchObjects } from '../tags'; +import Loading from '../components/Loading'; +import '../../stylesheets/reactable-pagination.css'; +import { t } from '../locales'; + +const propTypes = { + search: PropTypes.string, +}; + +const defaultProps = { + search: '', +}; + +export default class TagsTable extends React.PureComponent { + constructor(props) { + super(props); + this.state = { + objects: false, + }; + this.fetchResults = this.fetchResults.bind(this); + } + componentDidMount() { + this.fetchResults(this.props.search); + } + componentWillReceiveProps(newProps) { + if (this.props.search !== newProps.search) { + this.fetchResults(newProps.search); + } + } + fetchResults(search) { + fetchObjects({ tags: search, types: null }, (data) => { + const objects = { dashboard: [], chart: [], query: [] }; + data.forEach((object) => { + objects[object.type].push(object); + }); + this.setState({ objects }); + }); + } + renderTable(type) { + return ( + + {this.state.objects[type].map(o => ( + + + + + ))} +
    + {o.name} + + {unsafe(o.creator)} + + {unsafe(moment.utc(o.changed_on).fromNow())} +
    + ); + } + render() { + if (this.state.objects) { + return ( +
    +

    {t('Dashboards')}

    + {this.renderTable('dashboard')} +
    +

    {t('Charts')}

    + {this.renderTable('chart')} +
    +

    {t('Queries')}

    + {this.renderTable('query')} +
    + ); + } + return ; + } +} + +TagsTable.propTypes = propTypes; +TagsTable.defaultProps = defaultProps; diff --git a/superset/assets/stylesheets/superset.less b/superset/assets/stylesheets/superset.less index 566a4811d918e..ef729577446ae 100644 --- a/superset/assets/stylesheets/superset.less +++ b/superset/assets/stylesheets/superset.less @@ -230,6 +230,12 @@ table.table-no-hover tr:hover { cursor: initial; } +.editable-title input[type="text"] { + border: 1px solid #ccc; + border-radius: 2px; + padding: 2px; +} + .editable-title input[type="button"] { border-color: transparent; background: transparent; diff --git a/superset/assets/yarn.lock b/superset/assets/yarn.lock index 2f941b9301509..5ef8ce51abb7f 100644 --- a/superset/assets/yarn.lock +++ b/superset/assets/yarn.lock @@ -4,13 +4,15 @@ "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + resolved "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== dependencies: "@babel/highlight" "7.0.0-beta.44" "@babel/generator@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + resolved "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== dependencies: "@babel/types" "7.0.0-beta.44" jsesc "^2.5.1" @@ -20,7 +22,8 @@ "@babel/helper-function-name@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + resolved "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== dependencies: "@babel/helper-get-function-arity" "7.0.0-beta.44" "@babel/template" "7.0.0-beta.44" @@ -28,26 +31,29 @@ "@babel/helper-get-function-arity@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + resolved "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== dependencies: "@babel/types" "7.0.0-beta.44" "@babel/helper-module-imports@^7.0.0-beta.49": - version "7.0.0-beta.54" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.54.tgz#c2d8e14ff034225bf431356db77ef467b8d35aac" + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== dependencies: - "@babel/types" "7.0.0-beta.54" - lodash "^4.17.5" + "@babel/types" "^7.0.0" "@babel/helper-split-export-declaration@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + resolved "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== dependencies: "@babel/types" "7.0.0-beta.44" "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + resolved "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -55,7 +61,8 @@ "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + resolved "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" @@ -64,7 +71,8 @@ "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + resolved "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/generator" "7.0.0-beta.44" @@ -79,23 +87,53 @@ "@babel/types@7.0.0-beta.44": version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + resolved "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== dependencies: esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@7.0.0-beta.54", "@babel/types@^7.0.0-beta.49": +"@babel/types@7.0.0-beta.54": version "7.0.0-beta.54" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.54.tgz#025ad68492fed542c13f14c579a44c848e531063" + integrity sha1-AlrWhJL+1ULBPxTFeaRMhI5TEGM= dependencies: esutils "^2.0.2" lodash "^4.17.5" to-fast-properties "^2.0.0" +"@babel/types@^7.0.0-beta.49": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" + integrity sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@cypress/listr-verbose-renderer@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/xvfb@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.3.tgz#6319afdcdcff7d1505daeeaa84484d0596189860" + integrity sha512-yYrK+/bgL3hwoRHMZG4r5fyLniCy1pXex5fimtewAY6vE/jsVs8Q37UsEO03tFlcmiLnQ3rBNMaZBYTi/+C1cw== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + "@data-ui/event-flow@^0.0.54": version "0.0.54" - resolved "https://registry.yarnpkg.com/@data-ui/event-flow/-/event-flow-0.0.54.tgz#bb03e1fd2b5634248655b8df9d3c6c38a747e65e" + resolved "http://registry.npmjs.org/@data-ui/event-flow/-/event-flow-0.0.54.tgz#bb03e1fd2b5634248655b8df9d3c6c38a747e65e" + integrity sha1-uwPh/StWNCSGVbjfnTxsOKdH5l4= dependencies: "@data-ui/forms" "0.0.50" "@data-ui/radial-chart" "0.0.54" @@ -129,13 +167,15 @@ "@data-ui/forms@0.0.50": version "0.0.50" resolved "https://registry.yarnpkg.com/@data-ui/forms/-/forms-0.0.50.tgz#c55a699ee4b7cf44ff263d30784299c38d939932" + integrity sha1-xVppnuS3z0T/Jj0weEKZw42TmTI= dependencies: prop-types "^15.5.10" react-select "^1.0.0-rc.5" "@data-ui/radial-chart@0.0.54": version "0.0.54" - resolved "https://registry.yarnpkg.com/@data-ui/radial-chart/-/radial-chart-0.0.54.tgz#0d28b07681d9b6027d9ac23b729241827d513001" + resolved "http://registry.npmjs.org/@data-ui/radial-chart/-/radial-chart-0.0.54.tgz#0d28b07681d9b6027d9ac23b729241827d513001" + integrity sha1-DSiwdoHZtgJ9msI7cpJBgn1RMAE= dependencies: "@data-ui/shared" "0.0.54" "@data-ui/theme" "0.0.48" @@ -148,7 +188,8 @@ "@data-ui/shared@0.0.54": version "0.0.54" - resolved "https://registry.yarnpkg.com/@data-ui/shared/-/shared-0.0.54.tgz#2fb0d6dee90dac20bf8f3c2913c6850a8223d59b" + resolved "http://registry.npmjs.org/@data-ui/shared/-/shared-0.0.54.tgz#2fb0d6dee90dac20bf8f3c2913c6850a8223d59b" + integrity sha1-L7DW3ukNrCC/jzwpE8aFCoIj1Zs= dependencies: "@data-ui/theme" "0.0.48" "@vx/event" "0.0.143" @@ -161,6 +202,7 @@ "@data-ui/shared@^0.0.61": version "0.0.61" resolved "https://registry.yarnpkg.com/@data-ui/shared/-/shared-0.0.61.tgz#717a1a1f7bd606c0f51573e65b6acdda51a1252b" + integrity sha512-0GezDZVICwaCpYuvxKPxj1rb1TgDG62bo05cUUqg8163priTLnWTWkhjWscGU2S+AINs/iRE72tRJrFwhdpJBg== dependencies: "@data-ui/theme" "^0.0.61" "@vx/event" "^0.0.165" @@ -173,7 +215,8 @@ "@data-ui/sparkline@^0.0.54": version "0.0.54" - resolved "https://registry.yarnpkg.com/@data-ui/sparkline/-/sparkline-0.0.54.tgz#ce3d166d9e0b239a0ba02f3894cb9e8c84171cef" + resolved "http://registry.npmjs.org/@data-ui/sparkline/-/sparkline-0.0.54.tgz#ce3d166d9e0b239a0ba02f3894cb9e8c84171cef" + integrity sha1-zj0WbZ4LI5oLoC84lMuejIQXHO8= dependencies: "@data-ui/shared" "0.0.54" "@data-ui/theme" "0.0.8" @@ -194,20 +237,24 @@ "@data-ui/theme@0.0.48": version "0.0.48" resolved "https://registry.yarnpkg.com/@data-ui/theme/-/theme-0.0.48.tgz#f21532d13da7e6c5d725cadb0f5a76d746f3bd85" + integrity sha1-8hUy0T2n5sXXJcrbD1p210bzvYU= "@data-ui/theme@0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@data-ui/theme/-/theme-0.0.8.tgz#3116723d04b99f65c7750f81a500e9608b4837c3" + integrity sha1-MRZyPQS5n2XHdQ+BpQDpYItIN8M= "@data-ui/theme@^0.0.61": version "0.0.61" resolved "https://registry.yarnpkg.com/@data-ui/theme/-/theme-0.0.61.tgz#2a792da6c384d08553d1794bdb16ce633bc02cbd" + integrity sha512-Mnu1XGIXHC2GTgi1E5suA/QtkLzeZtvoVLSH1V2Tbg+SmwiLDQfJEh59GoJHuaHr0hy5DHx/FRXHSzAPTNvh6w== dependencies: babel-runtime "^6.26.0" "@data-ui/xy-chart@^0.0.61": version "0.0.61" resolved "https://registry.yarnpkg.com/@data-ui/xy-chart/-/xy-chart-0.0.61.tgz#ee4e47913116a03a7bc4fc0ff1b0d815f80ee736" + integrity sha512-/661bNBjfKIfmxjHYuPNPuOx+GTWzH8yt6mzOqms6fMt6cWwZ48d6Eo/+T7d8EJXd+fQmZl0BO5o9TARmcnq6Q== dependencies: "@data-ui/shared" "^0.0.61" "@data-ui/theme" "^0.0.61" @@ -230,9 +277,10 @@ d3-array "^1.2.0" prop-types "^15.5.10" -"@deck.gl/core@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-5.3.1.tgz#acfc1e5fefd3b12e9142419b0aeb77c07885626c" +"@deck.gl/core@^5.3.3": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-5.3.3.tgz#a13c07e5fa3e22297fd450d6da8ab9aac334b1f0" + integrity sha512-1a4me1QRM3/wzEVzZRAflX/Uh67gE9/3fWjl35iVY7lvNrCP0wl2PUfaQkmeThTa4Sp/Qq24ZTpHx1QvkQYH8g== dependencies: luma.gl "^5.3.0" math.gl "^1.2.1" @@ -241,68 +289,81 @@ seer "^0.2.4" viewport-mercator-project "^5.1.0" -"@deck.gl/layers@^5.3.2": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-5.3.2.tgz#c76b9a7890305a5d6a0fdd56bd0d0d68d4046f6f" +"@deck.gl/layers@^5.3.4": + version "5.3.4" + resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-5.3.4.tgz#ab3de1bf8bb68d67772642acbb4e0f87f4f11300" + integrity sha512-P4z5YAjsyoBMZ+fytCEvDgDauWLOZApRafvr+CaXFW6q8SyaHKs5sTtUDesJmf/WUWspcpM1Ip/MW5XuS5Edhg== dependencies: - "@deck.gl/core" "^5.3.1" + "@deck.gl/core" "^5.3.3" d3-hexbin "^0.2.1" earcut "^2.0.6" -"@deck.gl/react@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-5.3.1.tgz#0c16fac59061924eb3509dea06c837bcef8044f2" +"@deck.gl/react@^5.3.3": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-5.3.3.tgz#e7352934f6742d3ce672a394cbff312aab5ccaa0" + integrity sha512-pbGs7azRcuZgtpoMl6ZnAzKrlYM3C42UXdJxbhpzJLEm5xvZPQO/L8ea8bi94hzs2XmADyUUW4Vwt+bdexZLNg== dependencies: - "@deck.gl/core" "^5.3.1" + "@deck.gl/core" "^5.3.3" prop-types "^15.6.0" "@mapbox/geojson-area@0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA= dependencies: wgs84 "0.0.0" "@mapbox/gl-matrix@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@mapbox/gl-matrix/-/gl-matrix-0.0.1.tgz#e5126aab4d64c36b81c7a97d0ae0dddde5773d2b" + integrity sha1-5RJqq01kw2uBx6l9CuDd3eV3PSs= "@mapbox/jsonlint-lines-primitives@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.1.tgz#bc4c1593e2ec2371e2771c518068d6eab8eeae58" + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= "@mapbox/mapbox-gl-supported@^1.3.1": version "1.4.0" resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.0.tgz#36946b22944fe2cfa43cfafd5ef36fdb54a069e4" + integrity sha512-ZD0Io4XK+/vU/4zpANjOtdWfVszAgnaMPsGR6LKsWh4kLIEv9qoobTVmJPPuwuM+ZI2b3BlZ6DYw1XHVmv6YTA== "@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= "@mapbox/shelf-pack@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/shelf-pack/-/shelf-pack-3.1.0.tgz#1edea9c0bf6715b217171ba60646c201af520f6a" + version "3.2.0" + resolved "https://registry.yarnpkg.com/@mapbox/shelf-pack/-/shelf-pack-3.2.0.tgz#df3630ecce8c042817c9a365b88078412963de64" + integrity sha512-dyQxe6ukILV6qaEvxoKCIwhblgRjYp1ZGlClo4xvfbmxzFO5LYu7Tnrg2AZrRgN7VsSragsGcNjzUe9kCdKHYQ== "@mapbox/tiny-sdf@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.0.tgz#b0b8f5c22005e6ddb838f421ffd257c1f74f9a20" + integrity sha512-dnhyk8X2BkDRWImgHILYAGgo+kuciNYX30CUKj/Qd5eNjh54OWM/mdOS/PWsPeN+3abtN+QDGYM4G220ynVJKA== "@mapbox/unitbezier@^0.0.0": version "0.0.0" resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= "@mapbox/vector-tile@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== dependencies: "@mapbox/point-geometry" "~0.1.0" "@mapbox/whoots-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.0.0.tgz#c1de4293081424da3ac30c23afa850af1019bb54" + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" @@ -310,30 +371,112 @@ "@nodelib/fs.stat@^1.0.1": version "1.1.0" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a" + integrity sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A== "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== dependencies: any-observable "^0.3.0" "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@sinonjs/formatio@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + resolved "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + integrity sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg== dependencies: samsam "1.3.0" +"@types/blob-util@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a" + integrity sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w== + +"@types/bluebird@3.5.18": + version "3.5.18" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6" + integrity sha512-OTPWHmsyW18BhrnG5x8F7PzeZ2nFxmHGb42bZn79P9hl+GI5cMzyPgQTwNjbem0lJhoru/8vtjAFCUOu3+gE2w== + +"@types/chai-jquery@1.1.35": + version "1.1.35" + resolved "https://registry.yarnpkg.com/@types/chai-jquery/-/chai-jquery-1.1.35.tgz#9a8f0a39ec0851b2768a8f8c764158c2a2568d04" + integrity sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ== + dependencies: + "@types/chai" "*" + "@types/jquery" "*" + +"@types/chai@*": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.5.tgz#6163dc60078d215ec46186dc76062ef6ed68d39c" + integrity sha512-nyzJ08qQMY4umgXD6SzbLflQucEnoAf2H5iUxPX5t0euDgXDV+bFTJlEmEepM35/2l07jYHdAfP6YEndeTWM0w== + +"@types/chai@4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.8.tgz#d27600e9ba2f371e08695d90a0fe0408d89c7be7" + integrity sha512-m812CONwdZn/dMzkIJEY0yAs4apyTkTORgfB2UsMOxgkUbC205AHnm4T8I0I5gPg9MHrFc1dJ35iS75c0CJkjg== + "@types/d3@3.5.38": version "3.5.38" resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.38.tgz#76f8f2e9159ae562965b2fa0e6fbee1aa643a1bc" + integrity sha1-dvjy6RWa5WKWWy+g5vvuGqZDobw= + +"@types/jquery@*": + version "3.3.10" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.10.tgz#d0afaec7ee55f591992e74c607df5dc7cd9c76ab" + integrity sha512-W2bE8pGh9Tsg8mxh+B6BSH8lTG6ZV7K2ZMAlEwSTqKFU1wMI5HShyRKSp3DngnxCmDu35tW3RAC4mxBFYRsTuw== + +"@types/jquery@3.2.16": + version "3.2.16" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.16.tgz#04419c404a3194350e7d3f339a90e72c88db3111" + integrity sha512-q2WC02YxQoX2nY1HRKlYGHpGP1saPmD7GN0pwCDlTz35a4eOtJG+aHRlXyjCuXokUukSrR2aXyBhSW3j+jPc0A== + +"@types/lodash@4.14.87": + version "4.14.87" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.87.tgz#55f92183b048c2c64402afe472f8333f4e319a6b" + integrity sha512-AqRC+aEF4N0LuNHtcjKtvF9OTfqZI0iaBoe3dA6m/W+/YZJBZjBmW/QIZ8fBeXC6cnytSY9tBoFBqZ9uSCeVsw== + +"@types/minimatch@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/mocha@2.2.44": + version "2.2.44" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e" + integrity sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw== + +"@types/node@*": + version "10.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.11.0.tgz#ddd0d67a3b6c3810dd1a59e36675fa82de5e19ae" + integrity sha512-R4Dvw6KjSYn/SpvjRchBOwXr14vVVcFXCtnM3f0aLvlJS8a599rrcEoihcP2/+Z/f75E5GNPd4aWM7j1yei9og== + +"@types/sinon-chai@2.7.29": + version "2.7.29" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-2.7.29.tgz#4db01497e2dd1908b2bd30d1782f456353f5f723" + integrity sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.2.tgz#7a9d64df40b26dd48d673f745addc2fdb2bda193" + integrity sha512-ifYuFq3GWyvRbqebGB4ZKLqezMGLXzhHv1Uefhg+uARYs/iO+v6Gu/BkpxTxsyM9NI++N/RCf5sWl3X9wBVLaw== + +"@types/sinon@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.0.0.tgz#9a93ffa4ee1329e85166278a5ed99f81dc4c8362" + integrity sha512-cuK4xM8Lg2wd8cxshcQa8RG4IK/xfyB6TNE6tNVvkrShR4xdrYgsV04q6Dp6v1Lp6biEFdzD8k8zg/ujQeiw+A== "@vx/axis@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/axis/-/axis-0.0.140.tgz#aad557c281c6cc21c1516977301552c7052e5224" + integrity sha1-qtVXwoHGzCHBUWl3MBVSxwUuUiQ= dependencies: "@vx/group" "0.0.140" "@vx/point" "0.0.136" @@ -344,6 +487,7 @@ "@vx/axis@^0.0.168": version "0.0.168" resolved "https://registry.yarnpkg.com/@vx/axis/-/axis-0.0.168.tgz#fd8c88a2b584b314aaf1ce2023eaebad05304188" + integrity sha512-/HAieKFXwa39x8mFQbKkuofacvhMLl6g8qOjBBIIvgXyPiXY8ZqQ/+7ZnvPjpf4qgtH4B+yIMEmu29cMGM/jKQ== dependencies: "@vx/group" "0.0.165" "@vx/point" "0.0.165" @@ -355,64 +499,75 @@ "@vx/bounds@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/bounds/-/bounds-0.0.140.tgz#4ede9766aabb41b791a4fbf4c27fcc19ed83f910" + integrity sha1-Tt6XZqq7QbeRpPv0wn/MGe2D+RA= dependencies: prop-types "^15.5.10" "@vx/bounds@0.0.147": version "0.0.147" resolved "https://registry.yarnpkg.com/@vx/bounds/-/bounds-0.0.147.tgz#8a162754fcba0664244fb7fc68ae7ea773483d17" + integrity sha1-ihYnVPy6BmQkT7f8aK5+p3NIPRc= dependencies: prop-types "^15.5.10" "@vx/bounds@0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/bounds/-/bounds-0.0.165.tgz#75f107a6deb58223c6878db5053382eff3174567" + integrity sha512-ZvRb72/4QNs1ZrytZTZxd0hfAb/KKfhsdkcYtIQkmdF6dTsjigMQZ+h2bLvLnbZb/RxyCCoxdiZSGXd+T1c//Q== dependencies: prop-types "^15.5.10" "@vx/clip-path@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/clip-path/-/clip-path-0.0.140.tgz#b2623d004dd5c3c8a6afe8d060de59df51472d94" + integrity sha1-smI9AE3Vw8imr+jQYN5Z31FHLZQ= "@vx/curve@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/curve/-/curve-0.0.140.tgz#29ef388e8b3718213d66a896d569dc1ebc8edf89" + integrity sha1-Ke84jos3GCE9ZqiW1WncHryO34k= dependencies: d3-shape "^1.0.6" "@vx/curve@0.0.143": version "0.0.143" resolved "https://registry.yarnpkg.com/@vx/curve/-/curve-0.0.143.tgz#022c6a8a07ec019ed5820f0214da21fd93645724" + integrity sha1-AixqigfsAZ7Vgg8CFNoh/ZNkVyQ= dependencies: d3-shape "^1.0.6" "@vx/curve@0.0.165", "@vx/curve@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/curve/-/curve-0.0.165.tgz#330d1512dceae0af43dd3eb4c85523132030a3a0" + integrity sha512-fiQAGrKNGjJbL+eixUckJqIZDWXH/1NtIyyDbSz3J7ksk0QpYr5BgWcNJN76HLNt7wfcLwNzCHeNs4iVYyFGTg== dependencies: d3-shape "^1.0.6" "@vx/event@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/event/-/event-0.0.140.tgz#658ec4de92cd61df40b883296168d4e0824015bf" + integrity sha1-ZY7E3pLNYd9AuIMpYWjU4IJAFb8= dependencies: "@vx/point" "0.0.136" "@vx/event@0.0.143": version "0.0.143" resolved "https://registry.yarnpkg.com/@vx/event/-/event-0.0.143.tgz#49b1493fe16ef7d7865405d2dcf267c0a95871d1" + integrity sha1-SbFJP+Fu99eGVAXS3PJnwKlYcdE= dependencies: "@vx/point" "0.0.143" "@vx/event@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/event/-/event-0.0.165.tgz#675d89fdfdc08d0c99c36ff1a381ea50fccfba2e" + integrity sha512-FsQiw0f3s5DQB6aBQmBcoWk9e4q65LcDobHIyV8qrmpW2QgV2NvQFM1w0Q300ohpRMgJDzGk68HHHQgFOJvApw== dependencies: "@vx/point" "0.0.165" "@vx/glyph@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/glyph/-/glyph-0.0.140.tgz#f8323f82aee22192b675bef25789bbb7d74691ba" + integrity sha1-+DI/gq7iIZK2db7yV4m7t9dGkbo= dependencies: "@vx/group" "0.0.140" classnames "^2.2.5" @@ -421,6 +576,7 @@ "@vx/glyph@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/glyph/-/glyph-0.0.165.tgz#ba6fe31700dae852c60468e00dd732fa7521d1fc" + integrity sha512-kccUm40e/VCtayxqvcwc2K2M6oNXO7IafwIfw1RRv6Fj4Iutto9ZpI+PGOf/zPnYVueoLnWBXT/HE7IRS+C2gw== dependencies: "@vx/group" "0.0.165" classnames "^2.2.5" @@ -429,6 +585,7 @@ "@vx/gradient@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/gradient/-/gradient-0.0.140.tgz#56b421016cbae0dcb00190cfffb9e860a28febf4" + integrity sha1-VrQhAWy64NywAZDP/7noYKKP6/Q= dependencies: classnames "^2.2.5" prop-types "^15.5.7" @@ -436,6 +593,7 @@ "@vx/gradient@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/gradient/-/gradient-0.0.165.tgz#0cc0fe873e6acded4943fa274f68601ad5a50a38" + integrity sha512-FjRXMTmcy7k0TWsfDzWWXw6T9WXKP+6LS/GRgnguq271pab/P+AdOJThsVxtBgUc8ZOAPbub3/2Gggz9d8tocg== dependencies: classnames "^2.2.5" prop-types "^15.5.7" @@ -443,6 +601,7 @@ "@vx/grid@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/grid/-/grid-0.0.140.tgz#9dfd3071bc5d90d4b457dd55d7f795699233b230" + integrity sha1-nf0wcbxdkNS0V91V1/eVaZIzsjA= dependencies: "@vx/group" "0.0.140" "@vx/point" "0.0.136" @@ -452,6 +611,7 @@ "@vx/grid@^0.0.169": version "0.0.169" resolved "https://registry.yarnpkg.com/@vx/grid/-/grid-0.0.169.tgz#241b9edb3894394af2e142a1280a05f6ccfd2163" + integrity sha512-wzJx04xdcJWOfnbTwcCx8NB67AOit12eaKGt9ppfTfZL1jpUn9jOhLzLYRKv7dlP2V012CrHgIe7BHQ9mBlD6g== dependencies: "@vx/group" "0.0.165" "@vx/point" "0.0.165" @@ -461,24 +621,28 @@ "@vx/group@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/group/-/group-0.0.140.tgz#cba9b0b3f2f007e5be7346f3c86f73f70e038a23" + integrity sha1-y6mws/LwB+W+c0bzyG9z9w4DiiM= dependencies: classnames "^2.2.5" "@vx/group@0.0.143": version "0.0.143" resolved "https://registry.yarnpkg.com/@vx/group/-/group-0.0.143.tgz#38dbd3fa2740d573c6fdfc691ebc15e85d3eb01b" + integrity sha1-ONvT+idA1XPG/fxpHrwV6F0+sBs= dependencies: classnames "^2.2.5" "@vx/group@0.0.165", "@vx/group@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/group/-/group-0.0.165.tgz#2342523225de94859b5be49c3072dc6bb6795e78" + integrity sha512-gi1DSg8AAaVRseyWiq8y4bzyvKiQIXT6vDUYBVRmv2LBcpHocBGaxNiNK0X602RgLG0XmNyRv6qSCWLOaBs3Mg== dependencies: classnames "^2.2.5" "@vx/legend@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/legend/-/legend-0.0.140.tgz#4062c27d6bc9c4d607309d77eff12b844727ae99" + integrity sha1-QGLCfWvJxNYHMJ137/ErhEcnrpk= dependencies: "@vx/group" "0.0.140" classnames "^2.2.5" @@ -487,6 +651,7 @@ "@vx/pattern@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/pattern/-/pattern-0.0.140.tgz#f49f57c6f13cb5b3baaa5bbec174c5d3aa782da7" + integrity sha1-9J9XxvE8tbO6qlu+wXTF06p4Lac= dependencies: classnames "^2.2.5" prop-types "^15.5.10" @@ -494,6 +659,7 @@ "@vx/pattern@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/pattern/-/pattern-0.0.165.tgz#0d317cb9a13205e35691f702442739ff0256711d" + integrity sha512-h5nmfcYlQYYzNhlhqaYUvVnkmGnC0yWv5yU1snjHweGmIHTovV3RAbKgVFAP7kB3i2rbEtC3O8WkJN++cZdLzA== dependencies: classnames "^2.2.5" prop-types "^15.5.10" @@ -501,24 +667,29 @@ "@vx/point@0.0.136": version "0.0.136" resolved "https://registry.yarnpkg.com/@vx/point/-/point-0.0.136.tgz#93b325b4b95c9d5b96df740f4204017f57396559" + integrity sha1-k7MltLlcnVuW33QPQgQBf1c5ZVk= "@vx/point@0.0.143": version "0.0.143" resolved "https://registry.yarnpkg.com/@vx/point/-/point-0.0.143.tgz#7b6dfa611175ee1b74e3c392072589a79dadf265" + integrity sha1-e236YRF17ht048OSByWJp52t8mU= "@vx/point@0.0.165", "@vx/point@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/point/-/point-0.0.165.tgz#7ebde5da3d86954fe31a56f923f31550f0b4b867" + integrity sha512-spoHilhjcWNgccrSzBUPw+PXV81tYxeyEWBkgr35aGVU4m7YT86Ywvfemwp7AVVGPn+XJHrhB0ujAhDoyqFPoA== "@vx/responsive@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/responsive/-/responsive-0.0.140.tgz#c73ec68b9e89a181605f1ac9ecc09f35216779a8" + integrity sha1-xz7Gi56JoYFgXxrJ7MCfNSFneag= dependencies: lodash "^4.0.8" "@vx/responsive@0.0.172": version "0.0.172" resolved "https://registry.yarnpkg.com/@vx/responsive/-/responsive-0.0.172.tgz#26db0b946bcb0b1db2025c097c0b365f21ba033d" + integrity sha512-Un6SEVY+wRSemp1fNqwS7iA76w8/lhcbL0tXbcIaQezbps2drywrjaEM88Y9NUHVJ9/e5r5Qxy8QjGF2+03j+g== dependencies: lodash "^4.17.10" prop-types "^15.6.1" @@ -527,6 +698,7 @@ "@vx/responsive@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/responsive/-/responsive-0.0.165.tgz#04b17a52be102a75fc036a8ed3f5db1efd4e8ee5" + integrity sha512-b5PYEzsjgTGuH4qN2ujghq2uKQsPGBEtOAO1791WdA0j6rr0zbVsHVmJeEhvoOg0b3xhdNN1mXAzQr4K9lDaDw== dependencies: lodash "^4.17.10" prop-types "^15.6.1" @@ -535,18 +707,21 @@ "@vx/scale@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/scale/-/scale-0.0.140.tgz#1eb087d11d0000b250c2cdc4061b9e2212edb10d" + integrity sha1-HrCH0R0AALJQws3EBhueIhLtsQ0= dependencies: d3-scale "^1.0.5" "@vx/scale@0.0.165", "@vx/scale@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/scale/-/scale-0.0.165.tgz#8575880c48296a80c0e9459057f826e8f903bc07" + integrity sha512-5jSgXJDU6J/KWIyCbpjHqysPCddp7tG3LbTV7UmtB1Qleb4m4slShTVSE7+EKU+zgiQPDGm0+E2ht4cet+7F7A== dependencies: d3-scale "^2.0.0" "@vx/shape@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/shape/-/shape-0.0.140.tgz#6a282d5fdf3a5752b6e938bb3debe983e89ff6d3" + integrity sha1-aigtX986V1K26Ti7Pevpg+if9tM= dependencies: "@vx/curve" "0.0.140" "@vx/group" "0.0.140" @@ -558,6 +733,7 @@ "@vx/shape@0.0.145": version "0.0.145" resolved "https://registry.yarnpkg.com/@vx/shape/-/shape-0.0.145.tgz#4d703c1d8f085e587541b3ef1c06ae510d6341a4" + integrity sha1-TXA8HY8IXlh1QbPvHAauUQ1jQaQ= dependencies: "@vx/curve" "0.0.143" "@vx/group" "0.0.143" @@ -569,6 +745,7 @@ "@vx/shape@0.0.168", "@vx/shape@^0.0.168": version "0.0.168" resolved "https://registry.yarnpkg.com/@vx/shape/-/shape-0.0.168.tgz#172bc1cf4dade47076018efd559e0ecc4e959aec" + integrity sha512-urKZkwSafMpPQ0wI/L5FJmufRiAR4UsgYUCKxROjfE1Cf4jWNlK6mlVIIASxCdHlh9CGBbIrRMdl5Yv5lzqhjA== dependencies: "@vx/curve" "0.0.165" "@vx/group" "0.0.165" @@ -581,6 +758,7 @@ "@vx/shape@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/shape/-/shape-0.0.165.tgz#3424121f45d83dd8e7ba62b6adf8b0aea2fb9cf8" + integrity sha512-D9naH/glDtw8J8IcdumpRz1ihaoCAYMwFNh2KTv73HiTKrLQSXvIjwYFv9C0b8BCPNOXkDZS8s+AlgMSqGlZNQ== dependencies: "@vx/curve" "0.0.165" "@vx/group" "0.0.165" @@ -593,6 +771,7 @@ "@vx/stats@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/stats/-/stats-0.0.165.tgz#32413a144383367e51628bbea61b3b0ce980f1fd" + integrity sha512-FRW5N+7pXLZrQxT8JA8OH28PGKq7YfiycmnSG7jzXOnvw+sPm9MRKCoyRDTpFrCiggcOhHhvqhE8RiO2qF7d3Q== dependencies: "@vx/group" "0.0.165" "@vx/scale" "0.0.165" @@ -602,6 +781,7 @@ "@vx/text@0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/text/-/text-0.0.165.tgz#e7f22979a1e744216be1a535414752c2ceb2f97a" + integrity sha512-r8vvryhEHJVsMbQpX0OH0ow5+8xdIqcbCJ6wVB2H6NzLoXbSTxK0GfGzV6T8CMiWbPuZT0oVJWF54zQnOqxOIQ== dependencies: babel-plugin-lodash "^3.3.2" classnames "^2.2.5" @@ -611,6 +791,7 @@ "@vx/tooltip@0.0.140": version "0.0.140" resolved "https://registry.yarnpkg.com/@vx/tooltip/-/tooltip-0.0.140.tgz#c5c8306272877c1bbd4e8b478ea5291f1019ffe3" + integrity sha1-xcgwYnKHfBu9TotHjqUpHxAZ/+M= dependencies: "@vx/bounds" "0.0.140" classnames "^2.2.5" @@ -619,6 +800,7 @@ "@vx/tooltip@0.0.148": version "0.0.148" resolved "https://registry.yarnpkg.com/@vx/tooltip/-/tooltip-0.0.148.tgz#1c4884b29eaed5b76833972a23c8133980095fe0" + integrity sha1-HEiEsp6u1bdoM5cqI8gTOYAJX+A= dependencies: "@vx/bounds" "0.0.147" classnames "^2.2.5" @@ -627,6 +809,7 @@ "@vx/tooltip@0.0.165", "@vx/tooltip@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/tooltip/-/tooltip-0.0.165.tgz#0d17a1b445a7bc70d7840e36593b780a6e7b40e2" + integrity sha512-/x1NZc67QGQ4e/WNT7Ks5LYRyeLSqp8lG04gX5J6leUS0zscAVzo3aE5u65Qqbc0cnMyMPRZ2Qtb4klWTLg+eQ== dependencies: "@vx/bounds" "0.0.165" classnames "^2.2.5" @@ -635,151 +818,164 @@ "@vx/voronoi@^0.0.165": version "0.0.165" resolved "https://registry.yarnpkg.com/@vx/voronoi/-/voronoi-0.0.165.tgz#11ab585199b0dccf403544a6ad378a505bfb913b" + integrity sha512-oZT9KBAjDLCEcOrrqW01TPz8pLtrNNAFPa7mB9ignXvgntqEd3yVXCBkxXScfZLS+O8UQc+7/pawu0PPkE2eMw== dependencies: "@vx/group" "0.0.165" classnames "^2.2.5" d3-voronoi "^1.1.2" prop-types "^15.6.1" -"@webassemblyjs/ast@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" +"@webassemblyjs/ast@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e" + integrity sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ== dependencies: - "@webassemblyjs/helper-module-context" "1.5.13" - "@webassemblyjs/helper-wasm-bytecode" "1.5.13" - "@webassemblyjs/wast-parser" "1.5.13" - debug "^3.1.0" + "@webassemblyjs/helper-module-context" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/wast-parser" "1.7.6" mamacro "^0.0.3" -"@webassemblyjs/floating-point-hex-parser@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" +"@webassemblyjs/floating-point-hex-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz#7cb37d51a05c3fe09b464ae7e711d1ab3837801f" + integrity sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA== -"@webassemblyjs/helper-api-error@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" +"@webassemblyjs/helper-api-error@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz#99b7e30e66f550a2638299a109dda84a622070ef" + integrity sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg== -"@webassemblyjs/helper-buffer@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" - dependencies: - debug "^3.1.0" +"@webassemblyjs/helper-buffer@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz#ba0648be12bbe560c25c997e175c2018df39ca3e" + integrity sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw== -"@webassemblyjs/helper-code-frame@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" +"@webassemblyjs/helper-code-frame@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz#5a94d21b0057b69a7403fca0c253c3aaca95b1a5" + integrity sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg== dependencies: - "@webassemblyjs/wast-printer" "1.5.13" + "@webassemblyjs/wast-printer" "1.7.6" -"@webassemblyjs/helper-fsm@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" +"@webassemblyjs/helper-fsm@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz#ae1741c6f6121213c7a0b587fb964fac492d3e49" + integrity sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw== -"@webassemblyjs/helper-module-context@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" +"@webassemblyjs/helper-module-context@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz#116d19a51a6cebc8900ad53ca34ff8269c668c23" + integrity sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw== dependencies: - debug "^3.1.0" mamacro "^0.0.3" -"@webassemblyjs/helper-wasm-bytecode@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" - -"@webassemblyjs/helper-wasm-section@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-buffer" "1.5.13" - "@webassemblyjs/helper-wasm-bytecode" "1.5.13" - "@webassemblyjs/wasm-gen" "1.5.13" - debug "^3.1.0" - -"@webassemblyjs/ieee754@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" - dependencies: - ieee754 "^1.1.11" - -"@webassemblyjs/leb128@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" - dependencies: - long "4.0.0" - -"@webassemblyjs/utf8@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" - -"@webassemblyjs/wasm-edit@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-buffer" "1.5.13" - "@webassemblyjs/helper-wasm-bytecode" "1.5.13" - "@webassemblyjs/helper-wasm-section" "1.5.13" - "@webassemblyjs/wasm-gen" "1.5.13" - "@webassemblyjs/wasm-opt" "1.5.13" - "@webassemblyjs/wasm-parser" "1.5.13" - "@webassemblyjs/wast-printer" "1.5.13" - debug "^3.1.0" - -"@webassemblyjs/wasm-gen@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-wasm-bytecode" "1.5.13" - "@webassemblyjs/ieee754" "1.5.13" - "@webassemblyjs/leb128" "1.5.13" - "@webassemblyjs/utf8" "1.5.13" - -"@webassemblyjs/wasm-opt@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-buffer" "1.5.13" - "@webassemblyjs/wasm-gen" "1.5.13" - "@webassemblyjs/wasm-parser" "1.5.13" - debug "^3.1.0" - -"@webassemblyjs/wasm-parser@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-api-error" "1.5.13" - "@webassemblyjs/helper-wasm-bytecode" "1.5.13" - "@webassemblyjs/ieee754" "1.5.13" - "@webassemblyjs/leb128" "1.5.13" - "@webassemblyjs/utf8" "1.5.13" - -"@webassemblyjs/wast-parser@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" - dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/floating-point-hex-parser" "1.5.13" - "@webassemblyjs/helper-api-error" "1.5.13" - "@webassemblyjs/helper-code-frame" "1.5.13" - "@webassemblyjs/helper-fsm" "1.5.13" - long "^3.2.0" +"@webassemblyjs/helper-wasm-bytecode@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz#98e515eaee611aa6834eb5f6a7f8f5b29fefb6f1" + integrity sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q== + +"@webassemblyjs/helper-wasm-section@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz#783835867bdd686df7a95377ab64f51a275e8333" + integrity sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + +"@webassemblyjs/ieee754@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz#c34fc058f2f831fae0632a8bb9803cf2d3462eb1" + integrity sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.6.tgz#197f75376a29f6ed6ace15898a310d871d92f03b" + integrity sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ== + dependencies: + "@xtuc/long" "4.2.1" + +"@webassemblyjs/utf8@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.6.tgz#eb62c66f906af2be70de0302e29055d25188797d" + integrity sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw== + +"@webassemblyjs/wasm-edit@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz#fa41929160cd7d676d4c28ecef420eed5b3733c5" + integrity sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/helper-wasm-section" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + "@webassemblyjs/wasm-opt" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" + "@webassemblyjs/wast-printer" "1.7.6" + +"@webassemblyjs/wasm-gen@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz#695ac38861ab3d72bf763c8c75e5f087ffabc322" + integrity sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/ieee754" "1.7.6" + "@webassemblyjs/leb128" "1.7.6" + "@webassemblyjs/utf8" "1.7.6" + +"@webassemblyjs/wasm-opt@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz#fbafa78e27e1a75ab759a4b658ff3d50b4636c21" + integrity sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-buffer" "1.7.6" + "@webassemblyjs/wasm-gen" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" + +"@webassemblyjs/wasm-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz#84eafeeff405ad6f4c4b5777d6a28ae54eed51fe" + integrity sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-api-error" "1.7.6" + "@webassemblyjs/helper-wasm-bytecode" "1.7.6" + "@webassemblyjs/ieee754" "1.7.6" + "@webassemblyjs/leb128" "1.7.6" + "@webassemblyjs/utf8" "1.7.6" + +"@webassemblyjs/wast-parser@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz#ca4d20b1516e017c91981773bd7e819d6bd9c6a7" + integrity sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/floating-point-hex-parser" "1.7.6" + "@webassemblyjs/helper-api-error" "1.7.6" + "@webassemblyjs/helper-code-frame" "1.7.6" + "@webassemblyjs/helper-fsm" "1.7.6" + "@xtuc/long" "4.2.1" mamacro "^0.0.3" -"@webassemblyjs/wast-printer@1.5.13": - version "1.5.13" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" +"@webassemblyjs/wast-printer@1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz#a6002c526ac5fa230fe2c6d2f1bdbf4aead43a5e" + integrity sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ== dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/wast-parser" "1.5.13" - long "^3.2.0" + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/wast-parser" "1.7.6" + "@xtuc/long" "4.2.1" "@webpack-contrib/schema-utils@^1.0.0-beta.0": version "1.0.0-beta.0" resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + integrity sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg== dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" @@ -788,59 +984,86 @@ text-table "^0.2.0" webpack-log "^1.1.2" +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" + integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g== + abab@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= acorn-dynamic-import@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + integrity sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg== dependencies: acorn "^5.0.0" acorn-globals@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= dependencies: acorn "^4.0.4" acorn-jsx@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + resolved "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= dependencies: acorn "^3.0.4" acorn@^3.0.4: version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + resolved "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= acorn@^5.0.0, acorn@^5.5.0, acorn@^5.6.2: - version "5.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +ajv-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" + integrity sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk= ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -848,6 +1071,7 @@ ajv@^4.9.1: ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -855,85 +1079,102 @@ ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: json-schema-traverse "^0.3.0" ajv@^6.1.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" + version "6.5.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59" + integrity sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" - uri-js "^4.2.1" + uri-js "^4.2.2" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: +alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= dependencies: string-width "^2.0.0" ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= ansicolors@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8= ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" @@ -941,6 +1182,7 @@ anymatch@^1.3.0: anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" @@ -948,6 +1190,7 @@ anymatch@^2.0.0: aphrodite@^1.2.0: version "1.2.5" resolved "https://registry.yarnpkg.com/aphrodite/-/aphrodite-1.2.5.tgz#8358c36c80bb03aee9b97165aaa70186225b4983" + integrity sha1-g1jDbIC7A67puXFlqqcBhiJbSYM= dependencies: asap "^2.0.3" inline-style-prefixer "^3.0.1" @@ -956,35 +1199,29 @@ aphrodite@^1.2.0: append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== dependencies: default-require-extensions "^2.0.0" -application-config-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f" - -application-config@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/application-config/-/application-config-0.1.2.tgz#3272533b5f9f83b323a9e5d640a3558b50a5b385" - dependencies: - application-config-path "^0.1.0" - mkdirp "^0.5.1" - aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== aproba@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA= archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -992,12 +1229,14 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" aria-query@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" + integrity sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4= dependencies: ast-types-flow "0.0.7" commander "^2.11.0" @@ -1005,36 +1244,44 @@ aria-query@^0.7.0: arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + integrity sha1-Qmu52oQJDBg42BLIFQryCoMx4pY= array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" @@ -1042,6 +1289,7 @@ array-includes@^3.0.3: array-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" + integrity sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k= dependencies: debug "^2.2.0" es6-symbol "^3.0.2" @@ -1049,112 +1297,140 @@ array-index@^1.0.0: array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@^2.0.0, asap@^2.0.3, asap@^2.0.6, asap@~2.0.3, asap@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" -asn1@0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" - asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= dependencies: util "0.10.3" assertion-error@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + integrity sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ== ast-types@0.11.5: version "0.11.5" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28" + integrity sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw== async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= async@1.x, async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + integrity sha1-SZAgDxjqW4N8LMT4wDGmmFw4VhE= + dependencies: + lodash "^4.14.0" async@^2.1.4, async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== dependencies: lodash "^4.17.10" -async@~0.2.7, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= dependencies: browserslist "^1.7.6" caniuse-db "^1.0.30000634" @@ -1166,28 +1442,29 @@ autoprefixer@^6.3.1: aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws-sign@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz#3d81ca69b474b1e16518728b51c24ff0bbedc6e9" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.2.1, aws4@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== axobject-query@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + integrity sha1-YvWdvFnJ+SQnWco0mWDnov48NsA= dependencies: ast-types-flow "0.0.7" babel-cli@^6.14.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= dependencies: babel-core "^6.26.0" babel-polyfill "^6.26.0" @@ -1209,6 +1486,7 @@ babel-cli@^6.14.0: babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -1217,6 +1495,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: babel-core@^6.10.4, babel-core@^6.26.0: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -1241,6 +1520,7 @@ babel-core@^6.10.4, babel-core@^6.26.0: babel-eslint@^8.2.2: version "8.2.6" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/traverse" "7.0.0-beta.44" @@ -1252,6 +1532,7 @@ babel-eslint@^8.2.2: babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -1265,6 +1546,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: babel-helper-bindify-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -1273,6 +1555,7 @@ babel-helper-bindify-decorators@^6.24.1: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -1281,6 +1564,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -1289,6 +1573,7 @@ babel-helper-builder-react-jsx@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -1298,6 +1583,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -1307,6 +1593,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -1315,6 +1602,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-explode-class@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= dependencies: babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" @@ -1324,6 +1612,7 @@ babel-helper-explode-class@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -1334,6 +1623,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1341,6 +1631,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1348,6 +1639,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1355,6 +1647,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -1363,6 +1656,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -1373,6 +1667,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -1384,6 +1679,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -1391,6 +1687,7 @@ babel-helpers@^6.24.1: babel-istanbul@^0.12.2: version "0.12.2" resolved "https://registry.yarnpkg.com/babel-istanbul/-/babel-istanbul-0.12.2.tgz#e723f07c9a2432d88055520bc22e75f5c239161c" + integrity sha1-5yPwfJokMtiAVVILwi519cI5Fhw= dependencies: abbrev "1.0.x" async "1.x" @@ -1412,6 +1709,7 @@ babel-istanbul@^0.12.2: babel-loader@^7.1.4: version "7.1.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -1420,18 +1718,21 @@ babel-loader@^7.1.4: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= dependencies: babel-runtime "^6.22.0" babel-plugin-css-modules-transform@^1.1.0: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-plugin-css-modules-transform/-/babel-plugin-css-modules-transform-1.6.1.tgz#5af9483bd62d09af18eeebdc7e6c4370e5125eed" + integrity sha512-Iv98dKRgQnhuHFcn2heHH1OpHo9LGyoKjlsAkj6/Q3wkwpVyHrNfVua/WHnrwe2f7EHy1KANnOSg+q4AJ6ZzaQ== dependencies: css-modules-require-hook "^4.0.6" mkdirp "^0.5.1" @@ -1439,12 +1740,14 @@ babel-plugin-css-modules-transform@^1.1.0: babel-plugin-dynamic-import-node@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz#f91631e703e0595e47d4beafbb088576c87fbeee" + integrity sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ== dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-lodash@^3.3.2: version "3.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" + integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== dependencies: "@babel/helper-module-imports" "^7.0.0-beta.49" "@babel/types" "^7.0.0-beta.49" @@ -1454,55 +1757,68 @@ babel-plugin-lodash@^3.3.2: babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + integrity sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY= babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + resolved "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= babel-plugin-syntax-export-extensions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + integrity sha1-cKFITw+QiaToStRLrDU8lbmxJyE= babel-plugin-syntax-flow@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + resolved "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + resolved "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" @@ -1511,6 +1827,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -1519,6 +1836,7 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async- babel-plugin-transform-class-constructor-call@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + integrity sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk= dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.22.0" @@ -1527,6 +1845,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-plugin-transform-class-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= dependencies: babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" @@ -1536,6 +1855,7 @@ babel-plugin-transform-class-properties@^6.24.1: babel-plugin-transform-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= dependencies: babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" @@ -1546,18 +1866,21 @@ babel-plugin-transform-decorators@^6.24.1: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -1568,6 +1891,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -1582,6 +1906,7 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -1589,12 +1914,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transfor babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1602,12 +1929,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2 babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -1616,12 +1945,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -1630,6 +1961,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.2: version "6.26.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -1639,6 +1971,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -1647,6 +1980,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -1655,6 +1989,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -1662,6 +1997,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es201 babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -1673,6 +2009,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015- babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1680,12 +2017,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transfo babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -1694,18 +2033,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es201 babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -1714,18 +2056,21 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20 babel-plugin-transform-es3-member-expression-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + integrity sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es3-property-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + integrity sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es5-property-mutators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es5-property-mutators/-/babel-plugin-transform-es5-property-mutators-6.24.1.tgz#0b9a24f4e2ff18c33603d24a0d438dc9793b0a13" + integrity sha1-C5ok9OL/GMM2A9JKDUONyXk7ChM= dependencies: babel-helper-define-map "^6.24.1" babel-runtime "^6.22.0" @@ -1733,6 +2078,7 @@ babel-plugin-transform-es5-property-mutators@^6.24.1: babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -1741,6 +2087,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e babel-plugin-transform-export-extensions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + integrity sha1-U3OLR+deghhYnuqUbLvTkQm75lM= dependencies: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" @@ -1748,6 +2095,7 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" @@ -1755,12 +2103,14 @@ babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-str babel-plugin-transform-jscript@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-jscript/-/babel-plugin-transform-jscript-6.22.0.tgz#6e8af12b7aba49e0a809152616ac05690b3352dc" + integrity sha1-borxK3q6SeCoCRUmFqwFaQszUtw= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -1768,12 +2118,14 @@ babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1781,6 +2133,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1788,6 +2141,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= dependencies: babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" @@ -1796,12 +2150,14 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1809,14 +2165,16 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-polyfill@^6.23.0, babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" regenerator-runtime "^0.10.5" babel-preset-airbnb@^2.1.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-airbnb/-/babel-preset-airbnb-2.5.1.tgz#17479ff3707a93a9e06d91e77ae213168ce06fa1" + version "2.6.0" + resolved "https://registry.yarnpkg.com/babel-preset-airbnb/-/babel-preset-airbnb-2.6.0.tgz#caf1641820f60095f3f9ba91344edc58fe260853" + integrity sha512-0VrYWk6ntS/wzjgVPdEqAX8y0GJ2JLV44QxyiP4J7C2V4BcZAfbMvh292I4C3myKkLmWzjvgAuj+s3kQ6yAUvg== dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-es2015-modules-commonjs "^6.26.2" @@ -1827,6 +2185,8 @@ babel-preset-airbnb@^2.1.1: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-jscript "^6.22.0" babel-plugin-transform-object-rest-spread "^6.26.0" + babel-plugin-transform-react-remove-prop-types "^0.4.15" + babel-plugin-transform-strict-mode "^6.24.1" babel-preset-env "^1.7.0" babel-preset-react "^6.24.1" object.assign "^4.1.0" @@ -1834,6 +2194,7 @@ babel-preset-airbnb@^2.1.1: babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -1869,6 +2230,7 @@ babel-preset-env@^1.7.0: babel-preset-es2015@^6.9.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" @@ -1898,12 +2260,14 @@ babel-preset-es2015@^6.9.0: babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= dependencies: babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-react-display-name "^6.23.0" @@ -1915,6 +2279,7 @@ babel-preset-react@^6.24.1: babel-preset-stage-1@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + integrity sha1-dpLNfc1oSZB+auSgqFWJz7niv7A= dependencies: babel-plugin-transform-class-constructor-call "^6.24.1" babel-plugin-transform-export-extensions "^6.22.0" @@ -1923,6 +2288,7 @@ babel-preset-stage-1@^6.5.0: babel-preset-stage-2@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-class-properties "^6.24.1" @@ -1932,6 +2298,7 @@ babel-preset-stage-2@^6.24.1: babel-preset-stage-3@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-generator-functions "^6.24.1" @@ -1942,6 +2309,7 @@ babel-preset-stage-3@^6.24.1: babel-register@^6.24.1, babel-register@^6.26.0, babel-register@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -1951,15 +2319,10 @@ babel-register@^6.24.1, babel-register@^6.26.0, babel-register@^6.9.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^5.6.18: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" - dependencies: - core-js "^1.0.0" - babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -1967,6 +2330,7 @@ babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runti babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -1977,6 +2341,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -1991,6 +2356,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -1999,39 +2365,48 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 babylon@7.0.0-beta.44: version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + resolved "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== babylon@^7.0.0-beta.47: version "7.0.0-beta.47" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== bail@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" + integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784" + integrity sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q= base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -2044,82 +2419,90 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +bignumber.js@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + version "1.12.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== binaryextensions@2: version "2.1.1" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" - -bl@~0.9.4: - version "0.9.5" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" - dependencies: - readable-stream "~1.0.26" + integrity sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA== bl@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" + integrity sha1-/cqHGplxOqANGeO7ukHER4emU5g= dependencies: readable-stream "~2.0.5" block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" -bluebird@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-1.0.3.tgz#c4b441184802e3b64a61eeed4578271b4c8bf6ac" +bluebird@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= bluebird@^3.4.3, bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + version "3.5.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" + integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -boolbase@~1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -boom@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" - dependencies: - hoek "0.9.x" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= dependencies: hoek "2.x.x" bootstrap-slider@9.9.0: version "9.9.0" resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-9.9.0.tgz#4e14ecc6401901da1ddf7681aa24e33b00dadce8" + integrity sha1-ThTsxkAZAdod33aBqiTjOwDa3Og= bootstrap-slider@^10.0.0: - version "10.0.2" - resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-10.0.2.tgz#442d84293aea248a31b1a3f976ac3737a7362a62" + version "10.2.1" + resolved "https://registry.yarnpkg.com/bootstrap-slider/-/bootstrap-slider-10.2.1.tgz#c07d7a7d817ba794ac69b56ae1280974e39b63ff" + integrity sha512-sajEjunOzQyUqzFPTfXIiCMWaNzktFPze0DdHHYE07aXzNFHNjp+iB5r1DmK6PaRuSEUXnmr2siS9x1Fx8R+Tg== bootstrap@^3.3.6: version "3.3.7" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71" + integrity sha1-WjiTlFSfIzMIdaOxUGVldPip63E= bops@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/bops/-/bops-0.0.6.tgz#082d1d55fa01e60dbdc2ebc2dba37f659554cf3a" + integrity sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo= dependencies: base64-js "0.0.2" to-utf8 "0.0.1" @@ -2127,10 +2510,12 @@ bops@0.0.6: bowser@^1.2.0, bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" + integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -2143,6 +2528,7 @@ boxen@^1.2.1: brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -2150,10 +2536,12 @@ brace-expansion@^1.1.7: brace@^0.11.0, brace@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" + integrity sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg= braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -2162,6 +2550,7 @@ braces@^1.8.2: braces@^2.3.0, braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -2177,6 +2566,7 @@ braces@^2.3.0, braces@^2.3.1: brfs@^1.3.0, brfs@^1.4.4: version "1.6.1" resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" + integrity sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== dependencies: quote-stream "^1.0.1" resolve "^1.1.5" @@ -2186,14 +2576,17 @@ brfs@^1.3.0, brfs@^1.4.4: brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + resolved "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -2205,22 +2598,26 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + resolved "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -2228,6 +2625,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -2240,12 +2638,14 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= dependencies: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" @@ -2253,29 +2653,49 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== dependencies: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" + integrity sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q== + dependencies: + caniuse-lite "^1.0.30000884" + electron-to-chromium "^1.3.62" + node-releases "^1.0.0-alpha.11" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-equal@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= buffer-from@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -2284,22 +2704,27 @@ buffer@^4.3.0: builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= builtins@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" + integrity sha1-NVIZzWzxjb58Acx/0tznZc/cVJo= builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== dependencies: bluebird "^3.5.1" chownr "^1.0.1" @@ -2318,6 +2743,7 @@ cacache@^10.0.4: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -2332,6 +2758,7 @@ cache-base@^1.0.1: cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= dependencies: clone-response "1.0.2" get-stream "3.0.0" @@ -2341,56 +2768,84 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +cachedir@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" + integrity sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg== + dependencies: + os-homedir "^1.0.1" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= caniuse-api@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= dependencies: browserslist "^1.3.6" caniuse-db "^1.0.30000529" lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000864" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000864.tgz#35a4b2325a8d4553a46b516dbc233bf391d75555" + integrity sha1-NaSyMlqNRVOka1FtvCM785HXVVU= -caniuse-lite@^1.0.30000844: - version "1.0.30000864" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000864.tgz#7a08c78da670f23c06f11aa918831b8f2dd60ddc" +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000884: + version "1.0.30000887" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000887.tgz#1769458c27bbdcf61b0cb6b5072bb6cd11fd9c23" + integrity sha512-AHpONWuGFWO8yY9igdXH94tikM6ERS84286r0cAMAXYFtJBk76lhiMhtCxBJNBZsD6hzlvpWZ2AtbVFEkf4JQA== capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== cardinal@~0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz#ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2" + integrity sha1-ylu2iltRG5D+k7ms6km97lwyv+I= dependencies: ansicolors "~0.2.1" redeyed "~0.4.0" @@ -2398,36 +2853,51 @@ cardinal@~0.4.2: caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c= caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chai@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== dependencies: - assertion-error "^1.0.1" - check-error "^1.0.1" - deep-eql "^3.0.0" + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" get-func-name "^2.0.0" - pathval "^1.0.0" - type-detect "^4.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" chain-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + version "1.0.1" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" + integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== + +chalk@2.4.1, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -2435,17 +2905,10 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + resolved "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= dependencies: ansi-styles "~1.0.0" has-color "~0.1.0" @@ -2454,55 +2917,59 @@ chalk@~0.4.0: change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= character-entities-legacy@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== character-entities@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== character-reference-invalid@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= check-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" entities "~1.1.1" htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" + lodash "^4.15.0" + parse5 "^3.0.1" chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -2518,6 +2985,7 @@ chokidar@^1.6.1: chokidar@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -2534,27 +3002,37 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.2" -chownr@^1.0.1, chownr@~1.0.1: +chownr@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +chownr@~1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + resolved "http://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= chrome-trace-event@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== dependencies: tslib "^1.9.0" ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== cint@^8.2.1: version "8.2.1" resolved "https://registry.yarnpkg.com/cint/-/cint-8.2.1.tgz#70386b1b48e2773d0d63166a55aff94ef4456a12" + integrity sha1-cDhrG0jidz0NYxZqVa/5TvRFahI= cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -2562,16 +3040,19 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== dependencies: chalk "^1.1.3" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -2581,42 +3062,50 @@ class-utils@^0.3.5: classnames@^2.1.2, classnames@^2.2.3, classnames@^2.2.4, classnames@^2.2.5: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== clean-webpack-plugin@^0.1.19: version "0.1.19" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" + integrity sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA== dependencies: rimraf "^2.6.1" cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= dependencies: restore-cursor "^1.0.1" cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= dependencies: colors "1.0.3" cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= dependencies: slice-ansi "0.0.4" string-width "^1.0.1" @@ -2624,10 +3113,12 @@ cli-truncate@^0.2.1: cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= clipboard@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + integrity sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -2636,6 +3127,7 @@ clipboard@^2.0.0: cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= dependencies: center-align "^0.1.1" right-align "^0.1.1" @@ -2644,6 +3136,7 @@ cliui@^2.1.0: cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -2652,32 +3145,39 @@ cliui@^4.0.0: clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= clone-response@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= clone@^1.0.0, clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= cloneable-readable@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== dependencies: inherits "^2.0.1" process-nextick-args "^2.0.0" @@ -2686,6 +3186,7 @@ cloneable-readable@^1.0.0: cmd-shim@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= dependencies: graceful-fs "^4.1.2" mkdirp "~0.5.0" @@ -2693,24 +3194,36 @@ cmd-shim@~2.0.2: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= coa@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= + dependencies: + q "^1.1.2" + +coa@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" + integrity sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== dependencies: q "^1.1.2" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collapse-white-space@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -2718,34 +3231,68 @@ collection-visit@^1.0.0: color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.2" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + integrity sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg== dependencies: color-name "1.1.1" +color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-name@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + integrity sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok= -color-name@^1.0.0: +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= + dependencies: + color-name "^1.0.0" + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== dependencies: color-name "^1.0.0" + simple-swizzle "^0.2.2" color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= dependencies: clone "^1.0.2" color-convert "^1.3.0" color-string "^0.3.0" +color@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" + integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= dependencies: color "^0.11.0" css-color-names "0.0.4" @@ -2754,81 +3301,119 @@ colormin@^1.0.5: colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + integrity sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q= colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= colors@^1.1.2: version "1.3.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" + integrity sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw== colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= dependencies: delayed-stream "~1.0.0" -combined-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== dependencies: - delayed-stream "0.0.5" + delayed-stream "~1.0.0" comma-separated-tokens@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" + integrity sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA== dependencies: trim "0.0.1" +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== + commander@2.9.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + resolved "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= dependencies: graceful-readlink ">= 1.0.0" commander@^2.11.0, commander@^2.9.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +common-tags@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" + integrity sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA= + dependencies: + babel-runtime "^6.18.0" commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-versions@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" + integrity sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ== complex.js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.4.tgz#d8e7cfb9652d1e853e723386421c1a0ca7a48373" + integrity sha512-Syl95HpxUTS0QjwNxencZsKukgh1zdS9uXeXX2Us0pHaqBR6kiZZi0AkZ9VpZFwHJyVIUVzI4EumjWdXP3fy6w== component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" @@ -2838,12 +3423,14 @@ concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0, concat-stream@ concat-stream@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.2.1.tgz#f35100b6c46378bfba8b6b80f9f0d0ccdf13dc60" + integrity sha1-81EAtsRjeL+6i2uA+fDQzN8T3GA= dependencies: bops "0.0.6" config-chain@~1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -2851,6 +3438,7 @@ config-chain@~1.1.11: configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" @@ -2862,36 +3450,41 @@ configstore@^3.0.0: console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= content-type-parser@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ== convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -cookie-jar@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/cookie-jar/-/cookie-jar-0.3.0.tgz#bc9a27d4e2b97e186cd57c9e2063cb99fa68cccc" + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -2903,22 +3496,36 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" @@ -2926,12 +3533,14 @@ create-ecdh@^4.0.0: create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= dependencies: capture-stack-trace "^1.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + resolved "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -2941,7 +3550,8 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + resolved "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2950,9 +3560,10 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.5.2, create-react-class@^15.6.0: +create-react-class@^15.5.2: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" @@ -2961,14 +3572,16 @@ create-react-class@^15.5.2, create-react-class@^15.6.0: cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2979,22 +3592,19 @@ cross-spawn@^6.0.5: crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - -cryptiles@0.2.x: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" - dependencies: - boom "0.4.x" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= dependencies: boom "2.x.x" crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -3011,14 +3621,25 @@ crypto-browserify@^3.11.0: crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= -css-color-names@0.0.4: +css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz#d0e3056b0fd88dc1ea9dceff435adbe9c702a7f8" + integrity sha512-jH4024SHZ3e0M7ann9VxpFpH3moplRXNz9ZBqvFMZqi09Yo5ARbs2wdPH8GqN9iRTlQynrbGbraNbBxBLei85Q== + dependencies: + postcss "^6.0.0" + timsort "^0.3.0" css-in-js-utils@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + resolved "http://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== dependencies: hyphenate-style-name "^1.0.2" isobject "^3.0.1" @@ -3026,6 +3647,7 @@ css-in-js-utils@^2.0.0: css-loader@^0.28.0: version "0.28.11" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== dependencies: babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" @@ -3045,6 +3667,7 @@ css-loader@^0.28.0: css-modules-require-hook@^4.0.6: version "4.2.3" resolved "https://registry.yarnpkg.com/css-modules-require-hook/-/css-modules-require-hook-4.2.3.tgz#6792ca412b15e23e6f9be6a07dcef7f577ff904d" + integrity sha1-Z5LKQSsV4j5vm+agfc739Xf/kE0= dependencies: debug "^2.2.0" generic-names "^1.0.1" @@ -3059,38 +3682,143 @@ css-modules-require-hook@^4.0.6: postcss-modules-values "^1.1.1" seekout "^1.0.1" +css-select-base-adapter@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz#0102b3d14630df86c3eb9fa9f5456270106cf990" + integrity sha1-AQKz0UYw34bD65+p9UVicBBs+ZA= + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= dependencies: boolbase "~1.0.0" css-what "2.1" domutils "1.5.1" nth-check "~1.0.1" +css-select@~1.3.0-rc0: + version "1.3.0-rc0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.3.0-rc0.tgz#6f93196aaae737666ea1036a8cb14a8fcb7a9231" + integrity sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE= + dependencies: + boolbase "^1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "^1.0.1" + css-selector-tokenizer@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + integrity sha1-5piEdK6MlTR3v15+/s/OzNnPTIY= dependencies: cssesc "^0.1.0" fastparse "^1.1.1" regexpu-core "^1.0.0" +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-tree@1.0.0-alpha25: + version "1.0.0-alpha25" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha25.tgz#1bbfabfbf6eeef4f01d9108ff2edd0be2fe35597" + integrity sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A== + dependencies: + mdn-data "^1.0.0" + source-map "^0.5.3" + +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= + +css-url-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" + integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= + css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= csscolorparser@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +cssnano-preset-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz#c334287b4f7d49fb2d170a92f9214655788e3b6b" + integrity sha1-wzQoe099SfstFwqS+SFGVXiOO2s= + dependencies: + css-declaration-sorter "^3.0.0" + cssnano-util-raw-cache "^4.0.0" + postcss "^6.0.0" + postcss-calc "^6.0.0" + postcss-colormin "^4.0.0" + postcss-convert-values "^4.0.0" + postcss-discard-comments "^4.0.0" + postcss-discard-duplicates "^4.0.0" + postcss-discard-empty "^4.0.0" + postcss-discard-overridden "^4.0.0" + postcss-merge-longhand "^4.0.0" + postcss-merge-rules "^4.0.0" + postcss-minify-font-values "^4.0.0" + postcss-minify-gradients "^4.0.0" + postcss-minify-params "^4.0.0" + postcss-minify-selectors "^4.0.0" + postcss-normalize-charset "^4.0.0" + postcss-normalize-display-values "^4.0.0" + postcss-normalize-positions "^4.0.0" + postcss-normalize-repeat-style "^4.0.0" + postcss-normalize-string "^4.0.0" + postcss-normalize-timing-functions "^4.0.0" + postcss-normalize-unicode "^4.0.0" + postcss-normalize-url "^4.0.0" + postcss-normalize-whitespace "^4.0.0" + postcss-ordered-values "^4.0.0" + postcss-reduce-initial "^4.0.0" + postcss-reduce-transforms "^4.0.0" + postcss-svgo "^4.0.0" + postcss-unique-selectors "^4.0.0" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= dependencies: autoprefixer "^6.3.1" decamelize "^1.1.2" @@ -3125,9 +3853,27 @@ cssnano@^3.10.0: postcss-value-parser "^3.2.3" postcss-zindex "^2.0.1" +cssnano@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.3.tgz#e7848a7aea42f9a70b1108d58986d41a4f4c30b2" + integrity sha512-SSgGrBS71H8R/V4d/VJfeYU4QClRaoqf0XjCmHYci0I0c/aCvDjfjAkX3oM8iWbw6CKAIatmBpEVpahrsCPAAw== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.1" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== + dependencies: + css-tree "1.0.0-alpha.29" + csso@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= dependencies: clap "^1.0.9" source-map "^0.5.3" @@ -3135,93 +3881,154 @@ csso@~2.3.1: cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== "cssstyle@>= 0.2.37 < 0.3.0": version "0.2.37" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ= dependencies: cssom "0.3.x" -ctype@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + +cypress@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.1.0.tgz#b718ba64289b887c7ab7a7f09245d871a4a409ba" + integrity sha512-UqLbXgHvM8Y6Y+roHrepZMWcyMN5u4KcjpTbJTZi0d5O2Prvtqmnpoky7a4C65q4oRQXeSc6cBZUhxJkhU4pbQ== + dependencies: + "@cypress/listr-verbose-renderer" "0.4.1" + "@cypress/xvfb" "1.2.3" + "@types/blob-util" "1.3.3" + "@types/bluebird" "3.5.18" + "@types/chai" "4.0.8" + "@types/chai-jquery" "1.1.35" + "@types/jquery" "3.2.16" + "@types/lodash" "4.14.87" + "@types/minimatch" "3.0.3" + "@types/mocha" "2.2.44" + "@types/sinon" "4.0.0" + "@types/sinon-chai" "2.7.29" + bluebird "3.5.0" + cachedir "1.3.0" + chalk "2.4.1" + check-more-types "2.24.0" + commander "2.11.0" + common-tags "1.4.0" + debug "3.1.0" + execa "0.10.0" + executable "4.1.1" + extract-zip "1.6.6" + fs-extra "4.0.1" + getos "3.1.0" + glob "7.1.2" + is-ci "1.0.10" + is-installed-globally "0.1.0" + lazy-ass "1.6.0" + listr "0.12.0" + lodash "4.17.10" + log-symbols "2.2.0" + minimist "1.2.0" + progress "1.1.8" + ramda "0.24.1" + request "2.87.0" + request-progress "0.3.1" + supports-color "5.1.0" + tmp "0.0.31" + url "0.11.0" + yauzl "2.8.0" d3-array@1, d3-array@^1.2.0, d3-array@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== d3-cloud@^1.2.1: version "1.2.5" resolved "https://registry.yarnpkg.com/d3-cloud/-/d3-cloud-1.2.5.tgz#3e91564f2d27fba47fcc7d812eb5081ea24c603d" + integrity sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw== dependencies: d3-dispatch "^1.0.3" d3-collection@1, d3-collection@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== d3-color@1, d3-color@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.0.tgz#d1ea19db5859c86854586276ec892cf93148459a" + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f" + integrity sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw== d3-dispatch@1, d3-dispatch@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" + version "1.0.5" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015" + integrity sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g== d3-drag@1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.3.tgz#46e206ad863ec465d88c588098a1df444cd33c64" + integrity sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg== dependencies: d3-dispatch "1" d3-selection "1" d3-ease@1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" + version "1.0.5" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb" + integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ== d3-format@1, d3-format@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.0.tgz#a3ac44269a2011cdb87c7b5693040c18cddfff11" + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562" + integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ== d3-geo-projection@0.2: version "0.2.16" resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz#4994ecd1033ddb1533b6c4c5528a1c81dcc29427" + integrity sha1-SZTs0QM92xUztsTFUoocgdzClCc= dependencies: brfs "^1.3.0" d3-hexbin@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/d3-hexbin/-/d3-hexbin-0.2.2.tgz#9c5837dacfd471ab05337a9e91ef10bfc4f98831" + integrity sha1-nFg32s/UcasFM3qeke8Qv8T5iDE= d3-hierarchy@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz#842c1372090f870b7ea013ebae5c0c8d9f56229c" + version "1.1.8" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc" + integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w== d3-interpolate@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.2.0.tgz#40d81bd8e959ff021c5ea7545bc79b8d22331c41" + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" + integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w== dependencies: d3-color "1" d3-path@1, d3-path@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8" + integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA== d3-queue@1: version "1.2.3" resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-1.2.3.tgz#143a701cfa65fe021292f321c10d14e98abd491b" + integrity sha1-FDpwHPpl/gISkvMhwQ0U6Yq9SRs= d3-queue@2: version "2.0.3" resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-2.0.3.tgz#07fbda3acae5358a9c5299aaf880adf0953ed2c2" + integrity sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI= d3-sankey@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.4.2.tgz#34a1512f2b4406a35f80eac7febcf5822dbec5ad" + integrity sha1-NKFRLytEBqNfgOrH/rz1gi2+xa0= dependencies: d3-array "1" d3-collection "1" @@ -3230,6 +4037,7 @@ d3-sankey@^0.4.2: d3-scale@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" + integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== dependencies: d3-array "^1.2.0" d3-collection "1" @@ -3240,8 +4048,9 @@ d3-scale@^1.0.5: d3-time-format "2" d3-scale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.1.0.tgz#8d3fd3e2a7c9080782a523c08507c5248289eef8" + version "2.1.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.1.2.tgz#4e932b7b60182aee9073ede8764c98423e5f9a94" + integrity sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q== dependencies: d3-array "^1.2.0" d3-collection "1" @@ -3251,43 +4060,51 @@ d3-scale@^2.0.0: d3-time-format "2" d3-selection@1, d3-selection@^1.1.0, d3-selection@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.2.tgz#6e70a9df60801c8af28ac24d10072d82cbfdf652" + integrity sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ== d3-shape@^1.0.6, d3-shape@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" + version "1.2.2" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.2.tgz#f9dba3777a5825f9a8ce8bc928da08c17679e9a7" + integrity sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ== dependencies: d3-path "1" d3-svg-legend@^1.x: version "1.13.0" resolved "https://registry.yarnpkg.com/d3-svg-legend/-/d3-svg-legend-1.13.0.tgz#6217478c9add9d62cb333617e1961311a41a4db3" + integrity sha1-YhdHjJrdnWLLMzYX4ZYTEaQaTbM= d3-time-format@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + version "2.1.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b" + integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA== dependencies: d3-time "1" d3-time@1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.10.tgz#8259dd71288d72eeacfd8de281c4bf5c7393053c" + integrity sha512-hF+NTLCaJHF/JqHN5hE8HVGAXPStEq6/omumPE/SxyHVrR7/qQxusFDo0t0c/44+sCGHthC7yNGFZIEgju0P8g== d3-timer@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba" + integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg== d3-tip@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/d3-tip/-/d3-tip-0.9.1.tgz#84e6d331c4e6650d80c5228a07e41820609ab64b" + integrity sha512-EVBfG9d+HnjIoyVXfhpytWxlF59JaobwizqMX9EBXtsFmJytjwHeYiUs74ldHQjE7S9vzfKTx2LCtvUrIbuFYg== dependencies: d3-collection "^1.0.4" d3-selection "^1.3.0" d3-transition@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" + version "1.1.3" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.3.tgz#3a435b05ce9cef9524fe0d38121cfb6905331ca6" + integrity sha512-tEvo3qOXL6pZ1EzcXxFcPNxC/Ygivu5NoBY6mbzidATAeML86da+JfVIUzon3dNM6UX6zjDx+xbYDmMVtTSjuA== dependencies: d3-color "1" d3-dispatch "1" @@ -3297,12 +4114,14 @@ d3-transition@1: d3-timer "1" d3-voronoi@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + version "1.1.4" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" + integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== d3-zoom@^1.3.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" + version "1.7.3" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.3.tgz#f444effdc9055c38077c4299b4df999eb1d47ccb" + integrity sha512-xEBSwFx5Z9T3/VrwDkMt+mr0HCzv7XjpGURJ8lWmIC8wxe32L39eWHIasEe/e7Ox8MPU4p1hvH8PKN2olLzIBg== dependencies: d3-dispatch "1" d3-drag "1" @@ -3313,30 +4132,36 @@ d3-zoom@^1.3.0: d3@3, d3@^3.5.17, d3@^3.5.6: version "3.5.17" resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" + integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= dependencies: es5-ext "^0.10.9" damerau-levenshtein@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= dargs@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + integrity sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk= dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" datamaps@^0.5.8: version "0.5.9" resolved "https://registry.yarnpkg.com/datamaps/-/datamaps-0.5.9.tgz#2a775473aaab29b55025208b2245e840ecfd4fe1" + integrity sha512-GUXpO713URNzaExVUgBtqA5fr2UuxUG/fVitI04zEFHVL2FHSjd672alHq8E16oQqRNzF0m1bmx8WlTnDrGSqQ== dependencies: "@types/d3" "3.5.38" d3 "^3.5.6" @@ -3345,6 +4170,7 @@ datamaps@^0.5.8: datatables.net-bs@^1.10.15: version "1.10.19" resolved "https://registry.yarnpkg.com/datatables.net-bs/-/datatables.net-bs-1.10.19.tgz#08763b4e4d0cef1a427d019dc15e717c7ed67a4d" + integrity sha512-5gxoI2n+duZP06+4xVC2TtH6zcY369/TRKTZ1DdSgDcDUl4OYQsrXCuaLJmbVzna/5Y5lrMmK7CxgvYgIynICA== dependencies: datatables.net "1.10.19" jquery ">=1.7" @@ -3352,121 +4178,150 @@ datatables.net-bs@^1.10.15: datatables.net@1.10.19: version "1.10.19" resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.19.tgz#97a1ed41c85e62d61040603481b59790a172dd1f" + integrity sha512-+ljXcI6Pj3PTGy5pesp3E5Dr3x3AV45EZe0o1r0gKENN2gafBKXodVnk2ypKwl2tTmivjxbkiqoWnipTefyBTA== dependencies: jquery ">=1.7" date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw== date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= dependencies: ms "2.0.0" -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: +debug@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" + integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-9.0.1.tgz#1cc8b228177da7ab6498c1cc06eb130a290e6e1e" + integrity sha512-2h0iKbJwnImBk4TGk7CG1xadoA0g3LDPlQhQzbZ221zvG0p2YVUedbKIPsOZXKZGx6YmZMJKYOalpCMxSdDqTQ== -deck.gl@^5.1.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/deck.gl/-/deck.gl-5.3.2.tgz#2297d820fb8fb02eab95ac6a03261a689500bc11" +deck.gl@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/deck.gl/-/deck.gl-5.3.4.tgz#35e5a7087ef0d8ca7811d06a721ea289edbe7c24" + integrity sha512-CaUszHwt7bDVGH5w6eWG4ihcYnbMsJojEYDBi/OA6rPN63ihYTSH813qP8HM+FDO7ej6W9UJ4uUSbLP2XtP+xA== dependencies: - "@deck.gl/core" "^5.3.1" - "@deck.gl/layers" "^5.3.2" - "@deck.gl/react" "^5.3.1" + "@deck.gl/core" "^5.3.3" + "@deck.gl/layers" "^5.3.4" + "@deck.gl/react" "^5.3.3" decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-eql@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== dependencies: type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^1.3.2: version "1.5.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== default-require-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= dependencies: strip-bom "^3.0.0" defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -3474,10 +4329,12 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" @@ -3487,25 +4344,25 @@ del@^2.0.2: pinkie-promise "^2.0.0" rimraf "^2.2.8" -delayed-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -3513,20 +4370,24 @@ des.js@^1.0.0: detect-conflict@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" + integrity sha1-CIZXpmqWHAUBnbfEIwiDsca0F24= detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= dependencies: repeating "^2.0.0" detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" wrappy "1" @@ -3534,14 +4395,17 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@~1.0.3: diff@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= diff@^3.1.0, diff@^3.3.1, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diffie-hellman@^5.0.0: version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -3550,23 +4414,32 @@ diffie-hellman@^5.0.0: dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: arrify "^1.0.1" path-type "^3.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= + disposables@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/disposables/-/disposables-1.0.2.tgz#36c6a674475f55a2d6913567a601444e487b4b6e" + integrity sha1-NsamdEdfVaLWkTVnpgFETkh7S24= distributions@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/distributions/-/distributions-1.1.0.tgz#012973634ef6dd595a525ab1b397d217131c0ea5" + integrity sha512-mufW9T1kRlzLVAaekUhgdfcMgX2r/zYQmJx3sGdUAwe0/JSQWey0XgqiDtfUUqYcr/QWHCnBd2M/v45tS/+YAQ== dependencies: mathfn "^1.0.0" dnd-core@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-2.6.0.tgz#12bad66d58742c6e5f7cf2943fb6859440f809c4" + integrity sha1-ErrWbVh0LG5ffPKUP7aFlED4CcQ= dependencies: asap "^2.0.6" invariant "^2.0.0" @@ -3576,6 +4449,7 @@ dnd-core@^2.6.0: doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" @@ -3583,16 +4457,19 @@ doctrine@1.5.0: doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" "dom-helpers@^2.4.0 || ^3.0.0", dom-helpers@^3.2.0, dom-helpers@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" + integrity sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg== dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= dependencies: domelementtype "~1.1.1" entities "~1.1.1" @@ -3600,28 +4477,34 @@ dom-serializer@0, dom-serializer@~0.1.0: domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== dependencies: domelementtype "1" dompurify@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-1.0.5.tgz#844ebcbf8465c8cb724291e63dbaf90ad525551c" + version "1.0.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-1.0.8.tgz#3fa0d91fde3827d6509d83b43444da56a2796795" + integrity sha512-vetRFbN1SXSPfP3ClIiYnxTrXquSqakBEOoB5JESn0SVcSYzpu6ougjakpKnskGctYdlNpwf+riUHSkG7d4XUw== domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= dependencies: dom-serializer "0" domelementtype "1" @@ -3629,35 +4512,34 @@ domutils@1.5.1: domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.0: +dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" -duplexer2@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + integrity sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -3667,36 +4549,50 @@ duplexify@^3.4.2, duplexify@^3.6.0: earcut@^2.0.6, earcut@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.3.tgz#ca579545f351941af7c3d0df49c9f7d34af99b0c" + integrity sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A== ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" editions@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" + integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== editor@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= ejs@^2.5.9: version "2.6.1" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" + integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: +electron-to-chromium@^1.2.7: version "1.3.51" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.51.tgz#6a42b49daaf7f22a5b37b991daf949f34dbdb9b5" + integrity sha1-akK0nar38ipbN7mR2vlJ8029ubU= + +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62: + version "1.3.70" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.70.tgz#ded377256d92d81b4257d36c65aa890274afcfd2" + integrity sha512-WYMjqCnPVS5JA+XvwEnpwucJpVi2+q9cdCFpbhxgWGsCtforFBEkuP9+nCyy/wnU/0SyLcLRIeZct9ayMGcXoQ== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3709,26 +4605,31 @@ elliptic@^6.0.0: emoji-regex@^6.1.0: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" @@ -3737,48 +4638,86 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= envinfo@^5.7.0: version "5.10.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + integrity sha512-rXbzXWvnQxy+TcqZlARbWVQwgGVVouVJgFZhLVN5htjLxl1thstrP2ZGi0pXC309AbK7gVOPU+ulz/tmpCI7iw== + +enzyme-adapter-react-16@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.5.0.tgz#50af8d76a45fe0915de932bd95d34cdca75c0be3" + integrity sha512-R2LcVvMB2UwPH763d5jDtVedAIcEj+uZjOnq0nd1sOUs6z8TDbyHDvt8VwfrS4wMt7CawoyPmH0XzC8MtEqqDw== + dependencies: + enzyme-adapter-utils "^1.8.0" + function.prototype.name "^1.1.0" + object.assign "^4.1.0" + object.values "^1.0.4" + prop-types "^15.6.2" + react-is "^16.4.2" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.0.tgz#ee9f07250663a985f1f2caaf297720787da559f1" + integrity sha512-K9U2RGr1pvWPGEAIRQRVH4UdlqzpfLsKonuHyAK6lxu46yfGsMDVlO3+YvQwQpVjVw8eviEVIOmlFAnMbIhv/w== + dependencies: + function.prototype.name "^1.1.0" + object.assign "^4.1.0" + prop-types "^15.6.2" -enzyme@^2.0.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" +enzyme@^3.3.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.6.0.tgz#d213f280a258f61e901bc663d4cc2d6fd9a9dec8" + integrity sha512-onsINzVLGqKIapTVfWkkw6bYvm1o4CyJ9s8POExtQhAkVa4qFDW6DGCQGRy/5bfZYk+gmUbMNyayXiWDzTkHFQ== dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" + array.prototype.flat "^1.2.1" + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.1.0" + has "^1.0.3" + is-boolean-object "^1.0.0" + is-callable "^1.1.4" + is-number-object "^1.0.3" + is-string "^1.0.4" is-subset "^0.1.1" - lodash "^4.17.4" + lodash.escape "^4.0.1" + lodash.isequal "^4.5.0" + object-inspect "^1.6.0" object-is "^1.0.1" - object.assign "^4.0.4" + object.assign "^4.1.0" object.entries "^1.0.4" object.values "^1.0.4" - prop-types "^15.5.10" - uuid "^3.0.1" + raf "^3.4.0" + rst-selector-parser "^2.2.3" + string.prototype.trim "^1.1.2" errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= dependencies: string-template "~0.2.1" xtend "~4.0.0" -es-abstract@^1.6.1, es-abstract@^1.7.0: +es-abstract@^1.10.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -3789,14 +4728,16 @@ es-abstract@^1.6.1, es-abstract@^1.7.0: es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + integrity sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0= dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" is-symbol "^1.0.1" es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.45" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" + version "0.10.46" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" + integrity sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw== dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" @@ -3805,6 +4746,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= dependencies: d "1" es5-ext "^0.10.35" @@ -3813,6 +4755,7 @@ es6-iterator@~2.0.3: es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= dependencies: d "1" es5-ext "~0.10.14" @@ -3820,18 +4763,22 @@ es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@~3.1.1: es6bindall@^0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/es6bindall/-/es6bindall-0.0.9.tgz#71e00afa69f8dd59ac5ac898a0d31c978df817d5" + integrity sha1-ceAK+mn43VmsWsiYoNMcl434F9U= escape-latex@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.1.0.tgz#c0a94a51eb8c73c3a67a95cc90fbb626cef54539" + version "1.1.1" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.1.1.tgz#657d8632af8849a5db8766778d4a43da9dec3376" + integrity sha512-N2D6Z2kXh8x/pQNQH+natXDCwrzghhXMRII5dZ518mlTLeuba80NL0LCQyaahqOrAidoLivmmG6GKPnGhHse+A== escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= dependencies: esprima "^2.7.1" estraverse "^1.9.1" @@ -3841,8 +4788,9 @@ escodegen@1.8.x: source-map "~0.2.0" escodegen@^1.6.1, escodegen@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.10.0.tgz#f647395de22519fbd0d928ffcf1d17e0dec2603e" + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3854,6 +4802,7 @@ escodegen@^1.6.1, escodegen@^1.8.1: escodegen@~1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3865,24 +4814,28 @@ escodegen@~1.9.0: eslint-config-airbnb-base@^11.3.0: version "11.3.2" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" + integrity sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w== dependencies: eslint-restricted-globals "^0.1.1" eslint-config-airbnb@^15.0.1: version "15.1.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" + integrity sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ== dependencies: eslint-config-airbnb-base "^11.3.0" eslint-config-prettier@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + version "2.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" + integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== dependencies: get-stdin "^5.0.1" eslint-import-resolver-node@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" @@ -3890,13 +4843,15 @@ eslint-import-resolver-node@^0.3.1: eslint-module-utils@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= dependencies: debug "^2.6.8" pkg-dir "^1.0.0" eslint-plugin-import@^2.2.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed" + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== dependencies: contains-path "^0.1.0" debug "^2.6.8" @@ -3912,6 +4867,7 @@ eslint-plugin-import@^2.2.0: eslint-plugin-jsx-a11y@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" + integrity sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ== dependencies: aria-query "^0.7.0" array-includes "^3.0.3" @@ -3922,16 +4878,19 @@ eslint-plugin-jsx-a11y@^5.1.1: jsx-ast-utils "^1.4.0" eslint-plugin-prettier@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.1.tgz#de902b4a66b7bca24296429a59a1cc04020ccbbd" + version "2.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad" + integrity sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og== dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" eslint-plugin-react@^7.0.1: - version "7.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50" + version "7.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" + integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== dependencies: + array-includes "^3.0.3" doctrine "^2.1.0" has "^1.0.3" jsx-ast-utils "^2.0.1" @@ -3940,10 +4899,20 @@ eslint-plugin-react@^7.0.1: eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= -eslint-scope@3.7.1, eslint-scope@^3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3951,6 +4920,7 @@ eslint-scope@3.7.1, eslint-scope@^3.7.1: eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3958,10 +4928,12 @@ eslint-scope@^4.0.0: eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== eslint@^4.19.0: version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + resolved "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -4005,6 +4977,7 @@ eslint@^4.19.0: espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== dependencies: acorn "^5.5.0" acorn-jsx "^3.0.0" @@ -4012,61 +4985,82 @@ espree@^3.5.4: esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esprima@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" - -esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= esquery@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -4076,23 +5070,34 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -4105,22 +5110,26 @@ expand-brackets@^2.1.4: expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" expect.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.2.0.tgz#1028533d2c1c363f74a6796ff57ec0520ded2be1" + integrity sha1-EChTPSwcNj90pnlv9X7AUg3tK+E= exports-loader@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.7.0.tgz#84881c784dea6036b8e1cd1dac3da9b6409e21a5" + integrity sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA== dependencies: loader-utils "^1.1.0" source-map "0.5.0" @@ -4128,27 +5137,32 @@ exports-loader@^0.7.0: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extent@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/extent/-/extent-0.2.0.tgz#efad0869682d3628bdbeeb140c1f4d0023e6bec4" + integrity sha1-760IaWgtNii9vusUDB9NACPmvsQ= external-editor@^2.0.4, external-editor@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" @@ -4157,12 +5171,14 @@ external-editor@^2.0.4, external-editor@^2.1.0: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -4173,17 +5189,30 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" + integrity sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw= + dependencies: + concat-stream "1.6.0" + debug "2.6.9" + mkdirp "0.5.0" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= falafel@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" + integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= dependencies: acorn "^5.0.0" foreach "^2.0.5" @@ -4193,18 +5222,22 @@ falafel@^2.1.0: fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-diff@^1.0.1, fast-diff@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== fast-glob@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + integrity sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.0.1" @@ -4216,30 +5249,36 @@ fast-glob@^2.0.2: fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastdom@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/fastdom/-/fastdom-1.0.8.tgz#10f9d36998fd6efae30e529597d788e750c9febb" + integrity sha512-UvXbYr/nsu4Z2XIjJXtJEMv5yhS9GIyEuZBZus6jOYSo3zMsw6/FtWUAeskmDK6tKnfPSo6renooyNWuq00ZKw== dependencies: strictdom "^1.0.1" fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + integrity sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg= fault@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" + integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== dependencies: format "^0.2.2" fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -4249,9 +5288,17 @@ fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" @@ -4259,12 +5306,14 @@ figures@^1.7.0: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" @@ -4272,6 +5321,7 @@ file-entry-cache@^2.0.0: file-loader@^1.1.11: version "1.1.11" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== dependencies: loader-utils "^1.0.2" schema-utils "^0.4.5" @@ -4279,10 +5329,12 @@ file-loader@^1.1.11: filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= fileset@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= dependencies: glob "^7.0.3" minimatch "^3.0.3" @@ -4290,6 +5342,7 @@ fileset@^2.0.2: fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -4300,6 +5353,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -4309,6 +5363,7 @@ fill-range@^4.0.0: find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= dependencies: commondir "^1.0.1" make-dir "^1.0.0" @@ -4317,6 +5372,7 @@ find-cache-dir@^1.0.0: find-up@1.1.2, find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -4324,18 +5380,21 @@ find-up@1.1.2, find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" first-chunk-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + integrity sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA= dependencies: readable-stream "^2.0.2" flat-cache@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= dependencies: circular-json "^0.3.1" del "^2.0.2" @@ -4345,14 +5404,17 @@ flat-cache@^1.2.1: flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= flow-parser@^0.*: version "0.76.0" resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.76.0.tgz#f7d4c4d26df74805c3a0babd5d8ea4c2cd57190b" + integrity sha512-p+K8OKiMlq8AIZH8KTydHEGUUd71AqfCL+zTJNsdHtQmX3i3eaeIysF83Ad6Oo7OQcHCj3vocb/EHYiEyq+ZBg== flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -4360,36 +5422,29 @@ flush-write-stream@^1.0.0: for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" -foreach@^2.0.5, foreach@~2.0.1: +foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.0.8.tgz#0890cd1005c5ccecc0b9d24a88052c92442d0db5" - dependencies: - async "~0.2.7" - combined-stream "~0.0.4" - mime "~1.2.2" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + integrity sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU= dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -4398,6 +5453,7 @@ form-data@~2.0.0: form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -4406,6 +5462,7 @@ form-data@~2.1.1: form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= dependencies: asynckit "^0.4.0" combined-stream "1.0.6" @@ -4414,37 +5471,53 @@ form-data@~2.3.1: format@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= fraction.js@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.4.tgz#04e567110718adf7b52974a10434ab4c67a5183e" + integrity sha512-aK/oGatyYLTtXRHjfEsytX5fieeR5H4s8sLorzcT12taFS+dbMZejnvm9gRa8mZAPwci24ucjq9epDyaq5u8Iw== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" +fs-extra@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" + integrity sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" fs-readdir-recursive@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs-vacuum@~1.2.9: version "1.2.10" resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= dependencies: graceful-fs "^4.1.2" path-is-inside "^1.0.1" @@ -4453,6 +5526,7 @@ fs-vacuum@~1.2.9: fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -4462,10 +5536,12 @@ fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0, fsevents@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== dependencies: nan "^2.9.2" node-pre-gyp "^0.10.0" @@ -4473,6 +5549,7 @@ fsevents@^1.0.0, fsevents@^1.2.2: fstream-ignore@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= dependencies: fstream "^1.0.0" inherits "2" @@ -4481,6 +5558,7 @@ fstream-ignore@^1.0.0: fstream-npm@~1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.2.1.tgz#08c4a452f789dcbac4c89a4563c902b2c862fd5b" + integrity sha512-iBHpm/LmD1qw0TlHMAqVd9rwdU6M+EHRUnPkXpRi5G/Hf0FIFH+oZFryodAU2MFNfGRh/CzhUFlMKV3pdeOTDw== dependencies: fstream-ignore "^1.0.0" inherits "2" @@ -4488,19 +5566,22 @@ fstream-npm@~1.2.0: fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.0.0: +function.prototype.name@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" + integrity sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -4509,14 +5590,17 @@ function.prototype.name@^1.0.0: functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= fuse.js@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.1.tgz#6320cb94ce56ec9755c89ade775bcdbb0358d425" + integrity sha1-YyDLlM5W7JdVyJred1vNuwNY1CU= gauge@~2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" + integrity sha1-01MBrRjpaQK0dR3LvkD0IYuUKkY= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -4531,6 +5615,7 @@ gauge@~2.6.0: gauge@~2.7.1, gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -4542,24 +5627,30 @@ gauge@~2.7.1, gauge@~2.7.3: wide-align "^1.1.0" generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" generate-object-property@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= dependencies: is-property "^1.0.0" generic-names@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" + integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= dependencies: loader-utils "^0.2.16" geojson-coords@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/geojson-coords/-/geojson-coords-0.0.0.tgz#dcdba86612da6be6b9511f16f38e90fcccb6dd75" + integrity sha1-3NuoZhLaa+a5UR8W846Q/My23XU= dependencies: geojson-flatten "~0.1.0" geojson-normalize "0.0.0" @@ -4567,6 +5658,7 @@ geojson-coords@0.0.0: geojson-extent@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/geojson-extent/-/geojson-extent-0.3.2.tgz#2ee5f3fabf0c7659c0509e05782910dfe1df27e8" + integrity sha1-LuXz+r8MdlnAUJ4FeCkQ3+HfJ+g= dependencies: extent "0.2.0" geojson-coords "0.0.0" @@ -4576,6 +5668,7 @@ geojson-extent@^0.3.2: geojson-flatten@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/geojson-flatten/-/geojson-flatten-0.1.0.tgz#c1c6f96bbb5713114c9b14a0b4ba80f47e4622cb" + integrity sha1-wcb5a7tXExFMmxSgtLqA9H5GIss= dependencies: concat-stream "~1.2.1" minimist "0.0.5" @@ -4584,10 +5677,12 @@ geojson-flatten@~0.1.0: geojson-normalize@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/geojson-normalize/-/geojson-normalize-0.0.0.tgz#2dbc3678cd1b31b8179e876bda70cd120dde35c0" + integrity sha1-Lbw2eM0bMbgXnodr2nDNEg3eNcA= geojson-rewind@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/geojson-rewind/-/geojson-rewind-0.3.1.tgz#22240797c847cc2f0c1d313e4aa0c915afa7f29d" + integrity sha1-IiQHl8hHzC8MHTE+SqDJFa+n8p0= dependencies: "@mapbox/geojson-area" "0.2.2" concat-stream "~1.6.0" @@ -4595,127 +5690,114 @@ geojson-rewind@^0.3.0: sharkdown "^0.1.0" geojson-vt@^3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.1.3.tgz#f5185ea3b476832008bd824039bccdf14951f2fb" + version "3.2.0" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.0.tgz#039cea549df5f892c48cff8eb66c2e217d61c241" + integrity sha512-qk7sEv7dMfuGzflwClsgtO1fWPut/TqCInWEEUJc/Ofn4tmqBGznnPv3eUdxtwMkulMaAwSL3osHiyN03XJd/w== geolib@^2.0.24: version "2.0.24" resolved "https://registry.yarnpkg.com/geolib/-/geolib-2.0.24.tgz#eb3d7fbc65f5ea3354a5af6054563ebe9f33e5f4" + integrity sha512-NR0AyYyEnGrFS9JvSFmmotQDxVCORJgDHdvBwSatxl5aHarOLMh3KuGI83bCvCfObjfoEiDe8Ung8GGLGAtthw== get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getos@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.0.tgz#db3aa4df15a3295557ce5e81aa9e3e5cdfaa6567" + integrity sha512-i9vrxtDu5DlLVFcrbqUqGWYlZN/zZ4pGMICCAcZoYsX3JA54nYp8r5EThw5K+m2q3wszkx4Th746JstspB0H4Q== + dependencies: + async "2.4.0" getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" gettext-parser@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.1.0.tgz#2c5a6638d893934b9b55037d0ad82cb7004b2679" + integrity sha1-LFpmONiTk0ubVQN9CtgstwBLJnk= dependencies: encoding "^0.1.11" gh-got@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0" + integrity sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw== dependencies: got "^7.0.0" is-plain-obj "^1.1.0" -ghauth@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ghauth/-/ghauth-3.0.0.tgz#8292a24ef47899f180a39c780c4809561294bdbc" - dependencies: - application-config "~0.1.1" - bl "~0.9.4" - hyperquest "~1.2.0" - mkdirp "~0.5.0" - read "~1.0.5" - xtend "~4.0.0" - -github-changes@^1.0.4: - version "1.1.2" - resolved "https://registry.yarnpkg.com/github-changes/-/github-changes-1.1.2.tgz#0411c1995dd73541a3b0b9cd341073613d02120b" - dependencies: - bluebird "1.0.3" - ghauth "3.0.0" - github "0.1.16" - github-commit-stream "0.1.0" - lodash "2.4.1" - moment-timezone "0.5.5" - nomnom "1.6.2" - parse-link-header "0.1.0" - semver "5.4.1" - -github-commit-stream@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/github-commit-stream/-/github-commit-stream-0.1.0.tgz#dbcdb7b267967186b70cc736391830da6368d7a1" - dependencies: - async "~0.2.9" - parse-link-header "~0.1.0" - request "~2.22.0" - through "~2.3.4" - github-username@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417" + integrity sha1-y+KABBiDIG2kISrp5LXxacML9Bc= dependencies: gh-got "^6.0.0" -github@0.1.16: - version "0.1.16" - resolved "https://registry.yarnpkg.com/github/-/github-0.1.16.tgz#895d2a85b0feb7980d89ac0ce4f44dcaa03f17b5" - gl-mat3@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gl-mat3/-/gl-mat3-1.0.0.tgz#89633219ca429379a16b9185d95d41713453b912" + integrity sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI= gl-mat4@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26" + integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA== gl-quat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gl-quat/-/gl-quat-1.0.0.tgz#0945ec923386f45329be5dc357b1c8c2d47586c5" + integrity sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU= dependencies: gl-mat3 "^1.0.0" gl-vec3 "^1.0.3" gl-vec4 "^1.0.0" gl-vec2@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gl-vec2/-/gl-vec2-1.2.0.tgz#b0af95d2a582e3ad818446a1800093fc60b8b212" + version "1.3.0" + resolved "https://registry.yarnpkg.com/gl-vec2/-/gl-vec2-1.3.0.tgz#83d472ed46034de8e09cbc857123fb6c81c51199" + integrity sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A== gl-vec3@^1.0.3: version "1.1.3" resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826" + integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw== gl-vec4@^1.0.0, gl-vec4@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gl-vec4/-/gl-vec4-1.0.1.tgz#97d96878281b14b532cbce101785dfd1cb340964" + integrity sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ= glob-all@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + integrity sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs= dependencies: glob "^7.0.5" yargs "~1.2.6" @@ -4723,6 +5805,7 @@ glob-all@^3.1.0: glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -4730,12 +5813,14 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -4743,10 +5828,12 @@ glob-parent@^3.1.0: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@5.x: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" @@ -4757,6 +5844,7 @@ glob@5.x: glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4765,9 +5853,22 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.0: +glob@7.1.2, glob@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.0: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4779,6 +5880,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.0: global-cache@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/global-cache/-/global-cache-1.2.1.tgz#39ca020d3dd7b3f0934c52b75363f8d53312c16d" + integrity sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA== dependencies: define-properties "^1.1.2" is-symbol "^1.0.1" @@ -4786,12 +5888,14 @@ global-cache@^1.2.0: global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" @@ -4800,6 +5904,7 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -4810,14 +5915,17 @@ global-prefix@^1.0.1: globals@^11.0.1, globals@^11.1.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + integrity sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg== globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: array-union "^1.0.1" arrify "^1.0.0" @@ -4829,6 +5937,7 @@ globby@^5.0.0: globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -4840,6 +5949,7 @@ globby@^7.1.1: globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -4852,12 +5962,14 @@ globby@^8.0.1: good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: delegate "^3.1.2" got@^6.7.1: version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + resolved "http://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -4874,6 +5986,7 @@ got@^6.7.1: got@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== dependencies: decompress-response "^3.2.0" duplexer3 "^0.1.4" @@ -4893,6 +6006,7 @@ got@^7.0.0: got@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" cacheable-request "^2.1.1" @@ -4915,14 +6029,17 @@ got@^8.3.1: graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@~4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= gray-matter@^3.0.8: version "3.1.1" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac" + integrity sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA== dependencies: extend-shallow "^2.0.1" js-yaml "^3.10.0" @@ -4932,42 +6049,50 @@ gray-matter@^3.0.8: grid-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.0.0.tgz#ad2c5d54ce5b35437faff1d70a9aeb3d1d261110" + integrity sha1-rSxdVM5bNUN/r/HXCprrPR0mERA= grouped-queue@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" + integrity sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw= dependencies: lodash "^4.17.2" growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= hammerjs@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" + integrity sha1-BO93hiz/K7edMPdpIJWTAiK/YPE= handlebars@^4.0.1, handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + version "4.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== dependencies: - async "^1.4.0" + async "^2.5.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" + uglify-js "^3.1.4" har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0= dependencies: chalk "^1.1.1" commander "^2.9.0" @@ -4977,6 +6102,7 @@ har-validator@~2.0.6: har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= dependencies: ajv "^4.9.1" har-schema "^1.0.5" @@ -4984,6 +6110,7 @@ har-validator@~4.2.1: har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0= dependencies: ajv "^5.1.0" har-schema "^2.0.0" @@ -4991,42 +6118,56 @@ har-validator@~5.0.3: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-color@^0.1.7, has-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -5035,6 +6176,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -5043,41 +6185,48 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.4.tgz#8b50e1f35d51bd01e5ed9ece4dbe3549ccfa0a3c" + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + integrity sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA== dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" hast-util-parse-selector@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.1.1.tgz#fc06985272f5d204a25187f002bb916521e74f3a" + integrity sha512-FlrdvixBzVHYSqtvGAl0wjH1hiCY5NEfs+zfFNAZNWKMVj4pH6x+uPPyrhvzU3NrwOqYVX6Essv4d5n+0b6faA== hastscript@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-3.1.0.tgz#66628ba6d7f1ad07d9277dd09028aba7f4934599" + integrity sha512-8V34dMSDT1Ik+ZSgTzCLdyp89MrWxcxctXPxhmb72GQj1Xkw1aHPM9UaHCWewvH2Q+PVkYUm4ZJVw4T0dgEGNA== dependencies: camelcase "^3.0.0" comma-separated-tokens "^1.0.0" @@ -5085,18 +6234,10 @@ hastscript@^3.1.0: property-information "^3.0.0" space-separated-tokens "^1.0.0" -hawk@~0.13.0: - version "0.13.1" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-0.13.1.tgz#3617958821f58311e4d7f6de291fca662b412ef4" - dependencies: - boom "0.4.x" - cryptiles "0.2.x" - hoek "0.8.x" - sntp "0.2.x" - hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= dependencies: boom "2.x.x" cryptiles "2.x.x" @@ -5106,42 +6247,46 @@ hawk@~3.1.3: he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== highlight.js@~9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@0.8.x: - version "0.8.5" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.8.5.tgz#1e9fd770ef7ebe0274adfcb5b0806a025a5e4e9f" - -hoek@0.9.x: - version "0.9.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" - hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= hoist-non-react-statics@^1.0.0, hoist-non-react-statics@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + integrity sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs= hoist-non-react-statics@^2.1.0, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -5149,30 +6294,46 @@ home-or-tmp@^2.0.0: homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw= dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@^2.4.2: - version "2.6.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.1.tgz#6e4cee78b01bb849dcf93527708c69fdbee410df" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== hosted-git-info@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs= + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + integrity sha1-ZouTd26q5V696POtRkswekljYl4= html-encoding-sniffer@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" @@ -5184,18 +6345,12 @@ htmlparser2@^3.9.1: http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - -http-signature@~0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" - dependencies: - asn1 "0.1.11" - assert-plus "^0.1.5" - ctype "0.5.3" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" @@ -5204,6 +6359,7 @@ http-signature@~1.1.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -5212,85 +6368,95 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -hyperquest@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperquest/-/hyperquest-1.2.0.tgz#39e1fef66888dc7ce0dec6c0dd814f6fc8944ad5" - dependencies: - duplexer2 "~0.0.2" - through2 "~0.6.3" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= hyphenate-style-name@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" + integrity sha1-MRYKNpMK2vH8BMYHT360FGXU7Es= iconv-lite@0.2: version "0.2.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" + resolved "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" + integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg= iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" icss-replace-symbols@^1.0.2, icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= icss-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= dependencies: postcss "^6.0.1" icss-utils@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" + integrity sha1-7nDTroysOMa+XtkehRsn7tNDrQ8= dependencies: postcss "^6.0.2" -ieee754@^1.1.11, ieee754@^1.1.4, ieee754@^1.1.6: +ieee754@^1.1.4, ieee754@^1.1.6: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== iferr@^0.1.5, iferr@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-styles@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ignore-styles/-/ignore-styles-5.0.1.tgz#b49ef2274bdafcd8a4880a966bfe38d1a0bf4671" + integrity sha1-tJ7yJ0va/NikiAqWa/440aC/RnE= ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: minimatch "^3.0.4" ignore@^3.3.3, ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== image-size@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= immutable@^3.8.1, immutable@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== dependencies: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" @@ -5298,6 +6464,7 @@ import-local@^1.0.0: imports-loader@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253" + integrity sha1-8gS180cCoywdt9SNidXoZ6BEElM= dependencies: loader-utils "^1.0.2" source-map "^0.5.6" @@ -5305,28 +6472,34 @@ imports-loader@^0.7.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -indexof@0.0.1, indexof@~0.0.1: +indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4, inflight@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -5334,18 +6507,22 @@ inflight@^1.0.4, inflight@~1.0.5: inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== init-package-json@~1.9.4: version "1.9.6" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.6.tgz#789fc2b74466a4952b9ea77c0575bc78ebd60a61" + integrity sha1-eJ/Ct0RmpJUrnqd8BXW8eOvWCmE= dependencies: glob "^7.1.1" npm-package-arg "^4.0.0 || ^5.0.0" @@ -5359,6 +6536,7 @@ init-package-json@~1.9.4: inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.6: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" + integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ= dependencies: bowser "^1.7.3" css-in-js-utils "^2.0.0" @@ -5366,6 +6544,7 @@ inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.6: inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -5385,6 +6564,7 @@ inquirer@^3.0.6: inquirer@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -5403,10 +6583,12 @@ inquirer@^5.2.0: interpret@^1.0.0, interpret@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= into-stream@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= dependencies: from2 "^2.1.1" p-is-promise "^1.1.0" @@ -5414,36 +6596,43 @@ into-stream@^3.1.0: invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-alphabetical@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== is-alphanumerical@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -5451,56 +6640,96 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= + is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-builtin-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: +is-callable@^1.1.1, is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@1.0.10: + version "1.0.10" + resolved "http://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + integrity sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4= + dependencies: + ci-info "^1.0.0" is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= dependencies: - ci-info "^1.0.0" + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-decimal@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -5509,80 +6738,100 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= dependencies: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== -is-installed-globally@^0.1.0: +is-installed-globally@0.1.0, is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" @@ -5590,10 +6839,12 @@ is-installed-globally@^0.1.0: is-my-ip-valid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + version "2.19.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz#8fd6e40363cd06b963fa877d444bfb5eddc62175" + integrity sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q== dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -5604,182 +6855,231 @@ is-my-json-valid@^2.12.4: is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-obj@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== dependencies: symbol-observable "^1.1.0" is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-property@^1.0.0: +is-property@^1.0.0, is-property@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-retina@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-retina/-/is-retina-1.0.3.tgz#d7401b286bea2ae37f62477588de504d0b8647e3" + integrity sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M= is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= is-scoped@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" + integrity sha1-RJypgpnnEwOCViieyytUDcQ3yzA= dependencies: scoped-regex "^1.0.0" is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== dependencies: html-comment-regex "^1.1.0" is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-whitespace-character@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" + integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" + integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isbinaryfile@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + integrity sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" @@ -5787,20 +7087,21 @@ isomorphic-fetch@^2.1.1: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-api@^1.0.0-alpha: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== dependencies: async "^2.1.4" - compare-versions "^3.1.0" fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" @@ -5808,16 +7109,19 @@ istanbul-api@^1.0.0-alpha: istanbul-lib-coverage@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" + integrity sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A== istanbul-lib-hook@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" + integrity sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg== dependencies: append-transform "^1.0.0" istanbul-lib-instrument@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" + integrity sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ== dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -5830,6 +7134,7 @@ istanbul-lib-instrument@^1.10.1: istanbul-lib-report@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" + integrity sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA== dependencies: istanbul-lib-coverage "^1.2.0" mkdirp "^0.5.1" @@ -5839,6 +7144,7 @@ istanbul-lib-report@^1.1.4: istanbul-lib-source-maps@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" + integrity sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA== dependencies: debug "^3.1.0" istanbul-lib-coverage "^1.2.0" @@ -5849,12 +7155,14 @@ istanbul-lib-source-maps@^1.2.4: istanbul-reports@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + integrity sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA== dependencies: handlebars "^4.0.3" istanbul@^1.0.0-alpha: version "1.0.0-alpha.2" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-1.0.0-alpha.2.tgz#06096bc08e98baad744aae46962d8df9fac63d08" + integrity sha1-BglrwI6Yuq10Sq5Gli2N+frGPQg= dependencies: abbrev "1.0.x" async "1.x" @@ -5868,6 +7176,7 @@ istanbul@^1.0.0-alpha: istextorbinary@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" + integrity sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw== dependencies: binaryextensions "2" editions "^1.3.3" @@ -5876,6 +7185,7 @@ istextorbinary@^2.2.1: isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" @@ -5883,42 +7193,60 @@ isurl@^1.0.0-alpha5: javascript-natural-sort@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k= jed@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4" + integrity sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ= jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== jju@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= jquery@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.1.1.tgz#347c1c21c7e004115e0a4da32cece041fad3c8a3" + integrity sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM= jquery@>=1.7: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" + integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== js-base64@^2.1.9: version "2.4.5" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" + integrity sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ== js-search@^1.3.1: version "1.4.2" resolved "https://registry.yarnpkg.com/js-search/-/js-search-1.4.2.tgz#59a91e117d6badb20bf0d7643ba7577d5a81d7e2" + integrity sha1-WakeEX1rrbIL8NdkO6dXfVqB1+I= js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.x, js-yaml@^3.10.0, js-yaml@^3.6.1, js-yaml@^3.7.0, js-yaml@^3.9.1: +js-yaml@3.x, js-yaml@^3.10.0, js-yaml@^3.6.1, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5926,6 +7254,7 @@ js-yaml@3.x, js-yaml@^3.10.0, js-yaml@^3.6.1, js-yaml@^3.7.0, js-yaml@^3.9.1: js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= dependencies: argparse "^1.0.7" esprima "^2.6.0" @@ -5933,10 +7262,12 @@ js-yaml@~3.7.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jscodeshift@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.1.tgz#da91a1c2eccfa03a3387a21d39948e251ced444a" + integrity sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ== dependencies: async "^1.5.0" babel-plugin-transform-flow-strip-types "^6.8.0" @@ -5957,6 +7288,7 @@ jscodeshift@^0.4.0: jscodeshift@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.1.tgz#4af6a721648be8638ae1464a190342da52960c33" + integrity sha512-sRMollbhbmSDrR79JMAnhEjyZJlQQVozeeY9A6/KNuV26DNcuB3mGSCWXp0hks9dcwRNOELbNOiwraZaXXRk5Q== dependencies: babel-plugin-transform-flow-strip-types "^6.8.0" babel-preset-es2015 "^6.9.0" @@ -5977,6 +7309,7 @@ jscodeshift@^0.5.0: jsdom@9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + integrity sha1-6MVG//ywbADUgzyoRBD+1/igl9Q= dependencies: abab "^1.0.3" acorn "^4.0.4" @@ -6001,82 +7334,110 @@ jsdom@9.12.0: jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= jsesc@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-bigint@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e" + integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4= + dependencies: + bignumber.js "^7.0.0" json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-helpfulerror@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" + integrity sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w= dependencies: jju "^1.1.0" json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: jsonify "~0.0.0" -json-stringify-safe@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz#77c271aaea54302e68efeaccb56abbf06a9b1a54" - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -6086,70 +7447,97 @@ jsprim@^1.2.2: jsx-ast-utils@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + integrity sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE= jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= dependencies: array-includes "^3.0.3" just-extend@^1.1.27: version "1.1.27" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" + integrity sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g== kdbush@^1.0.0, kdbush@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-1.0.1.tgz#3cbd03e9dead9c0f6f66ccdb96450e5cecc640e0" + resolved "http://registry.npmjs.org/kdbush/-/kdbush-1.0.1.tgz#3cbd03e9dead9c0f6f66ccdb96450e5cecc640e0" + integrity sha1-PL0D6d6tnA9vZszblkUOXOzGQOA= keycode@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" + integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= keyv@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: json-buffer "3.0.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= dependencies: package-json "^4.0.0" +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" less-loader@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" + integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== dependencies: clone "^2.1.1" loader-utils "^1.1.0" @@ -6158,6 +7546,7 @@ less-loader@^4.1.0: less@^2.6.1: version "2.7.3" resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ== optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" @@ -6171,6 +7560,7 @@ less@^2.6.1: levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -6178,10 +7568,26 @@ levn@^0.3.0, levn@~0.3.0: listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" listr-update-renderer@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + integrity sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc= dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -6195,15 +7601,39 @@ listr-update-renderer@^0.4.0: listr-verbose-renderer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" date-fns "^1.27.2" figures "^1.7.0" +listr@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + listr@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.1.tgz#8a7afa4a7135cee4c921d128e0b7dfc6e522d43d" + integrity sha512-MSMUUVN1f8aRnPi4034RkOqdiUlpYW+FqwFE3aL0uYNPRavkt2S2SsSpDDofn8BDpqv2RNnsdOcCHWsChcq77A== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" cli-truncate "^0.2.1" @@ -6224,7 +7654,8 @@ listr@^0.14.1: load-json-file@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -6234,6 +7665,7 @@ load-json-file@^2.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -6241,12 +7673,14 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + version "2.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" + integrity sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw== loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -6256,6 +7690,7 @@ loader-utils@^0.2.16: loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -6264,6 +7699,7 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -6271,16 +7707,19 @@ locate-path@^2.0.0: lockfile@~1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== dependencies: signal-exit "^3.0.2" lodash-es@^4.17.5, lodash-es@^4.2.1: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0" + integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q== lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" @@ -6288,14 +7727,17 @@ lodash._baseassign@^3.0.0: lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= lodash._basecreate@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= dependencies: lodash._createset "~4.0.0" lodash._root "~3.0.0" @@ -6303,38 +7745,37 @@ lodash._baseuniq@~4.6.0: lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= lodash.clonedeep@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= lodash.create@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= dependencies: lodash._baseassign "^3.0.0" lodash._basecreate "^3.0.0" @@ -6343,126 +7784,120 @@ lodash.create@3.1.1: lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= -lodash.flatten@^4.2.0: +lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= lodash.get@^4.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.has@^4.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= -lodash.isequal@^4.1.1: +lodash.isequal@^4.1.1, lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash.without@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - -lodash@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.1.tgz#5b7723034dda4d262e5a46fb2c58d7cc22f71420" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= lodash@3.x: version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + resolved "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.1, lodash@^4.0.8, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: +lodash@4.17.10, lodash@^4.0.1, lodash@^4.0.8, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg== -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" +lodash@^4.14.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -log-symbols@^2.1.0, log-symbols@^2.2.0: +log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= dependencies: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" @@ -6470,43 +7905,42 @@ log-update@^1.0.2: loglevelnext@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== dependencies: es6-symbol "^3.1.1" object.assign "^4.1.0" lolex@^2.2.0, lolex@^2.3.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.0.tgz#9c087a69ec440e39d3f796767cf1b2cdc43d5ea5" - -long@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - -long@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + version "2.7.5" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" + integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowlight@~1.9.1: version "1.9.2" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" + integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== dependencies: fault "^1.0.2" highlight.js "~9.12.0" @@ -6514,13 +7948,15 @@ lowlight@~1.9.1: lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -luma.gl@^5.1.4, luma.gl@^5.3.0: +luma.gl@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/luma.gl/-/luma.gl-5.3.0.tgz#a93b2f34489d8230eb6d8c871335800d9b83ee67" + integrity sha512-R4vgaPiRZ+8lBDnzhPYUPphRb/J1qmXX/pR0t7cj58HifMkwZjktUOoWGHQdoTn2rM+j1mGn21OP0liX3N4psw== dependencies: math.gl "^1.1.0" probe.gl "^1.0.0" @@ -6529,33 +7965,39 @@ luma.gl@^5.1.4, luma.gl@^5.3.0: magic-string@^0.22.4: version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + resolved "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== dependencies: vlq "^0.2.2" make-dir@^1.0.0, make-dir@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" mapbox-gl@0.45, mapbox-gl@^0.45.0: version "0.45.0" resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-0.45.0.tgz#af71cc824f0d7e51ccd5c505eaae411bc0910ccd" + integrity sha1-r3HMgk8NflHM1cUF6q5BG8CRDM0= dependencies: "@mapbox/gl-matrix" "^0.0.1" "@mapbox/jsonlint-lines-primitives" "^2.0.1" @@ -6587,33 +8029,27 @@ mapbox-gl@0.45, mapbox-gl@^0.45.0: markdown-escapes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" + integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== material-colors@^1.2.1: version "1.2.6" resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= math-random@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= math.gl@^1.1.0, math.gl@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-1.2.1.tgz#3c7da0ae4f3383116c24bc183533cc4d7b8065a9" - dependencies: - gl-mat3 "^1.0.0" - gl-mat4 "^1.1.4" - gl-quat "^1.0.0" - gl-vec2 "^1.0.0" - gl-vec3 "^1.0.3" - gl-vec4 "^1.0.1" - -math.gl@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-2.0.0.tgz#c41cf8f5cfce820161511c435d3f706eebd7deb0" + integrity sha512-uYsi1ryKZ+/Gniwo2DrHM8yEXs3BU9tmUrGAHPiUkABYOXfcIzDL9ww0j/6goh+oHUeNa38+Li3JY3fcPuI7Wg== dependencies: gl-mat3 "^1.0.0" gl-mat4 "^1.1.4" @@ -6625,10 +8061,12 @@ math.gl@^2.0.0: mathfn@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mathfn/-/mathfn-1.0.1.tgz#650a0b183b0102debe94e42a807dc6b4d2cc57bd" + integrity sha512-SaTtaoLGH45+6oaX/bovwC5vdK5lv/xklS59YZ4+cYbQ4WhZ5Npo+15yFr1bMidoI19sPpcTN23D2YPpzTZZBQ== mathjs@^3.20.2: version "3.20.2" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.20.2.tgz#3218aebde7de8cb5627c8fe3a1a216bf399ba91d" + resolved "http://registry.npmjs.org/mathjs/-/mathjs-3.20.2.tgz#3218aebde7de8cb5627c8fe3a1a216bf399ba91d" + integrity sha512-3f6/+uf1cUtIz1rYFz775wekl/UEDSQ3mU6xdxW7qzpvvhc2v28i3UtLsGTRB+u8OqDWoSX6Dz8gehaGFs6tCA== dependencies: complex.js "2.0.4" decimal.js "9.0.1" @@ -6642,6 +8080,7 @@ mathjs@^3.20.2: md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0= dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -6649,14 +8088,26 @@ md5.js@^1.3.4: md5@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= dependencies: charenc "~0.0.1" crypt "~0.0.1" is-buffer "~1.1.1" +mdn-data@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.2.0.tgz#eadd28b0f2d307cf27e71524609bfb749ebfc0b6" + integrity sha512-esDqNvsJB2q5V28+u7NdtdMg6Rmg4khQmAVSjUiX7BY/7haIv0K2yWM43hYp0or+3nvG7+UaTF1JHz31hgU1TA== + +mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== + mem-fs-editor@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz#d282a0c4e0d796e9eff9d75661f25f68f389af53" + integrity sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw== dependencies: commondir "^1.0.1" deep-extend "^0.6.0" @@ -6673,6 +8124,7 @@ mem-fs-editor@^4.0.0: mem-fs@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" + integrity sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw= dependencies: through2 "^2.0.0" vinyl "^1.1.0" @@ -6681,12 +8133,14 @@ mem-fs@^1.1.0: mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -6694,16 +8148,19 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: merge-source-map@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" + integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= dependencies: source-map "^0.5.6" merge2@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + integrity sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg== micromatch@^2.1.5, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -6722,6 +8179,7 @@ micromatch@^2.1.5, micromatch@^2.3.7: micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6740,85 +8198,98 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +mime-db@~1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw== mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + version "2.1.20" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A== dependencies: - mime-db "~1.33.0" + mime-db "~1.36.0" mime@^1.2.11: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.0.3: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" - -mime@~1.2.2, mime@~1.2.9: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mini-css-extract-plugin@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb" + version "0.4.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz#98d60fcc5d228c3e36a9bd15a1d6816d6580beb8" + integrity sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg== dependencies: - "@webpack-contrib/schema-utils" "^1.0.0-beta.0" loader-utils "^1.1.0" + schema-utils "^1.0.0" webpack-sources "^1.1.0" minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@0.0.5: version "0.0.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" + integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= minimist@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + integrity sha1-md9lelJXTCHJBXSX33QnkLK0wN4= minimist@~0.0.1: version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + version "2.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" @@ -6826,12 +8297,14 @@ minipass@^2.2.1, minipass@^2.3.3: minizlib@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA== dependencies: minipass "^2.2.1" mississippi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -6847,25 +8320,36 @@ mississippi@^2.0.0: mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mjolnir.js@^1.0.0, mjolnir.js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-1.2.1.tgz#ab3237afc5fbbc8aa4bafc965b10735c4bf8328c" + version "1.2.2" + resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-1.2.2.tgz#65938d6b443fed5b5c65456e6c934b01fece3610" + integrity sha512-mHUweKiDag0ieTANM6ao++9rktEqp6FgBALLH3fWRzgt6NF+BdcNMR06MMHHSQYCK9ywCjhg76FOy/efwdaEJg== dependencies: hammerjs "^2.0.8" +mkdirp@0.5.0: + version "0.5.0" + resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + integrity sha1-HXMHam35hs2TROFecfzAWkyavxI= + dependencies: + minimist "0.0.8" + mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -mocha@^3.2.0: +mocha@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== dependencies: browser-stdout "1.3.0" commander "2.9.0" @@ -6880,27 +8364,25 @@ mocha@^3.2.0: mkdirp "0.5.1" supports-color "3.1.2" -moment-timezone@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.5.tgz#a1d5410a72c18a5f293f2a2e62870a80ad432dae" - dependencies: - moment ">= 2.6.0" - -"moment@>= 2.6.0", moment@^2.20.1: +moment@^2.20.1: version "2.22.2" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y= -moment@^2.8.2: - version "2.22.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.1.tgz#529a2e9bf973f259c9643d237fda84de3a26e8ad" +moo@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" + integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== mousetrap@^1.6.1: version "1.6.2" resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.2.tgz#caadd9cf886db0986fb2fee59a82f6bd37527587" + integrity sha512-jDjhi7wlHwdO6q6DS7YRmSHcuI+RVxadBkLt3KHrhd3C2b+w5pKefg3oj5beTcHZyVFA9Aksf+yEE1y5jxUjVA== move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -6912,10 +8394,17 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multi-glob@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/multi-glob/-/multi-glob-1.0.1.tgz#e67d2ab4429d27606e6eb4db35094afc91788750" + integrity sha1-5n0qtEKdJ2BubrTbNQlK/JF4h1A= dependencies: async "1.x" glob "5.x" @@ -6924,6 +8413,7 @@ multi-glob@^1.0.1: multimatch@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= dependencies: array-differ "^1.0.0" array-union "^1.0.1" @@ -6931,20 +8421,24 @@ multimatch@^2.0.0: minimatch "^3.0.0" mustache@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + version "2.11.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" + integrity sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6961,33 +8455,50 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nearley@^2.7.10: + version "2.15.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.15.1.tgz#965e4e6ec9ed6b80fc81453e161efbcebb36d247" + integrity sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw== + dependencies: + moo "^0.4.3" + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + semver "^5.4.1" needle@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" sax "^1.2.4" neo-async@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" + version "2.5.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" + integrity sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw== next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== nise@^1.2.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.2.tgz#a9a3800e3994994af9e452333d549d60f72b8e8c" + version "1.4.5" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.5.tgz#979a97a19c48d627bb53703726ae8d53ce8d4b3e" + integrity sha512-OHRVvdxKgwZELf2DTgsJEIA4MOq8XWvpSUzoOXyxJ2mY0mMENWC66+70AShLR2z05B1dzrzWlUQJmJERlOUpZw== dependencies: - "@sinonjs/formatio" "^2.0.0" - just-extend "^1.1.27" + "@sinonjs/formatio" "3.0.0" + just-extend "^3.0.0" lolex "^2.3.2" path-to-regexp "^1.7.0" text-encoding "^0.6.4" @@ -6995,6 +8506,7 @@ nise@^1.2.0: node-alias@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/node-alias/-/node-alias-1.0.4.tgz#1f1b916b56b9ea241c0135f97ced6940f556f292" + integrity sha1-HxuRa1a56iQcATX5fO1pQPVW8pI= dependencies: chalk "^1.1.1" lodash "^4.2.0" @@ -7002,10 +8514,12 @@ node-alias@^1.0.4: node-dir@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + integrity sha1-VfuN62mQcHB/tn+RpGDwRIKUx30= node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -7013,6 +8527,7 @@ node-fetch@^1.0.1: node-gyp@~3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" + integrity sha1-3aVYOTs+y74kyea4cDxxGUxj+jY= dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -7032,6 +8547,7 @@ node-gyp@~3.4.0: node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -7058,12 +8574,13 @@ node-libs-browser@^2.0.0: vm-browserify "0.0.4" node-pre-gyp@^0.10.0: - version "0.10.2" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.2.tgz#e8945c20ef6795a20aac2b44f036eb13cf5146e3" + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" - needle "^2.2.0" + needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" @@ -7072,33 +8589,45 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-uuid@~1.4.0, node-uuid@~1.4.7: +node-releases@^1.0.0-alpha.11: + version "1.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.12.tgz#32e461b879ea76ac674e511d9832cf29da345268" + integrity sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q== + dependencies: + semver "^5.3.0" + +node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - -nomnom@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" - dependencies: - colors "0.5.x" - underscore "~1.4.4" + integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= nomnom@1.8.1, nomnom@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= dependencies: chalk "~0.4.0" underscore "~1.6.0" +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + integrity sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE= + dependencies: + colors "0.5.x" + underscore "~1.4.4" + "nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -7106,10 +8635,12 @@ nopt@^4.0.1: normalize-git-url@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" + integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q= normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, "normalize-package-data@~1.0.1 || ^2.0.0": version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -7119,6 +8650,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, "normalize-package normalize-package-data@~2.3.5: version "2.3.8" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + integrity sha1-2Bntoqne29H/pWPqQHHZNngilbs= dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -7128,16 +8660,19 @@ normalize-package-data@~2.3.5: normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-url@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: prepend-http "^2.0.0" query-string "^5.0.1" @@ -7146,23 +8681,32 @@ normalize-url@2.0.1: normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" query-string "^4.1.0" sort-keys "^1.0.0" +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== npm-cache-filename@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= -npm-check-updates@^2.14.0: +npm-check-updates@^2.14.2: version "2.14.2" resolved "https://registry.yarnpkg.com/npm-check-updates/-/npm-check-updates-2.14.2.tgz#1adb0d5fa48be8a6243cf335c7a2d6bbb0356e87" + integrity sha512-kyrLnGIImPb4WK/S/4AgsxKZ21ztC9KP+6aNTZN31cGJm4+GyH+aNq7ASvvJQO3iOdg/c60qLdZVtLTOn4l0gQ== dependencies: bluebird "^3.4.3" chalk "^1.1.3" @@ -7186,12 +8730,14 @@ npm-check-updates@^2.14.0: npm-install-checks@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" + integrity sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc= dependencies: semver "^2.3.0 || 3.x || 4 || 5" "npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.1.1, npm-package-arg@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.1.tgz#593303fdea85f7c422775f17f9eb7670f680e3ec" + integrity sha1-WTMD/eqF98Qid18X+et2cPaA4+w= dependencies: hosted-git-info "^2.1.5" semver "^5.1.0" @@ -7199,6 +8745,7 @@ npm-install-checks@~3.0.0: "npm-package-arg@^4.0.0 || ^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" + integrity sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA== dependencies: hosted-git-info "^2.4.2" osenv "^0.1.4" @@ -7206,8 +8753,9 @@ npm-install-checks@~3.0.0: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -7215,6 +8763,7 @@ npm-packlist@^1.1.6: npm-registry-client@~7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.2.1.tgz#c792266b088cc313f8525e7e35248626c723db75" + integrity sha1-x5ImawiMwxP4Ul5+NSSGJscj23U= dependencies: concat-stream "^1.5.2" graceful-fs "^4.1.6" @@ -7231,16 +8780,19 @@ npm-registry-client@~7.2.1: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-user-validate@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" + integrity sha1-UkZdUMLSApSlcSW5lrrtv1bFAEs= npm@^3, npm@^3.10.6: version "3.10.10" - resolved "https://registry.yarnpkg.com/npm/-/npm-3.10.10.tgz#5b1d577e4c8869d6c8603bc89e9cd1637303e46e" + resolved "http://registry.npmjs.org/npm/-/npm-3.10.10.tgz#5b1d577e4c8869d6c8603bc89e9cd1637303e46e" + integrity sha1-Wx1XfkyIadbIYDvInpzRY3MD5G4= dependencies: abbrev "~1.0.9" ansicolors "~0.3.2" @@ -7317,6 +8869,7 @@ npm@^3, npm@^3.10.6: npmi@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/npmi/-/npmi-2.0.1.tgz#32607657e1bd47ca857ab4e9d98f0a0cff96bcea" + integrity sha1-MmB2V+G9R8qFerTp2Y8KDP+WvOo= dependencies: npm "^3" semver "^4.1.0" @@ -7324,6 +8877,7 @@ npmi@^2.0.1: "npmlog@0 || 1 || 2 || 3", "npmlog@~2.0.0 || ~3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" + integrity sha1-LUb6h0M3r5SYovErtD2NC+SjaHM= dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -7333,6 +8887,7 @@ npmi@^2.0.1: npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -7342,87 +8897,95 @@ npmlog@^4.0.2: npmlog@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518= dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.1" set-blocking "~2.0.0" -nth-check@~1.0.1: +nth-check@^1.0.1, nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= dependencies: boolbase "~1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nvd3@1.8.6: version "1.8.6" resolved "https://registry.yarnpkg.com/nvd3/-/nvd3-1.8.6.tgz#2d3eba74bf33363b5101ebf1d093c59a53ae73c4" + integrity sha1-LT66dL8zNjtRAevx0JPFmlOuc8Q= "nwmatcher@>= 1.3.9 < 2.0.0": version "1.4.4" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - -oauth-sign@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ== oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + object-inspect@~1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" + integrity sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= object-keys@^1.0.11, object-keys@^1.0.6, object-keys@^1.0.8, object-keys@^1.0.9: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" -object.assign@^4.0.4, object.assign@^4.1.0: +object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -7432,15 +8995,25 @@ object.assign@^4.0.4, object.assign@^4.1.0: object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" function-bind "^1.1.0" has "^1.0.1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" @@ -7448,12 +9021,14 @@ object.omit@^2.0.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" object.values@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" @@ -7463,39 +9038,54 @@ object.values@^1.0.4: once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^1.0.0: version "1.1.0" resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opener@~1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg= optimist@0.3: version "0.3.7" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= dependencies: wordwrap "~0.0.2" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" +optimize-css-assets-webpack-plugin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159" + integrity sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A== + dependencies: + cssnano "^4.1.0" + last-call-webpack-plugin "^3.0.0" + optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -7506,7 +9096,8 @@ optionator@^0.8.1, optionator@^0.8.2: ora@^0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + resolved "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= dependencies: chalk "^1.1.1" cli-cursor "^1.0.2" @@ -7516,26 +9107,31 @@ ora@^0.2.3: os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@0, osenv@^0.1.4, osenv@~0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -7543,6 +9139,7 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= dependencies: graceful-fs "^4.1.4" mkdirp "^0.5.1" @@ -7551,68 +9148,75 @@ output-file-sync@^1.1.2: p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== p-cancelable@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== p-each-series@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - dependencies: - p-reduce "^1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-is-promise@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= p-lazy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" + integrity sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU= p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= dependencies: p-finally "^1.0.0" p-timeout@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -7622,10 +9226,12 @@ package-json@^4.0.0: pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== parallel-transform@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= dependencies: cyclist "~0.2.2" inherits "^2.0.3" @@ -7633,7 +9239,8 @@ parallel-transform@^1.1.0: parse-asn1@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + resolved "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -7644,6 +9251,7 @@ parse-asn1@^5.0.0: parse-entities@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.2.tgz#9eaf719b29dc3bd62246b4332009072e01527777" + integrity sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -7655,119 +9263,137 @@ parse-entities@^1.1.0: parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" -parse-iso-duration@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-iso-duration/-/parse-iso-duration-1.0.0.tgz#b923ab898a8ff8f42bdc9ee5db6e22808c48a864" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-link-header@0.1.0, parse-link-header@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-0.1.0.tgz#5503fa7fb2f354bb234255c1c421da3eb05b9185" - dependencies: - xtend "~2.0.5" - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ= + +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-array@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" + integrity sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE= dependencies: array-index "^1.0.0" path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0, path-exists@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= dependencies: isarray "0.0.1" path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" pathval@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= pbf@^3.0.5: version "3.1.0" resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.1.0.tgz#f70004badcb281761eabb1e76c92f179f08189e9" + integrity sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w== dependencies: ieee754 "^1.1.6" resolve-protobuf-schema "^2.0.0" pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7775,51 +9401,66 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: find-up "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== po2json@^0.4.5: version "0.4.5" - resolved "https://registry.yarnpkg.com/po2json/-/po2json-0.4.5.tgz#47bb2952da32d58a1be2f256a598eebc0b745118" + resolved "http://registry.npmjs.org/po2json/-/po2json-0.4.5.tgz#47bb2952da32d58a1be2f256a598eebc0b745118" + integrity sha1-R7spUtoy1Yob4vJWpZjuvAt0URg= dependencies: gettext-parser "1.1.0" nomnom "1.8.1" @@ -7827,57 +9468,123 @@ po2json@^0.4.5: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= dependencies: postcss "^5.0.2" postcss-message-helpers "^2.0.0" reduce-css-calc "^1.2.6" +postcss-calc@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.2.tgz#4d9a43e27dbbf27d095fecb021ac6896e2318337" + integrity sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA== + dependencies: + css-unit-converter "^1.1.1" + postcss "^7.0.2" + postcss-selector-parser "^2.2.2" + reduce-css-calc "^2.0.0" + postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= dependencies: colormin "^1.0.5" postcss "^5.0.13" postcss-value-parser "^3.2.3" +postcss-colormin@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.2.tgz#93cd1fa11280008696887db1a528048b18e7ed99" + integrity sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-convert-values@^2.3.4: version "2.6.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" +postcss-convert-values@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-discard-comments@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= dependencies: postcss "^5.0.14" +postcss-discard-comments@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz#30697735b0c476852a7a11050eb84387a67ef55d" + integrity sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ== + dependencies: + postcss "^7.0.0" + postcss-discard-duplicates@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= dependencies: postcss "^5.0.4" +postcss-discard-duplicates@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + postcss-discard-empty@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= dependencies: postcss "^5.0.14" +postcss-discard-empty@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + postcss-discard-overridden@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= dependencies: postcss "^5.0.16" +postcss-discard-overridden@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + postcss-discard-unused@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= dependencies: postcss "^5.0.14" uniqs "^2.0.0" @@ -7885,12 +9592,14 @@ postcss-discard-unused@^2.2.1: postcss-filter-plugins@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== dependencies: postcss "^5.0.4" postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= dependencies: has "^1.0.1" postcss "^5.0.10" @@ -7899,12 +9608,24 @@ postcss-merge-idents@^2.1.5: postcss-merge-longhand@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= dependencies: postcss "^5.0.4" +postcss-merge-longhand@^4.0.0: + version "4.0.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.6.tgz#2b938fa3529c3d1657e53dc7ff0fd604dbc85ff1" + integrity sha512-JavnI+V4IHWsaUAfOoKeMEiJQGXTraEy1nHM0ILlE6NIQPEZrJDAnPh3lNGZ5HAk2mSSrwp66JoGhvjp6SqShA== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + postcss-merge-rules@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= dependencies: browserslist "^1.5.2" caniuse-api "^1.5.2" @@ -7912,58 +9633,118 @@ postcss-merge-rules@^2.0.3: postcss-selector-parser "^2.2.2" vendors "^1.0.0" +postcss-merge-rules@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz#2be44401bf19856f27f32b8b12c0df5af1b88e74" + integrity sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + postcss-message-helpers@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= postcss-minify-font-values@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= dependencies: object-assign "^4.0.1" postcss "^5.0.4" postcss-value-parser "^3.0.2" +postcss-minify-font-values@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-minify-gradients@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= dependencies: postcss "^5.0.12" postcss-value-parser "^3.3.0" +postcss-minify-gradients@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz#6da95c6e92a809f956bb76bf0c04494953e1a7dd" + integrity sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-minify-params@^1.0.4: version "1.2.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.2" postcss-value-parser "^3.0.2" uniqs "^2.0.0" +postcss-minify-params@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz#5b2e2d0264dd645ef5d68f8fec0d4c38c1cf93d2" + integrity sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + postcss-minify-selectors@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= dependencies: alphanum-sort "^1.0.2" has "^1.0.1" postcss "^5.0.14" postcss-selector-parser "^2.0.0" +postcss-minify-selectors@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz#a891c197977cc37abf60b3ea06b84248b1c1e9cd" + integrity sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + postcss-modules-extract-imports@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= dependencies: postcss "^6.0.1" postcss-modules-extract-imports@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + integrity sha1-ZhQOzs447wa/DT41XWm/WdFB6oU= dependencies: postcss "^6.0.1" postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" @@ -7971,6 +9752,7 @@ postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0 postcss-modules-resolve-imports@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-resolve-imports/-/postcss-modules-resolve-imports-1.3.0.tgz#398d3000b95ae969420cdf4cd83fa8067f1c5eae" + integrity sha1-OY0wALla6WlCDN9M2D+oBn8cXq4= dependencies: css-selector-tokenizer "^0.7.0" icss-utils "^3.0.1" @@ -7979,6 +9761,7 @@ postcss-modules-resolve-imports@^1.3.0: postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" @@ -7986,6 +9769,7 @@ postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0: postcss-modules-values@^1.1.1, postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= dependencies: icss-replace-symbols "^1.1.0" postcss "^6.0.1" @@ -7993,28 +9777,122 @@ postcss-modules-values@^1.1.1, postcss-modules-values@^1.3.0: postcss-normalize-charset@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= dependencies: postcss "^5.0.5" +postcss-normalize-charset@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#d9a83d47c716e8a980f22f632c8b0458cfb48a4c" + integrity sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz#ee2d4b67818c961964c6be09d179894b94fd6ba1" + integrity sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz#5293f234b94d7669a9f805495d35b82a581c50e5" + integrity sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz#23c5030c2cc24175f66c914fa5199e2e3c10fef3" + integrity sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz#8be83e0b9cb3ff2d1abddee032a49108f05f95d7" + integrity sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-normalize-url@^3.0.7: version "3.0.8" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= dependencies: is-absolute-url "^2.0.0" normalize-url "^1.4.0" postcss "^5.0.14" postcss-value-parser "^3.2.3" +postcss-normalize-url@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz#d14cb639b61238418ac8bc8d3b7bdd65fc86575e" + integrity sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-ordered-values@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.1" +postcss-ordered-values@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz#2e3b432ef3e489b18333aeca1f1295eb89be9fc2" + integrity sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-reduce-idents@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.2" @@ -8022,49 +9900,104 @@ postcss-reduce-idents@^2.2.2: postcss-reduce-initial@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= dependencies: postcss "^5.0.4" +postcss-reduce-initial@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz#bac8e325d67510ee01fa460676dc8ea9e3b40f15" + integrity sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-reduce-transforms@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= dependencies: has "^1.0.1" postcss "^5.0.8" postcss-value-parser "^3.0.1" +postcss-reduce-transforms@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz#8600d5553bdd3ad640f43bff81eb52f8760d4561" + integrity sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= dependencies: flatten "^1.0.2" indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= dependencies: is-svg "^2.0.0" postcss "^5.0.14" postcss-value-parser "^3.2.3" svgo "^0.7.0" +postcss-svgo@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.1.tgz#5628cdb38f015de6b588ce6d0bf0724b492b581d" + integrity sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + postcss-unique-selectors@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.4" uniqs "^2.0.0" -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: +postcss-unique-selectors@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= postcss-zindex@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= dependencies: has "^1.0.1" postcss "^5.0.4" @@ -8073,15 +10006,17 @@ postcss-zindex@^2.0.1: postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.1, postcss@^6.0.2: +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" @@ -8090,84 +10025,107 @@ postcss@^6.0.1, postcss@^6.0.2: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= prettier@^1.12.1: - version "1.13.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" + version "1.14.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" + integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg== pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk= prismjs@^1.8.4: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + integrity sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA== optionalDependencies: clipboard "^2.0.0" prismjs@~1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.14.0.tgz#bbccfdb8be5d850d26453933cb50122ca0362ae0" + integrity sha512-sa2s4m60bXs+kU3jcuUwx3ZCrUH7o0kuqnOOINbODqlRrDB7KY8SRx+xR/D7nHLlgfDdG7zXbRO8wJ+su5Ls0A== optionalDependencies: clipboard "^2.0.0" private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== probe.gl@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/probe.gl/-/probe.gl-1.0.2.tgz#3b0bdf015ff07dba6582badc6993890cfa5219e6" + version "1.0.4" + resolved "https://registry.yarnpkg.com/probe.gl/-/probe.gl-1.0.4.tgz#3845091ae598b2dcbdb71419219d53f79607bf77" + integrity sha512-vL9k+Z/huhsV8a+IxQ1G9+IJuA/w7TLR2ewnG7ZHw5FuyGHV3aIVi5iLPR6yaV+5+Nbo5IKVRHCfzx0KJsNvfw== dependencies: - babel-runtime "^6.11.6" + asciify-image "^0.1.3" process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" prop-types-extra@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f" + integrity sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg== dependencies: react-is "^16.3.2" warning "^3.0.0" @@ -8175,6 +10133,7 @@ prop-types-extra@^1.0.1: prop-types@15.5.10: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + integrity sha1-J5ffwxJhguOpXj37suiT3ddFYVQ= dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" @@ -8182,6 +10141,7 @@ prop-types@15.5.10: prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== dependencies: loose-envify "^1.3.1" object-assign "^4.1.1" @@ -8189,30 +10149,37 @@ prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, pr property-information@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-3.2.0.tgz#fd1483c8fbac61808f5fe359e7693a1f48a58331" + integrity sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE= proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= protocol-buffers-schema@^2.0.2: version "2.2.0" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-2.2.0.tgz#d29c6cd73fb655978fb6989691180db844119f61" + integrity sha1-0pxs1z+2VZePtpiWkRgNuEQRn2E= prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: - version "1.1.28" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b" + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== public-encrypt@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + resolved "http://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + integrity sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -8223,6 +10190,7 @@ public-encrypt@^4.0.0: pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -8230,6 +10198,7 @@ pump@^2.0.0, pump@^2.0.1: pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -8238,38 +10207,42 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@~0.6.0: - version "0.6.6" - resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@~6.2.0: version "6.2.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" + integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4= qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= qs@~6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== query-string@^4.1.0, query-string@^4.2.2: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -8277,6 +10250,7 @@ query-string@^4.1.0, query-string@^4.2.2: query-string@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: decode-uri-component "^0.2.0" object-assign "^4.1.0" @@ -8285,32 +10259,56 @@ query-string@^5.0.1: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= quickselect@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" + integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== quote-stream@^1.0.1, quote-stream@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" + integrity sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= dependencies: buffer-equal "0.0.1" minimist "^1.1.3" through2 "^2.0.0" -raf@^3.3.0: +raf@^3.3.0, raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + integrity sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw== dependencies: performance-now "^2.1.0" +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= + +ramda@0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ== dependencies: is-number "^4.0.0" kind-of "^6.0.0" @@ -8319,31 +10317,35 @@ randomatic@^3.0.0: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" rc-config-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-2.0.1.tgz#8c8452f59bdd10d448a67762dccf7c1b247db860" + version "2.0.2" + resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-2.0.2.tgz#46eb2f98fb5b2aa7b1119d66c0554de5133f1bc1" + integrity sha512-Nx9SNM47eNRqe0TdntOY600qWb8NDh+xU9sv5WnTscEtzfTB0ukihlqwuCLPteyJksvZ0sEVPoySNE01TKrmTQ== dependencies: - debug "^2.2.0" - js-yaml "^3.6.1" - json5 "^0.5.0" + debug "^3.1.0" + js-yaml "^3.12.0" + json5 "^1.0.1" object-assign "^4.1.0" - object-keys "^1.0.9" - path-exists "^2.1.0" - require-from-string "^2.0.1" + object-keys "^1.0.12" + path-exists "^3.0.0" + require-from-string "^2.0.2" rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -8351,12 +10353,14 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: strip-json-comments "~2.0.1" re-resizable@^4.3.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-4.7.1.tgz#3eca5bb94a6059d14311786cfd2d430bc9f7fba0" + version "4.9.0" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-4.9.0.tgz#0160728b9d7e32371fb26562221678ae643e6557" + integrity sha512-AkTHHC/I1+MUnabFu3/9ADwR5A+HyjiL3xgqlcgNKdyJZVb851I7sGre/4JIU7XfhaN5t+xZBvJPOuvEdvSMcw== react-ace@^5.10.0: version "5.10.0" - resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-5.10.0.tgz#e328b37ac52759f700be5afdb86ada2f5ec84c5e" + resolved "http://registry.npmjs.org/react-ace/-/react-ace-5.10.0.tgz#e328b37ac52759f700be5afdb86ada2f5ec84c5e" + integrity sha512-aEK/XZCowP8IXq91e2DYqOtGhabk1bbjt+fyeW0UBcIkzDzP/RX/MeJKeyW7wsZcwElACVwyy9nnwXBTqgky3A== dependencies: brace "^0.11.0" lodash.get "^4.4.2" @@ -8366,12 +10370,14 @@ react-ace@^5.10.0: react-addons-css-transition-group@^15.6.0: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-css-transition-group/-/react-addons-css-transition-group-15.6.2.tgz#9e4376bcf40b5217d14ec68553081cee4b08a6d6" + integrity sha1-nkN2vPQLUhfRTsaFUwgc7ksIptY= dependencies: react-transition-group "^1.2.0" react-addons-shallow-compare@^15.4.2: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.2.tgz#198a00b91fc37623db64a28fd17b596ba362702f" + integrity sha1-GYoAuR/DdiPbZKKP0XtZa6NicC8= dependencies: fbjs "^0.8.4" object-assign "^4.1.0" @@ -8379,22 +10385,17 @@ react-addons-shallow-compare@^15.4.2: react-addons-test-utils@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" - -react-bootstrap-datetimepicker@0.0.22: - version "0.0.22" - resolved "https://registry.yarnpkg.com/react-bootstrap-datetimepicker/-/react-bootstrap-datetimepicker-0.0.22.tgz#07e448d993157d049ad0876d0f9a3c9c5029d9c5" - dependencies: - babel-runtime "^5.6.18" - classnames "^2.1.2" - moment "^2.8.2" + integrity sha1-wStu/cIkfBDae4dw0YUICnsEcVY= react-bootstrap-dialog@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/react-bootstrap-dialog/-/react-bootstrap-dialog-0.10.0.tgz#fca5c84804ea2b6debe3833c6d4b7480bcff0175" + integrity sha1-/KXISATqK23r44M8bUt0gLz/AXU= react-bootstrap-slider@2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/react-bootstrap-slider/-/react-bootstrap-slider-2.1.5.tgz#2f79e57b69ddf2b5bd23310bddbd2de0c6bdfef3" + integrity sha512-7rO3JlCVIpr+XtwiSfg8r+MPqyl9KdLI61pNuSMBYYQZ42IWBC+kk/UDyYevp76aGAMtd9SCW8erxOvq+VpekQ== dependencies: bootstrap-slider "9.9.0" es6bindall "^0.0.9" @@ -8402,6 +10403,7 @@ react-bootstrap-slider@2.1.5: react-bootstrap-table@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-bootstrap-table/-/react-bootstrap-table-4.3.1.tgz#f704be55b7f6bf0557d2fc5bec6d25fd307d0cde" + integrity sha1-9wS+Vbf2vwVX0vxb7G0l/TB9DN4= dependencies: classnames "^2.1.2" prop-types "^15.5.10" @@ -8411,6 +10413,7 @@ react-bootstrap-table@^4.3.1: react-bootstrap@^0.31.5: version "0.31.5" resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.31.5.tgz#57040fa8b1274e1e074803c21a1b895fdabea05a" + integrity sha512-xgDihgX4QvYHmHzL87faDBMDnGfYyqcrqV0TEbWY+JizePOG1vfb8M3xJN+6MJ3kUYqDtQSZ7v/Q6Y5YDrkMdA== dependencies: babel-runtime "^6.11.6" classnames "^2.2.5" @@ -8426,6 +10429,7 @@ react-bootstrap@^0.31.5: react-color@^2.13.8: version "2.14.1" resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.14.1.tgz#db8ad4f45d81e74896fc2e1c99508927c6d084e0" + integrity sha512-ssv2ArSZdhTbIs29hyfw8JW+s3G4BCx/ILkwCajWZzrcx/2ZQfRpsaLVt38LAPbxe50LLszlmGtRerA14JzzRw== dependencies: lodash "^4.0.1" material-colors "^1.2.1" @@ -8433,9 +10437,10 @@ react-color@^2.13.8: reactcss "^1.2.0" tinycolor2 "^1.4.1" -react-datetime@2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.14.0.tgz#c7859c5b765275d7980f1cca27c03a727ff9ccef" +react-datetime@^2.14.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.15.0.tgz#a8f7da6c58b6b45dbeea32d4e8485db17614e12c" + integrity sha512-RP5OqXVfrhdoFALJzMU8tKxRFaIZzJZqZEpf5oK7pvwG80a/bET/TdJ7jT7W9lyAf1nKNo6zyYkvHW3ZJ/ypvg== dependencies: create-react-class "^15.5.2" object-assign "^3.0.0" @@ -8445,12 +10450,14 @@ react-datetime@2.14.0: react-dnd-html5-backend@^2.5.4: version "2.6.0" resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-2.6.0.tgz#590cd1cca78441bb274edd571fef4c0b16ddcf8e" + integrity sha1-WQzRzKeEQbsnTt1XH+9MCxbdz44= dependencies: lodash "^4.2.0" react-dnd@^2.5.4: version "2.6.0" resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-2.6.0.tgz#7fa25676cf827d58a891293e3c1ab59da002545a" + integrity sha1-f6JWds+CfViokSk+PBq1naACVFo= dependencies: disposables "^1.0.1" dnd-core "^2.6.0" @@ -8459,18 +10466,20 @@ react-dnd@^2.5.4: lodash "^4.2.0" prop-types "^15.5.10" -react-dom@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" +react-dom@^16.4.1: + version "16.5.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.5.2.tgz#b69ee47aa20bab5327b2b9d7c1fe2a30f2cfa9d7" + integrity sha512-RC8LDw8feuZOHVgzEf7f+cxBr/DnKdqp56VU0lAs1f4UfKc4cU8wU4fTq/mgnvynLQo8OtlPC19NUFh/zjZPuA== dependencies: - fbjs "^0.8.9" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" + object-assign "^4.1.1" + prop-types "^15.6.2" + schedule "^0.5.0" "react-draggable@^2.2.6 || ^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.0.5.tgz#c031e0ed4313531f9409d6cd84c8ebcec0ddfe2d" + integrity sha512-qo76q6+pafyGllbmfc+CgWfOkwY9v3UoJa3jp6xG2vdsRY8uJTN1kqNievLj0uVNjEqCvZ0OFiEBxlAJNj3OTg== dependencies: classnames "^2.2.5" prop-types "^15.6.0" @@ -8478,6 +10487,7 @@ react-dom@^15.6.2: react-gravatar@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/react-gravatar/-/react-gravatar-2.6.3.tgz#5407eb6ac87e830e2a34deb760d2a4c404eb1dac" + integrity sha1-VAfrash+gw4qNN63YNKkxATrHaw= dependencies: is-retina "^1.0.3" md5 "^2.1.0" @@ -8486,34 +10496,45 @@ react-gravatar@^2.6.1: react-input-autosize@^2.1.2: version "2.2.1" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" + integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA== dependencies: prop-types "^15.5.8" -react-is@^16.3.2: - version "16.4.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.1.tgz#d624c4650d2c65dbd52c72622bbf389435d9776e" +react-is@^16.3.2, react-is@^16.4.2: + version "16.5.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.2.tgz#e2a7b7c3f5d48062eb769fcb123505eb928722e3" + integrity sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ== + +react-is@^16.5.1: + version "16.5.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.1.tgz#c6e8734fd548a22e1cef4fd0833afbeb433b85ee" + integrity sha512-Q7S+9y2lJA9oJCMqLt045f+kLRhsMLA1wW2DAGXA6b7wcTQRHnUDMc5oR49tn0Z4swvnfV+/t8iZFXY74IQmpA== react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-map-gl@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-3.3.0.tgz#dad906ec4c56a51873884325c44025d49516a9ea" + version "3.3.4" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-3.3.4.tgz#d1d9c971480501e5821f349e38b4a4f250cd2a51" + integrity sha512-77EN3zYNw30StaERHunMINpOmqe9wkMERcyQ19DK1fWw5HiSbHjvCRs0e/TDIpb51WfNrskUdkuxbkXTw5Wfew== dependencies: babel-runtime "^6.23.0" bowser "^1.2.0" immutable "^3.8.2" - mapbox-gl "0.45" - math.gl "^1.1.0" + mapbox-gl "0.47.0" + math.gl "^2.0.0" mjolnir.js "^1.2.1" prop-types "^15.5.7" viewport-mercator-project "^5.1.0" react-markdown@^3.3.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-3.3.4.tgz#4002599ad133c649923a49aedc06b2f3af2016b6" + version "3.6.0" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-3.6.0.tgz#29f6aaab5270c8ef0a5e234093a873ec3e01722b" + integrity sha512-TV0wQDHHPCEeKJHWXFfEAKJ8uSEsJ9LgrMERkXx05WV/3q6Ig+59KDNaTmjcoqlCpE/sH5PqqLMh4t0QWKrJ8Q== dependencies: + mdast-add-list-metadata "1.0.1" prop-types "^15.6.1" remark-parse "^5.0.0" unified "^6.1.5" @@ -8521,8 +10542,9 @@ react-markdown@^3.3.0: xtend "^4.0.1" react-modal@^3.1.7: - version "3.5.1" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.5.1.tgz#33d38527def90ea324848f7d63e53acc4468a451" + version "3.6.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.6.1.tgz#54d27a1ec2b493bbc451c7efaa3557b6af82332d" + integrity sha512-vAhnawahH1fz8A5x/X/1X20KHMe6Q0mkfU5BKPgKSVPYhMhsxtRbNHSitsoJ7/oP27xZo3naZZlwYuuzuSO1xw== dependencies: exenv "^1.2.0" prop-types "^15.5.10" @@ -8532,10 +10554,12 @@ react-modal@^3.1.7: react-onclickoutside@^6.5.0: version "6.7.1" resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz#6a5b5b8b4eae6b776259712c89c8a2b36b17be93" + integrity sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg== react-overlays@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.7.4.tgz#ef2ec652c3444ab8aa014262b18f662068e56d5c" + integrity sha512-7vsooMx3siLAuEfTs8FYeP/lAORWWFXTO8PON3KgX0Htq1Oa+po6ioSjGyO0/GO5CVSMNhpWt6V2opeexHgBuQ== dependencies: classnames "^2.2.5" dom-helpers "^3.2.1" @@ -8545,7 +10569,8 @@ react-overlays@^0.7.4: react-redux@^5.0.2: version "5.0.7" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" + resolved "http://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" + integrity sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg== dependencies: hoist-non-react-statics "^2.5.0" invariant "^2.0.0" @@ -8557,6 +10582,7 @@ react-redux@^5.0.2: react-resizable@^1.3.3: version "1.7.5" resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.7.5.tgz#83eb75bb3684da6989bbbf4f826e1470f0af902e" + integrity sha512-lauPcBsLqmxMHXHpTeOBpYenGalbSikYr8hK+lwtNYMQX1pGd2iYE+pDvZEV97nCnzuCtWM9htp7OpsBIY2Sjw== dependencies: prop-types "15.x" react-draggable "^2.2.6 || ^3.0.3" @@ -8564,12 +10590,14 @@ react-resizable@^1.3.3: react-s-alert@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/react-s-alert/-/react-s-alert-1.4.1.tgz#ef3665a9d98c4cf2e448fc2d84e48aeca799bb5a" + integrity sha512-+cSpVPe6YeGklhlo7zbVlB0Z6jdiU9HPmEVzp5nIhNm9lvdL7rVO2Jx09pCwT99GmODyoN0iNhbQku6r7six8A== dependencies: babel-runtime "^6.23.0" react-search-input@^0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/react-search-input/-/react-search-input-0.11.3.tgz#3dd1f9fc584b6bc40a6ee133ae042b6fbb7ae8dd" + integrity sha512-Yo05lNR5YLeIY+mTEk0lMkYHX0qkTlElJmxMTw5JlZPu92EP8YWwIY3QSbEFULvX4wiTfyDdUovTUpp2VockpA== dependencies: fuse.js "^3.0.0" prop-types "^15.5.8" @@ -8577,12 +10605,23 @@ react-search-input@^0.11.3: react-select-fast-filter-options@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/react-select-fast-filter-options/-/react-select-fast-filter-options-0.2.3.tgz#d9f667ab1fe7bcc2dd8bfd74277e56c771e9e518" + integrity sha512-rTMMRhd73MI1z2eWpes8sGoR4nBYM1IGjsYPvay2DF/kylHUmXFFIGsZJZQcXdBZnAXExKyw2kYKCGiYi4ls4Q== dependencies: js-search "^1.3.1" -react-select@1.2.1, react-select@^1.0.0-rc.2, react-select@^1.0.0-rc.5: +react-select@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.2.1.tgz#a2fe58a569eb14dcaa6543816260b97e538120d1" + integrity sha512-vaCgT2bEl+uTyE/uKOEgzE5Dc/wLtzhnBvoHCeuLoJWc4WuadN6WQDhoL42DW+TziniZK2Gaqe/wUXydI3NSaQ== + dependencies: + classnames "^2.2.4" + prop-types "^15.5.8" + react-input-autosize "^2.1.2" + +react-select@^1.0.0-rc.2, react-select@^1.0.0-rc.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.3.0.tgz#1828ad5bf7f3e42a835c7e2d8cb13b5c20714876" + integrity sha512-g/QAU1HZrzSfxkwMAo/wzi6/ezdWye302RGZevsATec07hI/iSxcpB1hejFIp7V63DJ8mwuign6KmB3VjdlinQ== dependencies: classnames "^2.2.4" prop-types "^15.5.8" @@ -8591,14 +10630,16 @@ react-select@1.2.1, react-select@^1.0.0-rc.2, react-select@^1.0.0-rc.5: react-sortable-hoc@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-sortable-hoc/-/react-sortable-hoc-0.8.3.tgz#8537e8ab8d6bad6829885755a0f847817ed78648" + integrity sha512-vt2qQ9DnPLjGZ9osM2jBULdi7WfFXtYVuHvjHX8o2em7Rcla9FXIG60aWFbvvpFC1iXyATw5PWZX0B57EUOYfQ== dependencies: babel-runtime "^6.11.6" invariant "^2.2.1" prop-types "^15.5.7" react-split-pane@^0.1.63, react-split-pane@^0.1.66: - version "0.1.81" - resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.81.tgz#b1e8b82e0a6edd10f18fd639a5f512db3cbbb4e6" + version "0.1.84" + resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.84.tgz#b9c1499cbc40b09cf29953ee6f5ff1039d31906e" + integrity sha512-rso1dRAXX/WETyqF5C0fomIYzpF71Nothfr1R7pFkrJCPVJ20ok2e6wqF+JvUTyE/meiBvsbNPT1loZjyU+53w== dependencies: inline-style-prefixer "^3.0.6" prop-types "^15.5.10" @@ -8608,19 +10649,22 @@ react-split-pane@^0.1.63, react-split-pane@^0.1.66: react-sticky@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/react-sticky/-/react-sticky-6.0.3.tgz#7a18b643e1863da113d7f7036118d2a75d9ecde4" + integrity sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ== dependencies: prop-types "^15.5.8" raf "^3.3.0" react-style-proptype@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.2.1.tgz#7cfeb9b87ec7ab9dcbde9715170ed10c11fb86aa" + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.2.2.tgz#d8e998e62ce79ec35b087252b90f19f1c33968a0" + integrity sha512-ywYLSjNkxKHiZOqNlso9PZByNEY+FTyh3C+7uuziK0xFXu9xzdyfHwg4S9iyiRRoPCR4k2LqaBBsWVmSBwCWYQ== dependencies: prop-types "^15.5.4" react-syntax-highlighter@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-7.0.4.tgz#38d0cabada32fd4a7d08db4b7fbdb33565c9420d" + integrity sha512-WtaHAlI5++csZ5uTnJc5+ozqqIzUkO/rnkv1GJ3CeRtjhTzbo12r9F0BICzhibr7gBWECd1Xgj1FKJEWZxcP4w== dependencies: babel-runtime "^6.18.0" highlight.js "~9.12.0" @@ -8628,16 +10672,33 @@ react-syntax-highlighter@^7.0.4: prismjs "^1.8.4" refractor "^2.4.1" +react-tag-autocomplete@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/react-tag-autocomplete/-/react-tag-autocomplete-5.5.1.tgz#6b3f253d3d69eb546925118cdf43138a9aafe113" + integrity sha512-/x6izH2OUySduXfJ9pgb3B2IirkE8w9+JEC1TF4QyPvyLTQ2tDFf4hlvTmK7iGEo+ll7oRZbtEHScLDI5YvvEQ== + react-test-renderer@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.2.tgz#d0333434fc2c438092696ca770da5ed48037efa8" + integrity sha1-0DM0NPwsQ4CSaWyncNpe1IA376g= dependencies: fbjs "^0.8.9" object-assign "^4.1.0" +react-test-renderer@^16.0.0-0: + version "16.5.2" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae" + integrity sha512-AGbJYbCVx1J6jdUgI4s0hNp+9LxlgzKvXl0ROA3DHTrtjAr00Po1RhDZ/eAq2VC/ww8AHgpDXULh5V2rhEqqJg== + dependencies: + object-assign "^4.1.1" + prop-types "^15.6.2" + react-is "^16.5.2" + schedule "^0.5.0" + react-transition-group@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" + integrity sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q== dependencies: chain-function "^1.0.0" dom-helpers "^3.2.0" @@ -8645,17 +10706,20 @@ react-transition-group@^1.2.0: prop-types "^15.5.6" warning "^3.0.0" -react-virtualized-select@^2.4.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/react-virtualized-select/-/react-virtualized-select-2.4.2.tgz#ac58bf363c5dca40282ce12c793d6044d2cb8dfe" +react-virtualized-select@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/react-virtualized-select/-/react-virtualized-select-3.1.3.tgz#e5c1fed5e493e3e5a628e53100e83d27cfd8c0ac" + integrity sha512-u6j/EfynCB9s4Lz5GGZhNUCZHvFQdtLZws7W/Tcd/v03l19OjpQs3eYjK82iYS0FgD2+lDIBpqS8LpD/hjqDRQ== dependencies: babel-runtime "^6.11.6" + prop-types "^15.5.8" react-select "^1.0.0-rc.2" - react-virtualized "^8.0.5" + react-virtualized "^9.0.0" react-virtualized@9.19.1: version "9.19.1" resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.19.1.tgz#84b53253df2d9df61c85ce037141edccc70a73fd" + integrity sha512-2l6uFicZKZ3x4rdnS0W+1TfyLmPO/+hfZKsCtoChoSmH5aEezGLpSuHc7oplekNIOaEwChfCk30zjx+Zw6B8YQ== dependencies: babel-runtime "^6.26.0" classnames "^2.2.3" @@ -8664,18 +10728,22 @@ react-virtualized@9.19.1: prop-types "^15.6.0" react-lifecycles-compat "^3.0.4" -react-virtualized@^8.0.5: - version "8.11.4" - resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-8.11.4.tgz#0bb94f1ecbd286d07145ce63983d0a11724522c0" +react-virtualized@^9.0.0: + version "9.20.1" + resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.20.1.tgz#02dc08fe9070386b8c48e2ac56bce7af0208d22d" + integrity sha512-xIWxBsyNAjceqD3hsE0nw5TcDVxKbIepsHhvS2XneHmNz0KlKxdLdGBmGZBM9ZesEmbZ5EO0Sw70TB1MeCmpbQ== dependencies: - babel-runtime "^6.11.6" + babel-runtime "^6.26.0" classnames "^2.2.3" dom-helpers "^2.4.0 || ^3.0.0" loose-envify "^1.3.0" + prop-types "^15.6.0" + react-lifecycles-compat "^3.0.4" react-with-styles-interface-aphrodite@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/react-with-styles-interface-aphrodite/-/react-with-styles-interface-aphrodite-1.2.0.tgz#22a0a7d392d8f91a891f722d4c992f4c80f5a129" + integrity sha1-IqCn05LY+RqJH3ItTJkvTID1oSk= dependencies: array-flatten "^2.1.0" has "^1.0.1" @@ -8683,35 +10751,39 @@ react-with-styles-interface-aphrodite@^1.2.0: react-with-styles@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-1.4.0.tgz#a05b311e82b49b1e69b787af82d0a29c6e2b0731" + integrity sha1-oFsxHoK0mx5pt4evgtCinG4rBzE= dependencies: deepmerge "^1.3.2" global-cache "^1.2.0" hoist-non-react-statics "^1.2.0" prop-types "^15.5.8" -react@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" +react@^16.4.1: + version "16.5.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.5.2.tgz#19f6b444ed139baa45609eee6dc3d318b3895d42" + integrity sha512-FDCSVd3DjVTmbEAjUNX6FgfAmQ+ypJfHUsqUJOYNCBUp1h8lqmtC+0mXJ+JjsWx4KAVTkk1vKd1hLQPvEviSuw== dependencies: - create-react-class "^15.6.0" - fbjs "^0.8.9" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" + object-assign "^4.1.1" + prop-types "^15.6.2" + schedule "^0.5.0" reactable@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/reactable/-/reactable-1.0.2.tgz#67a579fee3af68b991b5f04df921a4a40ece0b72" + integrity sha1-Z6V5/uOvaLmRtfBN+SGkpA7OC3I= reactcss@^1.2.0: version "1.2.3" resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== dependencies: lodash "^4.0.1" read-chunk@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" + integrity sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU= dependencies: pify "^3.0.0" safe-buffer "^5.1.1" @@ -8719,12 +10791,14 @@ read-chunk@^2.1.0: read-cmd-shim@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" + integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= dependencies: graceful-fs "^4.1.2" read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= dependencies: debuglog "^1.0.1" read-package-json "^2.0.0" @@ -8738,6 +10812,7 @@ read-installed@~4.0.3: "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.4: version "2.0.13" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" + integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" @@ -8749,6 +10824,7 @@ read-installed@~4.0.3: read-package-tree@~5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.6.tgz#4f03e83d0486856fb60d97c94882841c2a7b1b7a" + integrity sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -8759,6 +10835,7 @@ read-package-tree@~5.1.5: read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" @@ -8766,6 +10843,7 @@ read-pkg-up@^2.0.0: read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" @@ -8773,6 +10851,7 @@ read-pkg-up@^3.0.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -8781,20 +10860,23 @@ read-pkg@^2.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" path-type "^3.0.0" -read@1, read@~1.0.1, read@~1.0.5, read@~1.0.7: +read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.3: version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8804,18 +10886,10 @@ read@1, read@~1.0.1, read@~1.0.5, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.26: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~1.1.0, readable-stream@~1.1.9: +readable-stream@~1.1.0: version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8824,7 +10898,8 @@ readable-stream@~1.1.0, readable-stream@~1.1.9: readable-stream@~2.0.5: version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8835,7 +10910,8 @@ readable-stream@~2.0.5: readable-stream@~2.1.5: version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -8848,6 +10924,7 @@ readable-stream@~2.1.5: readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -8855,17 +10932,18 @@ readdir-scoped-modules@^1.0.0: once "^1.3.0" readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" realize-package-specifier@~3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4" + integrity sha1-0N74gpUrjeP2frpekRmWYScfQfQ= dependencies: dezalgo "^1.0.1" npm-package-arg "^4.1.1" @@ -8873,6 +10951,7 @@ realize-package-specifier@~3.0.3: recast@^0.12.5: version "0.12.9" resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + integrity sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A== dependencies: ast-types "0.10.1" core-js "^2.4.1" @@ -8883,6 +10962,7 @@ recast@^0.12.5: recast@^0.15.0: version "0.15.2" resolved "https://registry.yarnpkg.com/recast/-/recast-0.15.2.tgz#bcaebf7cdb0728e38ec6d1438e7fb3594505cee3" + integrity sha512-L4f/GqxjlEJ5IZ+tdll/l+6dVi2ylysWbkgFJbMuldD6Jklgfv6zJnCpuAZDfjwHhfcd/De0dDKelsTEPQ29qA== dependencies: ast-types "0.11.5" esprima "~4.0.0" @@ -8892,12 +10972,14 @@ recast@^0.15.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" recompose@^0.23.5: version "0.23.5" resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.23.5.tgz#72ac8261246bec378235d187467d02a721e8b1de" + integrity sha1-cqyCYSRr7DeCNdGHRn0CpyHosd4= dependencies: change-emitter "^0.1.2" fbjs "^0.8.1" @@ -8907,44 +10989,60 @@ recompose@^0.23.5: redeyed@~0.4.0: version "0.4.4" resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz#37e990a6f2b21b2a11c2e6a48fd4135698cba97f" + integrity sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8= dependencies: esprima "~1.0.4" reduce-css-calc@^1.2.6, reduce-css-calc@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + resolved "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" reduce-function-call "^1.0.1" +reduce-css-calc@^2.0.0: + version "2.1.5" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.5.tgz#f283712f0c9708ef952d328f4b16112d57b03714" + integrity sha512-AybiBU03FKbjYzyvJvwkJZY6NLN+80Ufc2EqEs+41yQH+8wqBEslD6eGiS0oIeq5TNLA5PrhBeYHXWdn8gtW7A== + dependencies: + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" + reduce-function-call@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= dependencies: balanced-match "^0.4.2" redux-localstorage@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/redux-localstorage/-/redux-localstorage-0.4.1.tgz#faf6d719c581397294d811473ffcedee065c933c" + integrity sha1-+vbXGcWBOXKU2BFHP/zt7gZckzw= redux-mock-store@^1.2.3: version "1.5.3" resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.3.tgz#1f10528949b7ce8056c2532624f7cafa98576c6d" + integrity sha512-ryhkkb/4D4CUGpAV2ln1GOY/uh51aczjcRz9k2L2bPx/Xja3c5pSGJJPyR25GNVRXtKIExScdAgFdiXp68GmJA== dependencies: lodash.isplainobject "^4.0.6" redux-thunk@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== redux-undo@^1.0.0-beta9-9-7: version "1.0.0-beta9-9-7" resolved "https://registry.yarnpkg.com/redux-undo/-/redux-undo-1.0.0-beta9-9-7.tgz#fe3baa1b271423d7ddbbfc3a82c71b029a2db8ba" + integrity sha1-/juqGycUI9fdu/w6gscbApotuLo= redux@^3.5.2, redux@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== dependencies: lodash "^4.2.1" lodash-es "^4.2.1" @@ -8952,27 +11050,33 @@ redux@^3.5.2, redux@^3.7.1: symbol-observable "^1.0.3" refractor@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.4.1.tgz#067654311ed1618fc2dd76e9263c8cf05ab6298b" + version "2.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.6.0.tgz#6b0d88f654c8534eefed3329a35bc7bb74ae0979" + integrity sha512-ZkziLxSnkGmcFd9gVtMPqWyuA9nLzQCJqIjma03UvS2kw3gU+JQhCz8bWpbXtQX0e5XurZb/1wglrxpkYTJalQ== dependencies: - hastscript "^3.1.0" - prismjs "~1.14.0" + hastscript "^4.0.0" + parse-entities "^1.1.2" + prismjs "~1.15.0" regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -8981,12 +11085,14 @@ regenerator-transform@^0.10.0: regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -8994,10 +11100,12 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexpp@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -9006,6 +11114,7 @@ regexpu-core@^1.0.0: regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -9014,6 +11123,7 @@ regexpu-core@^2.0.0: registry-auth-token@^3.0.1: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -9021,22 +11131,26 @@ registry-auth-token@^3.0.1: registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= dependencies: rc "^1.0.1" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= dependencies: jsesc "~0.5.0" remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -9057,57 +11171,72 @@ remark-parse@^5.0.0: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +request-progress@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz#0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a" + integrity sha1-ByHBBdipasayzossia4tXs/Pazo= + dependencies: + throttleit "~0.0.2" request@2, request@^2.74.0, request@^2.79.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -9132,26 +11261,36 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@~2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.22.0.tgz#b883a769cc4a909571eb5004b344c43cf7e51592" - dependencies: - aws-sign "~0.3.0" - cookie-jar "~0.3.0" - forever-agent "~0.5.0" - form-data "0.0.8" - hawk "~0.13.0" - http-signature "~0.10.0" - json-stringify-safe "~4.0.0" - mime "~1.2.9" - node-uuid "~1.4.0" - oauth-sign "~0.3.0" - qs "~0.6.0" - tunnel-agent "~0.3.0" +request@2.87.0: + version "2.87.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" request@~2.75.0: version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + resolved "http://registry.npmjs.org/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + integrity sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM= dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -9178,22 +11317,27 @@ request@~2.75.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= require-package-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" @@ -9201,16 +11345,19 @@ require-uncached@^1.0.3: resize-observer-polyfill@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69" + integrity sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg== resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" resolve-dir@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" @@ -9218,36 +11365,43 @@ resolve-dir@^1.0.0: resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-protobuf-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.0.0.tgz#e67b062a67f02d11bd6886e70efda788407e0fb4" + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== dependencies: - protocol-buffers-schema "^2.0.2" + protocol-buffers-schema "^3.3.1" resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.1.0, resolve@^1.1.5, resolve@^1.1.6, resolve@^1.5.0, resolve@^1.6.0: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== dependencies: path-parse "^1.0.5" responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= dependencies: exit-hook "^1.0.0" onetime "^1.0.0" @@ -9255,6 +11409,7 @@ restore-cursor@^1.0.1: restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -9262,176 +11417,252 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.10.0, retry@~0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= dependencies: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= rimraf@~2.5.4: version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + resolved "http://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= dependencies: glob "^7.0.5" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + run-async@^2.0.0, run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rw@1, rw@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= rw@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/rw/-/rw-0.1.4.tgz#4903cbd80248ae0ede685bf58fd236a7a9b29a3e" + integrity sha1-SQPL2AJIrg7eaFv1j9I2p6mymj4= rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rxjs@^5.0.0-beta.11: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" rxjs@^5.5.2: version "5.5.11" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" + integrity sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA== dependencies: symbol-observable "1.0.1" rxjs@^6.1.0: version "6.2.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" + integrity sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ== dependencies: tslib "^1.9.0" 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: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== samsam@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" + integrity sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg== -sax@^1.2.1, sax@^1.2.4, sax@~1.2.1: +sax@^1.2.1, sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schedule@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.4.0.tgz#fa20cfd0bfbf91c47d02272fd7096780d3170bbb" + integrity sha512-hYjmoaEMojiMkWCxKr6ue+LYcZ29u29+AamWYmzwT2VOO9ws5UJp/wNhsVUPiUeNh+EdRfZm7nDeB40ffTfMhA== + dependencies: + object-assign "^4.1.1" -schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5: +schema-utils@^0.4.3: version "0.4.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + integrity sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" scoped-regex@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" seed-random@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" + integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= seedrandom@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + version "2.4.4" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" + integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== seekout@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/seekout/-/seekout-1.0.2.tgz#09ba9f1bd5b46fbb134718eb19a68382cbb1b9c9" + integrity sha1-CbqfG9W0b7sTRxjrGaaDgsuxuck= seer@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/seer/-/seer-0.2.4.tgz#6b8a81d09bfe6b3b3ad0268971a65e7f7405135c" + integrity sha512-d+X19YtDXXK3giW0xYO7DTzLfSqsFoq9gFr0j1g3SqyX63uhbQnZ/UZIJ1Xcr24I3e4JLKqg85q8bbpAOkKNGw== select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= dependencies: semver "^5.0.3" semver-utils@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.2.tgz#197d758a0a28c3d3a009338cfbcc1211bccd76d4" + integrity sha512-+RvtdCZJdLJXN6ozVqbypYII/m4snihgWvmFHW8iWusxqGVdEP31QdUVVaC6GeJ9EYE0JCMdWiNlLF3edjifEw== -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -semver@5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= serialize-javascript@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -9441,6 +11672,7 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -9450,10 +11682,12 @@ set-value@^2.0.0: setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -9461,6 +11695,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: sha@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" + integrity sha1-YDCCL70smCOUn49y7WQR7lzyWq4= dependencies: graceful-fs "^4.1.2" readable-stream "^2.0.2" @@ -9468,10 +11703,12 @@ sha@~2.0.1: shallow-copy@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= shapefile@0.3: version "0.3.1" resolved "https://registry.yarnpkg.com/shapefile/-/shapefile-0.3.1.tgz#9bb9a429bd6086a0cfb03962d14cfdf420ffba12" + integrity sha1-m7mkKb1ghqDPsDli0Uz99CD/uhI= dependencies: d3-queue "1" iconv-lite "0.2" @@ -9480,6 +11717,7 @@ shapefile@0.3: sharkdown@^0.1.0, sharkdown@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/sharkdown/-/sharkdown-0.1.0.tgz#61d4fe529e75d02442127cc9234362265099214f" + integrity sha1-YdT+Up510CRCEnzJI0NiJlCZIU8= dependencies: cardinal "~0.4.2" expect.js "~0.2.0" @@ -9491,16 +11729,19 @@ sharkdown@^0.1.0, sharkdown@~0.1.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shelljs@^0.8.0: version "0.8.2" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" + integrity sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -9509,20 +11750,31 @@ shelljs@^0.8.0: shortid@^2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.8.tgz#033b117d6a2e975804f6f0969dbe7d3d0b355131" + integrity sha1-AzsRfWoul1gE9vCWnb59PQs1UTE= shuffle-seed@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/shuffle-seed/-/shuffle-seed-1.1.6.tgz#533c12683bab3b4fa3e8751fc4e562146744260b" + integrity sha1-UzwSaDurO0+j6HUfxOViFGdEJgs= dependencies: seedrandom "^2.4.2" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" sinon@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.5.0.tgz#427ae312a337d3c516804ce2754e8c0d5028cb04" + resolved "http://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz#427ae312a337d3c516804ce2754e8c0d5028cb04" + integrity sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w== dependencies: "@sinonjs/formatio" "^2.0.0" diff "^3.1.0" @@ -9535,24 +11787,29 @@ sinon@^4.5.0: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== dependencies: is-fullwidth-code-point "^2.0.0" slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -9561,12 +11818,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -9577,41 +11836,41 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@0.2.x: - version "0.2.4" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" - dependencies: - hoek "0.9.x" - sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= dependencies: hoek "2.x.x" sort-asc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.1.0.tgz#ab799df61fc73ea0956c79c4b531ed1e9e7727e9" + integrity sha1-q3md9h/HPqCVbHnEtTHtHp53J+k= sort-desc@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.1.1.tgz#198b8c0cdeb095c463341861e3925d4ee359a9ee" + integrity sha1-GYuMDN6wlcRjNBhh45JdTuNZqe4= sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" sort-object@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-0.3.2.tgz#98e0d199ede40e07c61a84403c61d6c3b290f9e2" + integrity sha1-mODRme3kDgfGGoRAPGHWw7KQ+eI= dependencies: sort-asc "^0.1.0" sort-desc "^0.1.1" @@ -9619,14 +11878,17 @@ sort-object@^0.3.2: sorted-object@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A== source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" @@ -9637,50 +11899,60 @@ source-map-resolve@^0.5.0: source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.4.x, source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= dependencies: amdefine ">=0.0.4" source-map@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.0.tgz#0fe96503ac86a5adb5de63f4e412ae4872cdbe86" + integrity sha1-D+llA6yGpa213mP05BKuSHLNvoY= source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= dependencies: amdefine ">=0.0.4" space-separated-tokens@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" + integrity sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA== dependencies: trim "0.0.1" spawn-please@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/spawn-please/-/spawn-please-0.3.0.tgz#db338ec4cff63abc69f1d0e08cee9eb8bebd9d11" + integrity sha1-2zOOxM/2Orxp8dDgjO6euL69nRE= spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + integrity sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -9688,45 +11960,54 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + integrity sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" + integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split@~0.2.10: version "0.2.10" - resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57" + resolved "http://registry.npmjs.org/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57" + integrity sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc= dependencies: through "2" sprintf-js@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" + integrity sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw= sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= srcdoc-polyfill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/srcdoc-polyfill/-/srcdoc-polyfill-1.0.0.tgz#81b6d79131f33231ea0f205c9236be90e9aca718" + integrity sha1-gbbXkTHzMjHqDyBckja+kOmspxg= sshpk@^1.7.0: version "1.14.2" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + integrity sha1-xvxhZIo9nE52T9P8306hBeSSupg= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -9742,22 +12023,31 @@ sshpk@^1.7.0: ssri@^5.2.4: version "5.3.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== dependencies: safe-buffer "^5.1.1" +stable@~0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + state-toggle@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== static-eval@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.0.tgz#0e821f8926847def7b4b50cda5d55c04a9b13864" + integrity sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw== dependencies: escodegen "^1.8.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9765,6 +12055,7 @@ static-extend@^0.1.1: static-module@^2.2.0: version "2.2.5" resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" + integrity sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== dependencies: concat-stream "~1.6.0" convert-source-map "^1.5.1" @@ -9784,13 +12075,15 @@ static-module@^2.2.0: stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= dependencies: inherits "~2.0.1" readable-stream "^2.0.2" stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -9798,6 +12091,7 @@ stream-each@^1.1.0: stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -9808,32 +12102,44 @@ stream-http@^2.7.2: stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= stream-spigot@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/stream-spigot/-/stream-spigot-2.1.2.tgz#7de145e819f8dd0db45090d13dcf73a8ed3cc035" + integrity sha1-feFF6Bn43Q20UJDRPc9zqO08wDU= dependencies: readable-stream "~1.1.0" +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= strictdom@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strictdom/-/strictdom-1.0.1.tgz#189de91649f73d44d59b8432efa68ef9d2659460" + integrity sha1-GJ3pFkn3PUTVm4Qy76aO+dJllGA= string-hash@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -9842,43 +12148,60 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.trim@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + function-bind "^1.0.2" + string_decoder@^1.0.0, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= stringstream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= strip-bom-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + integrity sha1-+H217yYT9paKpUWr/h7HKLaoKco= dependencies: first-chunk-stream "^2.0.0" strip-bom "^2.0.0" @@ -9886,35 +12209,51 @@ strip-bom-stream@^2.0.0: strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= style-loader@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" + integrity sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg== dependencies: loader-utils "^1.1.0" schema-utils "^0.4.5" +stylehacks@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" + integrity sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + supercluster@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-2.3.0.tgz#87ab56081bbea9a1d724df5351ee9e8c3af2f48b" + integrity sha1-h6tWCBu+qaHXJN9TUe6ejDry9Is= dependencies: kdbush "^1.0.1" @@ -9927,28 +12266,40 @@ supercluster@^2.3.0: supports-color@3.1.2, supports-color@3.1.x: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU= dependencies: has-flag "^1.0.0" +supports-color@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5" + integrity sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ== + dependencies: + has-flag "^2.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= dependencies: coa "~1.0.1" colors "~1.1.2" @@ -9958,21 +12309,45 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" +svgo@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" + integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== + dependencies: + coa "~2.0.1" + colors "~1.1.2" + css-select "^2.0.0" + css-select-base-adapter "~0.1.0" + css-tree "1.0.0-alpha.28" + css-url-regex "^1.1.0" + csso "^3.5.0" + js-yaml "^3.12.0" + mkdirp "~0.5.1" + object.values "^1.0.4" + sax "~1.2.4" + stable "~0.1.6" + unquote "~1.1.1" + util.promisify "~1.0.0" + symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== dependencies: ajv "^5.2.3" ajv-keywords "^2.1.0" @@ -9984,18 +12359,26 @@ table@4.0.2: tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + integrity sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg== + +tapable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" + integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA== tar@^2.0.0, tar@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" inherits "2" tar@^4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" @@ -10008,6 +12391,7 @@ tar@^4: temp@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" @@ -10015,88 +12399,115 @@ temp@^0.8.1: term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= dependencies: execa "^0.7.0" text-encoding@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + integrity sha1-45mpgiV6J22uQou5KEXLcb3CbRk= text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= textextensions@2: version "2.2.0" resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" + integrity sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA== + +throttleit@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8= through2@^2.0.0, through2@^2.0.3, through2@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= dependencies: readable-stream "^2.1.5" xtend "~4.0.1" -through2@~0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through@2, through@^2.3.6, through@~2.3.4: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== dependencies: setimmediate "^1.0.4" +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + tiny-emitter@2.0.2, tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== tinycolor2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= tinyqueue@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" + integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== + +tmp@0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + integrity sha1-jzirlDjhcxXl29izZX6L+yd65Kc= + dependencies: + os-tmpdir "~1.0.1" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10104,6 +12515,7 @@ to-regex-range@^2.1.0: to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -10113,10 +12525,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: to-utf8@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/to-utf8/-/to-utf8-0.0.1.tgz#d17aea72ff2fba39b9e43601be7b3ff72e089852" + integrity sha1-0Xrqcv8vujm55DYBvns/9y4ImFI= topojson@^1.6.19: version "1.6.27" resolved "https://registry.yarnpkg.com/topojson/-/topojson-1.6.27.tgz#adbe33a67e2f1673d338df12644ad20fc20b42ed" + integrity sha1-rb4zpn4vFnPTON8SZErSD8ILQu0= dependencies: d3 "3" d3-geo-projection "0.2" @@ -10128,6 +12542,7 @@ topojson@^1.6.19: tough-cookie@^2.3.2: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: psl "^1.1.24" punycode "^1.4.1" @@ -10135,90 +12550,105 @@ tough-cookie@^2.3.2: tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== dependencies: punycode "^1.4.1" tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= transform-loader@^0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/transform-loader/-/transform-loader-0.2.4.tgz#e5c87877ba96d51d3f225368587b46e226d1cec9" + integrity sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk= dependencies: loader-utils "^1.0.2" traverse@~0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= trim-trailing-lines@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.2.tgz#7f1663ec55c480139e2de5e486c6aef6cc24a535" + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.3.0.tgz#ad681b68f5321ad2827c4cfb1b7d5df2cfe942ee" - tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== typed-function@0.10.7: version "0.10.7" resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-0.10.7.tgz#f702af7d77a64b61abf86799ff2d74266ebc4477" + integrity sha512-3mlZ5AwRMbLvUKkc8a1TI4RUJUS2H27pmD5q0lHRObgsoWzhDAX01yg82kwSP1FUw922/4Y9ZliIEh0qJZcz+g== typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= ua-parser-js@^0.7.18: version "0.7.18" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" + integrity sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA== uglify-es@^3.3.4: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== dependencies: commander "~2.13.0" source-map "~0.6.1" @@ -10226,6 +12656,7 @@ uglify-es@^3.3.4: uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -10235,10 +12666,26 @@ uglify-js@^2.6: uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= -uglifyjs-webpack-plugin@^1.1.0, uglifyjs-webpack-plugin@^1.2.4: +uglifyjs-webpack-plugin@^1.1.0: version "1.2.7" resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" + integrity sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA== + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +uglifyjs-webpack-plugin@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" + integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw== dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -10252,32 +12699,39 @@ uglifyjs-webpack-plugin@^1.1.0, uglifyjs-webpack-plugin@^1.2.4: uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= umask@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= uncontrollable@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9" + integrity sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak= dependencies: invariant "^2.1.0" underscore@^1.8.3: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= unherit@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== dependencies: inherits "^2.0.1" xtend "^4.0.1" @@ -10285,6 +12739,7 @@ unherit@^1.0.4: unified@^6.1.5: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -10296,6 +12751,7 @@ unified@^6.1.5: union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -10305,56 +12761,77 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= unique-filename@^1.1.0, unique-filename@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== dependencies: imurmurhash "^0.1.4" unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= dependencies: crypto-random-string "^1.0.0" unist-util-is@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== unist-util-remove-position@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== dependencies: unist-util-visit "^1.1.0" unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.1.tgz#c019ac9337a62486be58531bc27e7499ae7d55c7" + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== dependencies: - unist-util-is "^2.1.1" + unist-util-visit-parents "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10362,18 +12839,22 @@ unset-value@^1.0.0: untildify@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" + integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== update-notifier@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== dependencies: boxen "^1.2.1" chalk "^2.0.1" @@ -10389,95 +12870,119 @@ update-notifier@^2.2.0: uri-js@^4.2.1: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urijs@^1.18.10: version "1.19.1" resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" + integrity sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg== urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" + version "1.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" + integrity sha512-vugEeXjyYFBCUOpX+ZuaunbK3QXMKaQ3zUnRfIpRBlGkY7QizCnzyyn2ASfcxsvyU3ef+CJppVywnl3Kgf13Gg== dependencies: loader-utils "^1.1.0" mime "^2.0.3" - schema-utils "^0.4.3" + schema-utils "^1.0.0" url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: prepend-http "^1.0.1" url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= -url@^0.11.0: +url@0.11.0, url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util.promisify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" util@^0.10.3: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: +uuid@^3.0.0, uuid@^3.1.0: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== v8-compile-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a" + integrity sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg== v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= dependencies: user-home "^1.1.1" validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -10485,22 +12990,26 @@ validate-npm-package-license@^3.0.1: validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" validate-npm-package-name@~2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz#f65695b22f7324442019a3c7fa39a6e7fd299085" + integrity sha1-9laVsi9zJEQgGaPH+jmm5/0pkIU= dependencies: builtins "0.0.7" vendors@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -10509,16 +13018,19 @@ verror@1.10.0: vfile-location@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.3.tgz#083ba80e50968e8d420be49dd1ea9a992131df77" + integrity sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A== vfile-message@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.1.tgz#51a2ccd8a6b97a7980bb34efb9ebde9632e93677" + integrity sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug== dependencies: unist-util-stringify-position "^1.1.1" vfile@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== dependencies: is-buffer "^1.1.4" replace-ext "1.0.0" @@ -10526,14 +13038,17 @@ vfile@^2.0.0: vfile-message "^1.0.0" viewport-mercator-project@^5.0.0, viewport-mercator-project@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-5.2.0.tgz#2c50bc624a085d01a3a486f22ec329c0511fe4bd" + version "5.3.0" + resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-5.3.0.tgz#16b7c99813495ef951480893a5b7d82d9c49034b" + integrity sha512-jiLSirIXwwDp8c7/UcH5hoCprWx3OuenHaw+VB34Q56CUfO3EvXRgetnm8lVu+mFGBEzKsOSOND5XPjsA98gHw== dependencies: - math.gl "^2.0.0" + "@babel/runtime" "^7.0.0" + math.gl "^2.1.0" vinyl-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" + integrity sha1-p+v1/779obfRjRQPyweyI++2dRo= dependencies: graceful-fs "^4.1.2" pify "^2.3.0" @@ -10545,6 +13060,7 @@ vinyl-file@^2.0.0: vinyl@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + integrity sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ= dependencies: clone "^1.0.0" clone-stats "^0.0.1" @@ -10553,6 +13069,7 @@ vinyl@^1.1.0: vinyl@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -10564,16 +13081,19 @@ vinyl@^2.0.1: vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" vt-pbf@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" + integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== dependencies: "@mapbox/point-geometry" "0.1.0" "@mapbox/vector-tile" "^1.3.1" @@ -10582,12 +13102,14 @@ vt-pbf@^3.0.1: warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= dependencies: loose-envify "^1.0.0" watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: chokidar "^2.0.2" graceful-fs "^4.1.2" @@ -10596,41 +13118,49 @@ watchpack@^1.5.0: wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webgl-debug@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/webgl-debug/-/webgl-debug-2.0.1.tgz#dc11bea3d947764bce061fdb5a23109c13787c95" + integrity sha512-G7BOpMmqdc31X1nb3eqwVxw/v1MNV/ulgw7Bs+7+a/sn+fC0d0OiMkerA55C6+3BL2vULyJ3kZLPcEL5GbXzhw== webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= webidl-conversions@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-addons@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" + integrity sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g== dependencies: jscodeshift "^0.4.0" webpack-assets-manifest@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.0.1.tgz#b1e977f3efa691e32a846862fc312214f4d18488" + version "3.0.2" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.0.2.tgz#d9c7f57d4e0a6a261e2558258073f7c5e95e3f32" + integrity sha512-HJ8IjwlPztZ15uwyCGOebexADexbCs3TRMod1Ep4nOHufhmPdKQdFoHW6G02gH77hFG771P6sBxB9/TzM6k09g== dependencies: chalk "^2.0" lodash.get "^4.0" lodash.has "^4.0" mkdirp "^0.5" - schema-utils "^0.4.5" + schema-utils "^1.0.0" tapable "^1.0.0" + webpack-sources "^1.0.0" webpack-cli@^2.0.10: version "2.1.5" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.1.5.tgz#3081fdeb2f205f0a54aa397986880b0c20a71f7a" + integrity sha512-CiWQR+1JS77rmyiO6y1q8Kt/O+e8nUUC9YfJ25JtSmzDwbqJV7vIsh3+QKRHVTbTCa0DaVh8iY1LBiagUIDB3g== dependencies: chalk "^2.4.1" cross-spawn "^6.0.5" @@ -10662,28 +13192,38 @@ webpack-cli@^2.0.10: webpack-log@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== dependencies: chalk "^2.1.0" log-symbols "^2.1.0" loglevelnext "^1.0.1" uuid "^3.1.0" -webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" +webpack-sources@^1.0.0, webpack-sources@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.6.0: - version "4.16.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.16.1.tgz#2c4b89ea648125c3e67bcca6adf49ce2c14b2d31" +webpack-sources@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.2.0.tgz#18181e0d013fce096faf6f8e6d41eeffffdceac2" + integrity sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw== dependencies: - "@webassemblyjs/ast" "1.5.13" - "@webassemblyjs/helper-module-context" "1.5.13" - "@webassemblyjs/wasm-edit" "1.5.13" - "@webassemblyjs/wasm-opt" "1.5.13" - "@webassemblyjs/wasm-parser" "1.5.13" + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.18.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.19.0.tgz#252296c8af2d21c0994911007defdb3913a7bc66" + integrity sha512-Ak3mMGtA8F1ar4ZP6VCLiICNIPoillROGYstnEd+LzI5Tkvz0qTITeTMcAFjxyYsaxu98F97yrCWdcxRUMPAYw== + dependencies: + "@webassemblyjs/ast" "1.7.6" + "@webassemblyjs/helper-module-context" "1.7.6" + "@webassemblyjs/wasm-edit" "1.7.6" + "@webassemblyjs/wasm-parser" "1.7.6" acorn "^5.6.2" acorn-dynamic-import "^3.0.0" ajv "^6.1.0" @@ -10700,28 +13240,37 @@ webpack@^4.6.0: neo-async "^2.5.0" node-libs-browser "^2.0.0" schema-utils "^0.4.4" - tapable "^1.0.0" + tapable "^1.1.0" uglifyjs-webpack-plugin "^1.2.4" watchpack "^1.5.0" - webpack-sources "^1.0.1" + webpack-sources "^1.2.0" wgs84@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= whatwg-encoding@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + version "1.0.4" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" + integrity sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg== dependencies: - iconv-lite "0.4.19" + iconv-lite "0.4.23" whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + +whatwg-fetch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== whatwg-url@^4.3.0: version "4.8.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + integrity sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA= dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -10729,60 +13278,72 @@ whatwg-url@^4.3.0: whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1, which@^1.1.1, which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@1.2.x, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU= dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" widest-line@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + integrity sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM= dependencies: string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= wordwrap@1.0.x, wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== dependencies: errno "~0.1.7" wrap-ansi@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -10790,10 +13351,12 @@ wrap-ansi@^2.0.0: wrappy@1, wrappy@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^1.2.0: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -10802,6 +13365,7 @@ write-file-atomic@^1.2.0: write-file-atomic@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -10810,6 +13374,7 @@ write-file-atomic@^2.0.0: write-file-atomic@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" + integrity sha1-FMZtTkyzygVlwozzt6bz5NWTj6s= dependencies: graceful-fs "^4.1.2" imurmurhash "^0.1.4" @@ -10818,57 +13383,61 @@ write-file-atomic@~1.2.0: write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= dependencies: mkdirp "^0.5.1" x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU= -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -xtend@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" yargs@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -10886,21 +13455,39 @@ yargs@^11.1.0: yargs@~1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + integrity sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s= dependencies: minimist "^0.1.0" yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= dependencies: camelcase "^1.0.2" cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + +yauzl@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.8.0.tgz#79450aff22b2a9c5a41ef54e02db907ccfbf9ee2" + integrity sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" + yeoman-environment@^2.0.5, yeoman-environment@^2.1.1: version "2.3.1" resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.3.1.tgz#1aa00cc474a8e48518ab2b0f64b43034215e9997" + integrity sha512-7BFbWNnJqG8f0TFR/awcccHj7Vl9CeG66Yuu81DiVIamqO7Uo/EOrdryjNICdRJNFdaQTliN4HUkM1zQBzszCQ== dependencies: chalk "^2.1.0" cross-spawn "^6.0.5" @@ -10921,6 +13508,7 @@ yeoman-environment@^2.0.5, yeoman-environment@^2.1.1: yeoman-generator@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.5.tgz#57b0b3474701293cc9ec965288f3400b00887c81" + integrity sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg== dependencies: async "^2.6.0" chalk "^2.3.0" diff --git a/superset/cache_util.py b/superset/cache_util.py index d456f6601d9ba..d0eb031eff389 100644 --- a/superset/cache_util.py +++ b/superset/cache_util.py @@ -7,7 +7,7 @@ from flask import request -from superset import tables_cache +from superset import cache, tables_cache def view_cache_key(*unused_args, **unused_kwargs): @@ -15,22 +15,41 @@ def view_cache_key(*unused_args, **unused_kwargs): return 'view/{}/{}'.format(request.path, args_hash) -def memoized_func(timeout=5 * 60, key=view_cache_key): +def memoized_func(key=view_cache_key, use_tables_cache=False): """Use this decorator to cache functions that have predefined first arg. + enable_cache is treated as True by default, + except enable_cache = False is passed to the decorated function. + + force means whether to force refresh the cache and is treated as False by default, + except force = True is passed to the decorated function. + + timeout of cache is set to 600 seconds by default, + except cache_timeout = {timeout in seconds} is passed to the decorated function. + memoized_func uses simple_cache and stored the data in memory. Key is a callable function that takes function arguments and returns the caching key. """ def wrap(f): - if tables_cache: + selected_cache = None + if use_tables_cache and tables_cache: + selected_cache = tables_cache + elif cache: + selected_cache = cache + + if selected_cache: def wrapped_f(cls, *args, **kwargs): + if not kwargs.get('enable_cache', True): + return f(cls, *args, **kwargs) + cache_key = key(*args, **kwargs) - o = tables_cache.get(cache_key) - if not kwargs['force'] and o is not None: + o = selected_cache.get(cache_key) + if not kwargs.get('force') and o is not None: return o o = f(cls, *args, **kwargs) - tables_cache.set(cache_key, o, timeout=timeout) + selected_cache.set(cache_key, o, + timeout=kwargs.get('cache_timeout', 600)) return o else: # noop diff --git a/superset/config.py b/superset/config.py index a5e4f2988c4e1..00889572ecacc 100644 --- a/superset/config.py +++ b/superset/config.py @@ -275,8 +275,13 @@ # Set this API key to enable Mapbox visualizations MAPBOX_API_KEY = os.environ.get('MAPBOX_API_KEY', '') -# Maximum number of rows returned in the SQL editor -SQL_MAX_ROW = 1000 +# Maximum number of rows returned from a database +# in async mode, no more than SQL_MAX_ROW will be returned and stored +# in the results backend. This also becomes the limit when exporting CSVs +SQL_MAX_ROW = 100000 + +# Limit to be returned to the frontend. +DISPLAY_MAX_ROW = 1000 # Maximum number of tables/views displayed in the dropdown window in SQL Lab. MAX_TABLE_NAMES = 3000 @@ -302,8 +307,6 @@ class CeleryConfig(object): CELERY_CONFIG = CeleryConfig """ CELERY_CONFIG = None -SQL_CELERY_DB_FILE_PATH = os.path.join(DATA_DIR, 'celerydb.sqlite') -SQL_CELERY_RESULTS_DB_FILE_PATH = os.path.join(DATA_DIR, 'celery_results.sqlite') # static http headers to be served by your Superset server. # This header prevents iFrames from other domains and @@ -415,7 +418,7 @@ class CeleryConfig(object): # The id of a template dashboard that should be copied to every new user DASHBOARD_TEMPLATE_ID = None -# A callable that allows altering the database conneciton URL and params +# A callable that allows altering the database connection URL and params # on the fly, at runtime. This allows for things like impersonation or # arbitrary logic. For instance you can wire different users to # use different connection parameters, or pass their email address as the diff --git a/superset/connectors/base/models.py b/superset/connectors/base/models.py index bee7e1c32db9f..e100b0a2554bd 100644 --- a/superset/connectors/base/models.py +++ b/superset/connectors/base/models.py @@ -188,7 +188,8 @@ def data(self): 'description': self.description, 'database': self.database.data, # pylint: disable=no-member 'default_endpoint': self.default_endpoint, - 'filter_select': self.filter_select_enabled, + 'filter_select': self.filter_select_enabled, # TODO deprecate + 'filter_select_enabled': self.filter_select_enabled, 'name': self.name, 'datasource_name': self.datasource_name, 'type': self.type, diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py index 7bb6a5e192563..23b0b736f18f2 100644 --- a/superset/connectors/druid/models.py +++ b/superset/connectors/druid/models.py @@ -488,6 +488,7 @@ class DruidDatasource(Model, BaseDatasource): export_fields = ( 'datasource_name', 'is_hidden', 'description', 'default_endpoint', 'cluster_name', 'offset', 'cache_timeout', 'params', + 'filter_select_enabled', ) update_from_object_fields = export_fields diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index 44a2cfb1ca9d5..c7cb9f84df6ef 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -99,13 +99,13 @@ class TableColumn(Model, BaseColumn): s for s in export_fields if s not in ('table_id',)] export_parent = 'table' - @property - def sqla_col(self): - name = self.column_name + def get_sqla_col(self, label=None): + db_engine_spec = self.table.database.db_engine_spec + label = db_engine_spec.make_label_compatible(label if label else self.column_name) if not self.expression: - col = column(self.column_name).label(name) + col = column(self.column_name).label(label) else: - col = literal_column(self.expression).label(name) + col = literal_column(self.expression).label(label) return col @property @@ -113,7 +113,7 @@ def datasource(self): return self.table def get_time_filter(self, start_dttm, end_dttm): - col = self.sqla_col.label('__time') + col = self.get_sqla_col(label='__time') l = [] # noqa: E741 if start_dttm: l.append(col >= text(self.dttm_sql_literal(start_dttm))) @@ -231,10 +231,10 @@ class SqlMetric(Model, BaseMetric): s for s in export_fields if s not in ('table_id', )]) export_parent = 'table' - @property - def sqla_col(self): - name = self.metric_name - return literal_column(self.expression).label(name) + def get_sqla_col(self, label=None): + db_engine_spec = self.table.database.db_engine_spec + label = db_engine_spec.make_label_compatible(label if label else self.metric_name) + return literal_column(self.expression).label(label) @property def perm(self): @@ -287,7 +287,9 @@ class SqlaTable(Model, BaseDatasource): export_fields = ( 'table_name', 'main_dttm_col', 'description', 'default_endpoint', 'database_id', 'offset', 'cache_timeout', 'schema', - 'sql', 'params', 'template_params') + 'sql', 'params', 'template_params', 'filter_select_enabled', + 'fetch_values_predicate', + ) update_from_object_fields = [ f for f in export_fields if f not in ('table_name', 'database_id')] export_parent = 'database' @@ -412,6 +414,7 @@ def data(self): d['granularity_sqla'] = utils.choicify(self.dttm_cols) d['time_grain_sqla'] = grains d['main_dttm_col'] = self.main_dttm_col + d['fetch_values_predicate'] = self.fetch_values_predicate return d def values_for_column(self, column_name, limit=10000): @@ -421,11 +424,10 @@ def values_for_column(self, column_name, limit=10000): cols = {col.column_name: col for col in self.columns} target_col = cols[column_name] tp = self.get_template_processor() - db_engine_spec = self.database.db_engine_spec qry = ( - select([target_col.sqla_col]) - .select_from(self.get_from_clause(tp, db_engine_spec)) + select([target_col.get_sqla_col()]) + .select_from(self.get_from_clause(tp)) .distinct() ) if limit: @@ -474,7 +476,7 @@ def get_sqla_table(self): tbl.schema = self.schema return tbl - def get_from_clause(self, template_processor=None, db_engine_spec=None): + def get_from_clause(self, template_processor=None): # Supporting arbitrary SQL statements in place of tables if self.sql: from_sql = self.sql @@ -484,7 +486,7 @@ def get_from_clause(self, template_processor=None, db_engine_spec=None): return TextAsFrom(sa.text(from_sql), []).alias('expr_qry') return self.get_sqla_table() - def adhoc_metric_to_sa(self, metric, cols): + def adhoc_metric_to_sqla(self, metric, cols): """ Turn an adhoc metric into a sqlalchemy column. @@ -493,22 +495,25 @@ def adhoc_metric_to_sa(self, metric, cols): :returns: The metric defined as a sqlalchemy column :rtype: sqlalchemy.sql.column """ - expressionType = metric.get('expressionType') - if expressionType == utils.ADHOC_METRIC_EXPRESSION_TYPES['SIMPLE']: + expression_type = metric.get('expressionType') + db_engine_spec = self.database.db_engine_spec + label = db_engine_spec.make_label_compatible(metric.get('label')) + + if expression_type == utils.ADHOC_METRIC_EXPRESSION_TYPES['SIMPLE']: column_name = metric.get('column').get('column_name') - sa_column = column(column_name) + sqla_column = column(column_name) table_column = cols.get(column_name) if table_column: - sa_column = table_column.sqla_col - - sa_metric = self.sqla_aggregations[metric.get('aggregate')](sa_column) - sa_metric = sa_metric.label(metric.get('label')) - return sa_metric - elif expressionType == utils.ADHOC_METRIC_EXPRESSION_TYPES['SQL']: - sa_metric = literal_column(metric.get('sqlExpression')) - sa_metric = sa_metric.label(metric.get('label')) - return sa_metric + sqla_column = table_column.get_sqla_col() + + sqla_metric = self.sqla_aggregations[metric.get('aggregate')](sqla_column) + sqla_metric = sqla_metric.label(label) + return sqla_metric + elif expression_type == utils.ADHOC_METRIC_EXPRESSION_TYPES['SQL']: + sqla_metric = literal_column(metric.get('sqlExpression')) + sqla_metric = sqla_metric.label(label) + return sqla_metric else: return None @@ -566,15 +571,16 @@ def get_sqla_query( # sqla metrics_exprs = [] for m in metrics: if utils.is_adhoc_metric(m): - metrics_exprs.append(self.adhoc_metric_to_sa(m, cols)) + metrics_exprs.append(self.adhoc_metric_to_sqla(m, cols)) elif m in metrics_dict: - metrics_exprs.append(metrics_dict.get(m).sqla_col) + metrics_exprs.append(metrics_dict.get(m).get_sqla_col()) else: raise Exception(_("Metric '{}' is not valid".format(m))) if metrics_exprs: main_metric_expr = metrics_exprs[0] else: - main_metric_expr = literal_column('COUNT(*)').label('ccount') + main_metric_expr = literal_column('COUNT(*)').label( + db_engine_spec.make_label_compatible('count')) select_exprs = [] groupby_exprs = [] @@ -585,8 +591,8 @@ def get_sqla_query( # sqla inner_groupby_exprs = [] for s in groupby: col = cols[s] - outer = col.sqla_col - inner = col.sqla_col.label(col.column_name + '__') + outer = col.get_sqla_col() + inner = col.get_sqla_col(col.column_name + '__') groupby_exprs.append(outer) select_exprs.append(outer) @@ -594,7 +600,7 @@ def get_sqla_query( # sqla inner_select_exprs.append(inner) elif columns: for s in columns: - select_exprs.append(cols[s].sqla_col) + select_exprs.append(cols[s].get_sqla_col()) metrics_exprs = [] if granularity: @@ -618,7 +624,7 @@ def get_sqla_query( # sqla select_exprs += metrics_exprs qry = sa.select(select_exprs) - tbl = self.get_from_clause(template_processor, db_engine_spec) + tbl = self.get_from_clause(template_processor) if not columns: qry = qry.group_by(*groupby_exprs) @@ -638,9 +644,9 @@ def get_sqla_query( # sqla target_column_is_numeric=col_obj.is_num, is_list_target=is_list_target) if op in ('in', 'not in'): - cond = col_obj.sqla_col.in_(eq) + cond = col_obj.get_sqla_col().in_(eq) if '' in eq: - cond = or_(cond, col_obj.sqla_col == None) # noqa + cond = or_(cond, col_obj.get_sqla_col() == None) # noqa if op == 'not in': cond = ~cond where_clause_and.append(cond) @@ -648,23 +654,24 @@ def get_sqla_query( # sqla if col_obj.is_num: eq = utils.string_to_num(flt['val']) if op == '==': - where_clause_and.append(col_obj.sqla_col == eq) + where_clause_and.append(col_obj.get_sqla_col() == eq) elif op == '!=': - where_clause_and.append(col_obj.sqla_col != eq) + where_clause_and.append(col_obj.get_sqla_col() != eq) elif op == '>': - where_clause_and.append(col_obj.sqla_col > eq) + where_clause_and.append(col_obj.get_sqla_col() > eq) elif op == '<': - where_clause_and.append(col_obj.sqla_col < eq) + where_clause_and.append(col_obj.get_sqla_col() < eq) elif op == '>=': - where_clause_and.append(col_obj.sqla_col >= eq) + where_clause_and.append(col_obj.get_sqla_col() >= eq) elif op == '<=': - where_clause_and.append(col_obj.sqla_col <= eq) + where_clause_and.append(col_obj.get_sqla_col() <= eq) elif op == 'LIKE': - where_clause_and.append(col_obj.sqla_col.like(eq)) + where_clause_and.append(col_obj.get_sqla_col().like(eq)) elif op == 'IS NULL': - where_clause_and.append(col_obj.sqla_col == None) # noqa + where_clause_and.append(col_obj.get_sqla_col() == None) # noqa elif op == 'IS NOT NULL': - where_clause_and.append(col_obj.sqla_col != None) # noqa + where_clause_and.append( + col_obj.get_sqla_col() != None) # noqa if extras: where = extras.get('where') if where: @@ -686,7 +693,7 @@ def get_sqla_query( # sqla for col, ascending in orderby: direction = asc if ascending else desc if utils.is_adhoc_metric(col): - col = self.adhoc_metric_to_sa(col, cols) + col = self.adhoc_metric_to_sqla(col, cols) qry = qry.order_by(direction(col)) if row_limit: @@ -712,12 +719,12 @@ def get_sqla_query( # sqla ob = inner_main_metric_expr if timeseries_limit_metric: if utils.is_adhoc_metric(timeseries_limit_metric): - ob = self.adhoc_metric_to_sa(timeseries_limit_metric, cols) + ob = self.adhoc_metric_to_sqla(timeseries_limit_metric, cols) elif timeseries_limit_metric in metrics_dict: timeseries_limit_metric = metrics_dict.get( timeseries_limit_metric, ) - ob = timeseries_limit_metric.sqla_col + ob = timeseries_limit_metric.get_sqla_col() else: raise Exception(_("Metric '{}' is not valid".format(m))) direction = desc if order_desc else asc @@ -749,7 +756,11 @@ def get_sqla_query( # sqla 'order_desc': True, } result = self.query(subquery_obj) - dimensions = [c for c in result.df.columns if c not in metrics] + cols = {col.column_name: col for col in self.columns} + dimensions = [ + c for c in result.df.columns + if c not in metrics and c in cols + ] top_groups = self._get_top_groups(result.df, dimensions) qry = qry.where(top_groups) @@ -762,7 +773,7 @@ def _get_top_groups(self, df, dimensions): group = [] for dimension in dimensions: col_obj = cols.get(dimension) - group.append(col_obj.sqla_col == row[dimension]) + group.append(col_obj.get_sqla_col() == row[dimension]) groups.append(and_(*group)) return or_(*groups) @@ -801,7 +812,8 @@ def fetch_metadata(self): """Fetches the metadata for the table and merges it in""" try: table = self.get_sqla_table_object() - except Exception: + except Exception as e: + logging.exception(e) raise Exception(_( "Table [{}] doesn't seem to exist in the specified database, " "couldn't fetch column information").format(self.table_name)) @@ -816,6 +828,7 @@ def fetch_metadata(self): .filter(or_(TableColumn.column_name == col.name for col in table.columns))) dbcols = {dbcol.column_name: dbcol for dbcol in dbcols} + db_engine_spec = self.database.db_engine_spec for col in table.columns: try: @@ -848,6 +861,9 @@ def fetch_metadata(self): )) if not self.main_dttm_col: self.main_dttm_col = any_date_col + for metric in metrics: + metric.metric_name = db_engine_spec.mutate_expression_label( + metric.metric_name) self.add_missing_metrics(metrics) db.session.merge(self) db.session.commit() diff --git a/superset/dataframe.py b/superset/dataframe.py index 834f11804743b..1678dd97f7f6d 100644 --- a/superset/dataframe.py +++ b/superset/dataframe.py @@ -73,9 +73,7 @@ def __init__(self, data, cursor_description, db_engine_spec): if cursor_description: column_names = [col[0] for col in cursor_description] - case_sensitive = db_engine_spec.consistent_case_sensitivity - self.column_names = dedup(column_names, - case_sensitive=case_sensitive) + self.column_names = dedup(column_names) data = data or [] self.df = ( diff --git a/superset/db_engine_specs.py b/superset/db_engine_specs.py index 13eb69502bf51..90a4748c2dc91 100644 --- a/superset/db_engine_specs.py +++ b/superset/db_engine_specs.py @@ -35,7 +35,7 @@ from sqlalchemy import select from sqlalchemy.engine import create_engine from sqlalchemy.engine.url import make_url -from sqlalchemy.sql import text +from sqlalchemy.sql import quoted_name, text from sqlalchemy.sql.expression import TextAsFrom import sqlparse from tableschema import Table @@ -101,7 +101,7 @@ class BaseEngineSpec(object): time_secondary_columns = False inner_joins = True allows_subquery = True - consistent_case_sensitivity = True # do results have same case as qry for col names? + force_column_alias_quotes = False arraysize = None @classmethod @@ -234,8 +234,8 @@ def convert_dttm(cls, target_type, dttm): @classmethod @cache_util.memoized_func( - timeout=600, - key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1])) + key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1]), + use_tables_cache=True) def fetch_result_sets(cls, db, datasource_type, force=False): """Returns the dictionary {schema : [result_set_name]}. @@ -299,13 +299,37 @@ def patch(cls): pass @classmethod - def get_schema_names(cls, inspector): + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{}:schema_list'.format(kwargs.get('db_id'))) + def get_schema_names(cls, inspector, db_id, + enable_cache, cache_timeout, force=False): + """A function to get all schema names in this db. + + :param inspector: URI string + :param db_id: database id + :param enable_cache: whether to enable cache for the function + :param cache_timeout: timeout settings for cache in second. + :param force: force to refresh + :return: a list of schema names + """ return inspector.get_schema_names() @classmethod - def get_table_names(cls, schema, inspector): + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{db_id}:schema:{schema}:table_list'.format( + db_id=kwargs.get('db_id'), schema=kwargs.get('schema'))) + def get_table_names(cls, inspector, db_id, schema, + enable_cache, cache_timeout, force=False): return sorted(inspector.get_table_names(schema)) + @classmethod + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{db_id}:schema:{schema}:view_list'.format( + db_id=kwargs.get('db_id'), schema=kwargs.get('schema'))) + def get_view_names(cls, inspector, db_id, schema, + enable_cache, cache_timeout, force=False): + return sorted(inspector.get_view_names(schema)) + @classmethod def where_latest_partition( cls, table_name, schema, database, qry, columns=None): @@ -370,61 +394,21 @@ def get_configuration_for_impersonation(cls, uri, impersonate_user, username): return {} @classmethod - def execute(cls, cursor, query, async=False): + def execute(cls, cursor, query, **kwargs): if cls.arraysize: cursor.arraysize = cls.arraysize cursor.execute(query) @classmethod - def adjust_df_column_names(cls, df, fd): - """Based of fields in form_data, return dataframe with new column names - - Usually sqla engines return column names whose case matches that of the - original query. For example: - SELECT 1 as col1, 2 as COL2, 3 as Col_3 - will usually result in the following df.columns: - ['col1', 'COL2', 'Col_3']. - For these engines there is no need to adjust the dataframe column names - (default behavior). However, some engines (at least Snowflake, Oracle and - Redshift) return column names with different case than in the original query, - usually all uppercase. For these the column names need to be adjusted to - correspond to the case of the fields specified in the form data for Viz - to work properly. This adjustment can be done here. + def make_label_compatible(cls, label): """ - if cls.consistent_case_sensitivity: - return df - else: - return cls.align_df_col_names_with_form_data(df, fd) - - @staticmethod - def align_df_col_names_with_form_data(df, fd): - """Helper function to rename columns that have changed case during query. - - Returns a dataframe where column names have been adjusted to correspond with - column names in form data (case insensitive). Examples: - dataframe: 'col1', form_data: 'col1' -> no change - dataframe: 'COL1', form_data: 'col1' -> dataframe column renamed: 'col1' - dataframe: 'col1', form_data: 'Col1' -> dataframe column renamed: 'Col1' + Return a sqlalchemy.sql.elements.quoted_name if the engine requires + quoting of aliases to ensure that select query and query results + have same case. """ - - columns = set() - lowercase_mapping = {} - - metrics = utils.get_metric_names(fd.get('metrics', [])) - groupby = fd.get('groupby', []) - other_cols = [utils.DTTM_ALIAS] - for col in metrics + groupby + other_cols: - columns.add(col) - lowercase_mapping[col.lower()] = col - - rename_cols = {} - for col in df.columns: - if col not in columns: - orig_col = lowercase_mapping.get(col.lower()) - if orig_col: - rename_cols[col] = orig_col - - return df.rename(index=str, columns=rename_cols) + if cls.force_column_alias_quotes is True: + return quoted_name(label, True) + return label @staticmethod def mutate_expression_label(label): @@ -469,7 +453,11 @@ class PostgresEngineSpec(PostgresBaseEngineSpec): engine = 'postgresql' @classmethod - def get_table_names(cls, schema, inspector): + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{db_id}:schema:{schema}:table_list'.format( + db_id=kwargs.get('db_id'), schema=kwargs.get('schema'))) + def get_table_names(cls, inspector, db_id, schema, + enable_cache, cache_timeout, force=False): """Need to consider foreign tables for PostgreSQL""" tables = inspector.get_table_names(schema) tables.extend(inspector.get_foreign_table_names(schema)) @@ -478,7 +466,8 @@ def get_table_names(cls, schema, inspector): class SnowflakeEngineSpec(PostgresBaseEngineSpec): engine = 'snowflake' - consistent_case_sensitivity = False + force_column_alias_quotes = True + time_grain_functions = { None: '{col}', 'PT1S': "DATE_TRUNC('SECOND', {col})", @@ -515,13 +504,13 @@ class VerticaEngineSpec(PostgresBaseEngineSpec): class RedshiftEngineSpec(PostgresBaseEngineSpec): engine = 'redshift' - consistent_case_sensitivity = False + force_column_alias_quotes = True class OracleEngineSpec(PostgresBaseEngineSpec): engine = 'oracle' limit_method = LimitMethod.WRAP_SQL - consistent_case_sensitivity = False + force_column_alias_quotes = True time_grain_functions = { None: '{col}', @@ -545,6 +534,7 @@ def convert_dttm(cls, target_type, dttm): class Db2EngineSpec(BaseEngineSpec): engine = 'ibm_db_sa' limit_method = LimitMethod.WRAP_SQL + force_column_alias_quotes = True time_grain_functions = { None: '{col}', 'PT1S': 'CAST({col} as TIMESTAMP)' @@ -599,8 +589,8 @@ def epoch_to_dttm(cls): @classmethod @cache_util.memoized_func( - timeout=600, - key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1])) + key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1]), + use_tables_cache=True) def fetch_result_sets(cls, db, datasource_type, force=False): schemas = db.inspector.get_schema_names() result_sets = {} @@ -624,7 +614,11 @@ def convert_dttm(cls, target_type, dttm): return "'{}'".format(iso) @classmethod - def get_table_names(cls, schema, inspector): + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{db_id}:schema:{schema}:table_list'.format( + db_id=kwargs.get('db_id'), schema=kwargs.get('schema'))) + def get_table_names(cls, inspector, db_id, schema, + enable_cache, cache_timeout, force=False): """Need to disregard the schema for Sqlite""" return sorted(inspector.get_table_names()) @@ -749,8 +743,8 @@ def epoch_to_dttm(cls): @classmethod @cache_util.memoized_func( - timeout=600, - key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1])) + key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1]), + use_tables_cache=True) def fetch_result_sets(cls, db, datasource_type, force=False): """Returns the dictionary {schema : [result_set_name]}. @@ -1016,8 +1010,8 @@ def patch(cls): @classmethod @cache_util.memoized_func( - timeout=600, - key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1])) + key=lambda *args, **kwargs: 'db:{}:{}'.format(args[0].id, args[1]), + use_tables_cache=True) def fetch_result_sets(cls, db, datasource_type, force=False): return BaseEngineSpec.fetch_result_sets( db, datasource_type, force=force) @@ -1276,8 +1270,9 @@ def get_configuration_for_impersonation(cls, uri, impersonate_user, username): return configuration @staticmethod - def execute(cursor, query, async=False): - cursor.execute(query, async=async) + def execute(cursor, query, async_=False): + kwargs = {'async': async_} + cursor.execute(query, **kwargs) class MssqlEngineSpec(BaseEngineSpec): @@ -1430,6 +1425,28 @@ def mutate_expression_label(label): '128 characters'.format(mutated_label)) return mutated_label + @classmethod + def extra_table_metadata(cls, database, table_name, schema_name): + indexes = database.get_indexes(table_name, schema_name) + if not indexes: + return {} + partitions_columns = [ + index.get('column_names', []) for index in indexes + if index.get('name') == 'partition' + ] + cluster_columns = [ + index.get('column_names', []) for index in indexes + if index.get('name') == 'clustering' + ] + return { + 'partitions': { + 'cols': partitions_columns, + }, + 'clustering': { + 'cols': cluster_columns, + }, + } + @classmethod def _get_fields(cls, cols): """ @@ -1472,7 +1489,10 @@ def convert_dttm(cls, target_type, dttm): return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S')) @classmethod - def get_schema_names(cls, inspector): + @cache_util.memoized_func( + key=lambda *args, **kwargs: 'db:{}:schema_list'.format(kwargs.get('db_id'))) + def get_schema_names(cls, inspector, db_id, + enable_cache, cache_timeout, force=False): schemas = [row[0] for row in inspector.engine.execute('SHOW SCHEMAS') if not row[0].startswith('_')] return schemas diff --git a/superset/forms.py b/superset/forms.py index 5983989787532..6108162f84a3b 100644 --- a/superset/forms.py +++ b/superset/forms.py @@ -15,7 +15,7 @@ from wtforms.ext.sqlalchemy.fields import QuerySelectField from wtforms.validators import DataRequired, NumberRange, Optional -from superset import app, db +from superset import app, db, security_manager from superset.models import core as models config = app.config @@ -49,10 +49,51 @@ def filter_not_empty_values(value): class CsvToDatabaseForm(DynamicForm): # pylint: disable=E0211 - def csv_enabled_dbs(): - return db.session.query( + def csv_allowed_dbs(): + csv_allowed_dbs = [] + csv_enabled_dbs = db.session.query( models.Database).filter_by( - allow_csv_upload=True).all() + allow_csv_upload=True).all() + for csv_enabled_db in csv_enabled_dbs: + if CsvToDatabaseForm.at_least_one_schema_is_allowed(csv_enabled_db): + csv_allowed_dbs.append(csv_enabled_db) + return csv_allowed_dbs + + @staticmethod + def at_least_one_schema_is_allowed(database): + """ + If the user has access to the database or all datasource + 1. if schemas_allowed_for_csv_upload is empty + a) if database does not support schema + user is able to upload csv without specifying schema name + b) if database supports schema + user is able to upload csv to any schema + 2. if schemas_allowed_for_csv_upload is not empty + a) if database does not support schema + This situation is impossible and upload will fail + b) if database supports schema + user is able to upload to schema in schemas_allowed_for_csv_upload + elif the user does not access to the database or all datasource + 1. if schemas_allowed_for_csv_upload is empty + a) if database does not support schema + user is unable to upload csv + b) if database supports schema + user is unable to upload csv + 2. if schemas_allowed_for_csv_upload is not empty + a) if database does not support schema + This situation is impossible and user is unable to upload csv + b) if database supports schema + user is able to upload to schema in schemas_allowed_for_csv_upload + """ + if (security_manager.database_access(database) or + security_manager.all_datasource_access()): + return True + schemas = database.get_schema_access_for_csv_upload() + if (schemas and + security_manager.schemas_accessible_by_user( + database, schemas, False)): + return True + return False name = StringField( _('Table Name'), @@ -66,8 +107,14 @@ def csv_enabled_dbs(): FileRequired(), FileAllowed(['csv'], _('CSV Files Only!'))]) con = QuerySelectField( _('Database'), - query_factory=csv_enabled_dbs, + query_factory=csv_allowed_dbs, get_pk=lambda a: a.id, get_label=lambda a: a.database_name) + schema = StringField( + _('Schema'), + description=_('Specify a schema (if database flavor supports this).'), + validators=[Optional()], + widget=BS3TextFieldWidget(), + filters=[lambda x: x or None]) sep = StringField( _('Delimiter'), description=_('Delimiter used by CSV file (for whitespace use \s+).'), @@ -83,12 +130,6 @@ def csv_enabled_dbs(): ('fail', _('Fail')), ('replace', _('Replace')), ('append', _('Append'))], validators=[DataRequired()]) - schema = StringField( - _('Schema'), - description=_('Specify a schema (if database flavour supports this).'), - validators=[Optional()], - widget=BS3TextFieldWidget(), - filters=[lambda x: x or None]) header = IntegerField( _('Header Row'), description=_( diff --git a/superset/migrations/versions/05cddfb1eea3_.py b/superset/migrations/versions/05cddfb1eea3_.py new file mode 100644 index 0000000000000..17082c99c9f7c --- /dev/null +++ b/superset/migrations/versions/05cddfb1eea3_.py @@ -0,0 +1,22 @@ +"""empty message + +Revision ID: 05cddfb1eea3 +Revises: ('b3591036f8d4', '0c5070e96b57') +Create Date: 2018-08-08 10:47:53.077871 + +""" + +# revision identifiers, used by Alembic. +revision = '05cddfb1eea3' +down_revision = ('b3591036f8d4', '0c5070e96b57') + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/superset/migrations/versions/179ef0f46016_.py b/superset/migrations/versions/179ef0f46016_.py new file mode 100644 index 0000000000000..41882d51892ca --- /dev/null +++ b/superset/migrations/versions/179ef0f46016_.py @@ -0,0 +1,22 @@ +"""empty message + +Revision ID: 179ef0f46016 +Revises: ('1a1d627ebd8e', '05cddfb1eea3', '3eeec5640df9') +Create Date: 2018-08-22 21:41:21.478678 + +""" + +# revision identifiers, used by Alembic. +revision = '179ef0f46016' +down_revision = ('1a1d627ebd8e', '05cddfb1eea3', '3eeec5640df9') + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/superset/migrations/versions/3eeec5640df9_.py b/superset/migrations/versions/3eeec5640df9_.py new file mode 100644 index 0000000000000..fb7ffe95a9540 --- /dev/null +++ b/superset/migrations/versions/3eeec5640df9_.py @@ -0,0 +1,22 @@ +"""empty message + +Revision ID: 3eeec5640df9 +Revises: None +Create Date: 2018-08-22 21:21:34.077734 + +""" + +# revision identifiers, used by Alembic. +revision = '3eeec5640df9' +down_revision = None + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/superset/migrations/versions/55e910a74826_add_metadata_column_to_annotation_model_.py b/superset/migrations/versions/55e910a74826_add_metadata_column_to_annotation_model_.py new file mode 100644 index 0000000000000..17c24194dfecb --- /dev/null +++ b/superset/migrations/versions/55e910a74826_add_metadata_column_to_annotation_model_.py @@ -0,0 +1,22 @@ +"""add_metadata_column_to_annotation_model.py + +Revision ID: 55e910a74826 +Revises: 1a1d627ebd8e +Create Date: 2018-08-29 14:35:20.407743 + +""" + +# revision identifiers, used by Alembic. +revision = '55e910a74826' +down_revision = '1a1d627ebd8e' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column('annotation', sa.Column('json_metadata', sa.Text(), nullable=True)) + + +def downgrade(): + op.drop_column('annotation', 'json_metadata') diff --git a/superset/migrations/versions/b3591036f8d4_.py b/superset/migrations/versions/b3591036f8d4_.py new file mode 100644 index 0000000000000..78f6b6f67d04e --- /dev/null +++ b/superset/migrations/versions/b3591036f8d4_.py @@ -0,0 +1,22 @@ +"""empty message + +Revision ID: b3591036f8d4 +Revises: ('7fcdcde0761c', 'c82ee8a39623') +Create Date: 2018-08-03 13:29:06.044516 + +""" + +# revision identifiers, used by Alembic. +revision = 'b3591036f8d4' +down_revision = ('7fcdcde0761c', 'c82ee8a39623') + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/superset/migrations/versions/c82ee8a39623_add_implicit_tags.py b/superset/migrations/versions/c82ee8a39623_add_implicit_tags.py new file mode 100644 index 0000000000000..1c46df478d0c1 --- /dev/null +++ b/superset/migrations/versions/c82ee8a39623_add_implicit_tags.py @@ -0,0 +1,187 @@ +"""Add implicit tags + +Revision ID: c82ee8a39623 +Revises: c18bd4186f15 +Create Date: 2018-07-26 11:10:23.653524 + +""" + +# revision identifiers, used by Alembic. +revision = 'c82ee8a39623' +down_revision = 'c18bd4186f15' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy import Column, Enum, Integer, ForeignKey, String, Table +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +from superset import db +from superset.models.helpers import AuditMixinNullable +from superset.models.tags import ( + get_object_type, + get_tag, + ObjectTypes, + TagTypes, +) + + +Base = declarative_base() + + +class Tag(Base, AuditMixinNullable): + """A tag attached to an object (query, chart or dashboard).""" + __tablename__ = 'tag' + + id = Column(Integer, primary_key=True) + name = Column(String(250), unique=True) + type = Column(Enum(TagTypes)) + + +class TaggedObject(Base, AuditMixinNullable): + __tablename__ = 'tagged_object' + + id = Column(Integer, primary_key=True) + tag_id = Column(Integer, ForeignKey('tag.id')) + object_id = Column(Integer) + object_type = Column(Enum(ObjectTypes)) + + +class User(Base): + """Declarative class to do query in upgrade""" + __tablename__ = 'ab_user' + id = Column(Integer, primary_key=True) + + +slice_user = Table( + 'slice_user', + Base.metadata, + Column('id', Integer, primary_key=True), + Column('user_id', Integer, ForeignKey('ab_user.id')), + Column('slice_id', Integer, ForeignKey('slices.id')) +) + + +dashboard_user = Table( + 'dashboard_user', + Base.metadata, + Column('id', Integer, primary_key=True), + Column('user_id', Integer, ForeignKey('ab_user.id')), + Column('dashboard_id', Integer, ForeignKey('dashboards.id')) +) + + +class Slice(Base, AuditMixinNullable): + """Declarative class to do query in upgrade""" + __tablename__ = 'slices' + + id = Column(Integer, primary_key=True) + owners = relationship("User", secondary=slice_user) + + +class Dashboard(Base, AuditMixinNullable): + """Declarative class to do query in upgrade""" + __tablename__ = 'dashboards' + id = Column(Integer, primary_key=True) + owners = relationship("User", secondary=dashboard_user) + + +class SavedQuery(Base): + __tablename__ = 'saved_query' + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey('ab_user.id')) + + +class Favstar(Base): + __tablename__ = 'favstar' + id = Column(Integer, primary_key=True) + user_id = Column(Integer, ForeignKey('ab_user.id')) + class_name = Column(String(50)) + obj_id = Column(Integer) + + +def upgrade(): + bind = op.get_bind() + session = db.Session(bind=bind) + + Tag.__table__.create(bind) + TaggedObject.__table__.create(bind) + + # add type tags (eg, `type:dashboard` for dashboards) + for type in ObjectTypes.__members__: + session.add(Tag(name='type:{0}'.format(type), type=TagTypes.type)) + + # add owner tags (eg, `owner:1` for things owned by the admin) + for chart in session.query(Slice): + for owner in chart.owners: + name = 'owner:{0}'.format(owner.id) + tag = get_tag(name, session, TagTypes.owner) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=chart.id, + object_type=ObjectTypes.chart, + ) + session.add(tagged_object) + + tag = get_tag('type:chart', session, TagTypes.type) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=chart.id, + object_type=ObjectTypes.chart, + ) + session.add(tagged_object) + + for dashboard in session.query(Dashboard): + for owner in dashboard.owners: + name = 'owner:{0}'.format(owner.id) + tag = get_tag(name, session, TagTypes.owner) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=dashboard.id, + object_type=ObjectTypes.dashboard, + ) + session.add(tagged_object) + + tag = get_tag('type:dashboard', session, TagTypes.type) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=dashboard.id, + object_type=ObjectTypes.dashboard, + ) + session.add(tagged_object) + + for query in session.query(SavedQuery): + name = 'owner:{0}'.format(query.user_id) + tag = get_tag(name, session, TagTypes.owner) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=query.id, + object_type=ObjectTypes.query, + ) + session.add(tagged_object) + + tag = get_tag('type:query', session, TagTypes.type) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=query.id, + object_type=ObjectTypes.query, + ) + session.add(tagged_object) + + # add favorited_by tags + for star in session.query(Favstar): + name = 'favorited_by:{0}'.format(star.user_id) + tag = get_tag(name, session, TagTypes.favorited_by) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=star.obj_id, + object_type=get_object_type(star.class_name), + ) + session.add(tagged_object) + + session.commit() + + +def downgrade(): + op.drop_table('tag') + op.drop_table('tagged_object') diff --git a/superset/migrations/versions/d248e10cfa5e_.py b/superset/migrations/versions/d248e10cfa5e_.py new file mode 100644 index 0000000000000..7c191c3c7b047 --- /dev/null +++ b/superset/migrations/versions/d248e10cfa5e_.py @@ -0,0 +1,22 @@ +"""empty message + +Revision ID: d248e10cfa5e +Revises: ('55e910a74826', '179ef0f46016') +Create Date: 2018-09-13 21:53:02.308750 + +""" + +# revision identifiers, used by Alembic. +revision = 'd248e10cfa5e' +down_revision = ('55e910a74826', '179ef0f46016') + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/superset/models/annotations.py b/superset/models/annotations.py index 82619fdd49543..b7640baaa997c 100644 --- a/superset/models/annotations.py +++ b/superset/models/annotations.py @@ -42,6 +42,7 @@ class Annotation(Model, AuditMixinNullable): layer = relationship( AnnotationLayer, backref='annotation') + json_metadata = Column(Text) __table_args__ = ( Index('ti_dag_state', layer_id, start_dttm, end_dttm), diff --git a/superset/models/core.py b/superset/models/core.py index 9d9674c19560a..73bf4bc29e2e4 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -40,6 +40,7 @@ from superset.connectors.connector_registry import ConnectorRegistry from superset.legacy import update_time_range from superset.models.helpers import AuditMixinNullable, ImportMixin +from superset.models.tags import ChartUpdater, DashboardUpdater, FavStarUpdater from superset.models.user_attributes import UserAttribute from superset.utils import MediumText from superset.viz import viz_types @@ -338,6 +339,13 @@ def import_obj(cls, slc_to_import, slc_to_override, import_time=None): session.flush() return slc_to_import.id + @property + def url(self): + return ( + '/superset/explore/?form_data=%7B%22slice_id%22%3A%20{0}%7D' + .format(self.id) + ) + sqla.event.listen(Slice, 'before_insert', set_related_perm) sqla.event.listen(Slice, 'before_update', set_related_perm) @@ -638,7 +646,7 @@ class Database(Model, AuditMixinNullable, ImportMixin): expose_in_sqllab = Column(Boolean, default=False) allow_run_sync = Column(Boolean, default=True) allow_run_async = Column(Boolean, default=False) - allow_csv_upload = Column(Boolean, default=True) + allow_csv_upload = Column(Boolean, default=False) allow_ctas = Column(Boolean, default=False) allow_dml = Column(Boolean, default=False) force_ctas_schema = Column(String(250)) @@ -646,11 +654,12 @@ class Database(Model, AuditMixinNullable, ImportMixin): extra = Column(Text, default=textwrap.dedent("""\ { "metadata_params": {}, - "engine_params": {} + "engine_params": {}, + "metadata_cache_timeout": {}, + "schemas_allowed_for_csv_upload": [] } """)) perm = Column(String(1000)) - impersonate_user = Column(Boolean, default=False) export_fields = ('database_name', 'sqlalchemy_uri', 'cache_timeout', 'expose_in_sqllab', 'allow_run_sync', 'allow_run_async', @@ -853,8 +862,18 @@ def all_table_names(self, schema=None, force=False): tables_dict = self.db_engine_spec.fetch_result_sets( self, 'table', force=force) return tables_dict.get('', []) - return sorted( - self.db_engine_spec.get_table_names(schema, self.inspector)) + + extra = self.get_extra() + medatada_cache_timeout = extra.get('metadata_cache_timeout', {}) + table_cache_timeout = medatada_cache_timeout.get('table_cache_timeout') + enable_cache = 'table_cache_timeout' in medatada_cache_timeout + return sorted(self.db_engine_spec.get_table_names( + inspector=self.inspector, + db_id=self.id, + schema=schema, + enable_cache=enable_cache, + cache_timeout=table_cache_timeout, + force=force)) def all_view_names(self, schema=None, force=False): if not schema: @@ -865,13 +884,32 @@ def all_view_names(self, schema=None, force=False): return views_dict.get('', []) views = [] try: - views = self.inspector.get_view_names(schema) + extra = self.get_extra() + medatada_cache_timeout = extra.get('metadata_cache_timeout', {}) + table_cache_timeout = medatada_cache_timeout.get('table_cache_timeout') + enable_cache = 'table_cache_timeout' in medatada_cache_timeout + views = self.db_engine_spec.get_view_names( + inspector=self.inspector, + db_id=self.id, + schema=schema, + enable_cache=enable_cache, + cache_timeout=table_cache_timeout, + force=force) except Exception: pass return views - def all_schema_names(self): - return sorted(self.db_engine_spec.get_schema_names(self.inspector)) + def all_schema_names(self, force_refresh=False): + extra = self.get_extra() + medatada_cache_timeout = extra.get('metadata_cache_timeout', {}) + schema_cache_timeout = medatada_cache_timeout.get('schema_cache_timeout') + enable_cache = 'schema_cache_timeout' in medatada_cache_timeout + return sorted(self.db_engine_spec.get_schema_names( + inspector=self.inspector, + enable_cache=enable_cache, + cache_timeout=schema_cache_timeout, + db_id=self.id, + force=force_refresh)) @property def db_engine_spec(self): @@ -908,6 +946,7 @@ def get_extra(self): extra = json.loads(self.extra) except Exception as e: logging.error(e) + raise e return extra def get_table(self, table_name, schema=None): @@ -931,6 +970,9 @@ def get_pk_constraint(self, table_name, schema=None): def get_foreign_keys(self, table_name, schema=None): return self.inspector.get_foreign_keys(table_name, schema) + def get_schema_access_for_csv_upload(self): + return self.get_extra().get('schemas_allowed_for_csv_upload', []) + @property def sqlalchemy_uri_decrypted(self): conn = sqla.engine.url.make_url(self.sqlalchemy_uri) @@ -1119,3 +1161,14 @@ def user_roles(self): href = '{} Role'.format(r.name) action_list = action_list + '
  • ' + href + '
  • ' return '
      ' + action_list + '
    ' + + +# events for updating tags +sqla.event.listen(Slice, 'after_insert', ChartUpdater.after_insert) +sqla.event.listen(Slice, 'after_update', ChartUpdater.after_update) +sqla.event.listen(Slice, 'after_delete', ChartUpdater.after_delete) +sqla.event.listen(Dashboard, 'after_insert', DashboardUpdater.after_insert) +sqla.event.listen(Dashboard, 'after_update', DashboardUpdater.after_update) +sqla.event.listen(Dashboard, 'after_delete', DashboardUpdater.after_delete) +sqla.event.listen(FavStar, 'after_insert', FavStarUpdater.after_insert) +sqla.event.listen(FavStar, 'after_delete', FavStarUpdater.after_delete) diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 417a447dc1160..25b808c3968be 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -279,7 +279,7 @@ def changed_on_(self): return Markup( '{}'.format(self.changed_on)) - @renders('modified') + @renders('changed_on') def modified(self): return humanize.naturaltime(datetime.now() - self.changed_on) diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py index 7e0ccb515cf11..1c024b47c1339 100644 --- a/superset/models/sql_lab.py +++ b/superset/models/sql_lab.py @@ -20,6 +20,7 @@ from superset import security_manager from superset.models.helpers import AuditMixinNullable +from superset.models.tags import QueryUpdater from superset.utils import QueryStatus, user_label install_aliases() @@ -154,3 +155,13 @@ def pop_tab_link(self):
    """.format(**locals())) + + @property + def url(self): + return '/superset/sqllab?savedQueryId={0}'.format(self.id) + + +# events for updating tags +sqla.event.listen(SavedQuery, 'after_insert', QueryUpdater.after_insert) +sqla.event.listen(SavedQuery, 'after_update', QueryUpdater.after_update) +sqla.event.listen(SavedQuery, 'after_delete', QueryUpdater.after_delete) diff --git a/superset/models/tags.py b/superset/models/tags.py new file mode 100644 index 0000000000000..eab9adfaf6eec --- /dev/null +++ b/superset/models/tags.py @@ -0,0 +1,229 @@ +# -*- coding: utf-8 -*- +# pylint: disable=no-init +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import enum + +from flask_appbuilder import Model +from sqlalchemy import Column, Enum, ForeignKey, Integer, String +from sqlalchemy.orm import relationship, sessionmaker +from sqlalchemy.orm.exc import NoResultFound + +from superset.models.helpers import AuditMixinNullable + + +Session = sessionmaker(autoflush=False) + + +class TagTypes(enum.Enum): + + """ + Types for tags. + + Objects (queries, charts and dashboards) will have with implicit tags based + on metadata: types, owners and who favorited them. This way, user "alice" + can find all their objects by querying for the tag `owner:alice`. + """ + + # explicit tags, added manually by the owner + custom = 1 + + # implicit tags, generated automatically + type = 2 + owner = 3 + favorited_by = 4 + + +class ObjectTypes(enum.Enum): + + """Object types.""" + + query = 1 + chart = 2 + dashboard = 3 + + +class Tag(Model, AuditMixinNullable): + + """A tag attached to an object (query, chart or dashboard).""" + + __tablename__ = 'tag' + id = Column(Integer, primary_key=True) # pylint: disable=invalid-name + name = Column(String(250), unique=True) + type = Column(Enum(TagTypes)) + + +class TaggedObject(Model, AuditMixinNullable): + + """An association between an object and a tag.""" + + __tablename__ = 'tagged_object' + id = Column(Integer, primary_key=True) # pylint: disable=invalid-name + tag_id = Column(Integer, ForeignKey('tag.id')) + object_id = Column(Integer) + object_type = Column(Enum(ObjectTypes)) + + tag = relationship('Tag') + + +def get_tag(name, session, type_): + try: + tag = session.query(Tag).filter_by(name=name, type=type_).one() + except NoResultFound: + tag = Tag(name=name, type=type_) + session.add(tag) + session.commit() + + return tag + + +def get_object_type(class_name): + mapping = { + 'slice': ObjectTypes.chart, + 'dashboard': ObjectTypes.dashboard, + 'query': ObjectTypes.query, + } + try: + return mapping[class_name.lower()] + except KeyError: + raise Exception('No mapping found for {0}'.format(class_name)) + + +class ObjectUpdater(object): + + object_type = None + + @classmethod + def get_owners_ids(cls, target): + raise NotImplementedError('Subclass should implement `get_owners_ids`') + + @classmethod + def _add_owners(cls, session, target): + for owner_id in cls.get_owners_ids(target): + name = 'owner:{0}'.format(owner_id) + tag = get_tag(name, session, TagTypes.owner) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=target.id, + object_type=ObjectTypes.chart, + ) + session.add(tagged_object) + + @classmethod + def after_insert(cls, mapper, connection, target): + # pylint: disable=unused-argument + session = Session(bind=connection) + + # add `owner:` tags + cls._add_owners(session, target) + + # add `type:` tags + tag = get_tag( + 'type:{0}'.format(cls.object_type), session, TagTypes.type) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=target.id, + object_type=ObjectTypes.query, + ) + session.add(tagged_object) + + session.commit() + + @classmethod + def after_update(cls, mapper, connection, target): + # pylint: disable=unused-argument + session = Session(bind=connection) + + # delete current `owner:` tags + query = session.query(TaggedObject.id).join(Tag).filter( + TaggedObject.object_type == cls.object_type, + TaggedObject.object_id == target.id, + Tag.type == TagTypes.owner, + ) + ids = [row[0] for row in query] + session.query(TaggedObject).filter( + TaggedObject.id.in_(ids)).delete( + synchronize_session=False) + + # add `owner:` tags + cls._add_owners(session, target) + + session.commit() + + @classmethod + def after_delete(cls, mapper, connection, target): + # pylint: disable=unused-argument + session = Session(bind=connection) + + # delete row from `tagged_objects` + session.query(TaggedObject).filter( + TaggedObject.object_type == cls.object_type, + TaggedObject.object_id == target.id, + ).delete() + + session.commit() + + +class ChartUpdater(ObjectUpdater): + + object_type = 'chart' + + @classmethod + def get_owners_ids(cls, target): + return [owner.id for owner in target.owners] + + +class DashboardUpdater(ObjectUpdater): + + object_type = 'dashboard' + + @classmethod + def get_owners_ids(cls, target): + return [owner.id for owner in target.owners] + + +class QueryUpdater(ObjectUpdater): + + object_type = 'query' + + @classmethod + def get_owners_ids(cls, target): + return [target.user_id] + + +class FavStarUpdater(object): + + @classmethod + def after_insert(cls, mapper, connection, target): + # pylint: disable=unused-argument + session = Session(bind=connection) + name = 'favorited_by:{0}'.format(target.user_id) + tag = get_tag(name, session, TagTypes.favorited_by) + tagged_object = TaggedObject( + tag_id=tag.id, + object_id=target.obj_id, + object_type=get_object_type(target.class_name), + ) + session.add(tagged_object) + + session.commit() + + @classmethod + def after_delete(cls, mapper, connection, target): + # pylint: disable=unused-argument + session = Session(bind=connection) + name = 'favorited_by:{0}'.format(target.user_id) + query = session.query(TaggedObject.id).join(Tag).filter( + TaggedObject.object_id == target.obj_id, + Tag.type == TagTypes.favorited_by, + Tag.name == name, + ) + ids = [row[0] for row in query] + session.query(TaggedObject).filter( + TaggedObject.id.in_(ids)).delete( + synchronize_session=False) + + session.commit() diff --git a/superset/security.py b/superset/security.py index 8ea8c04d09f06..5edcc6b2dd3c7 100644 --- a/superset/security.py +++ b/superset/security.py @@ -22,6 +22,14 @@ 'DruidClusterModelView', } +USER_MODEL_VIEWS = { + 'UserDBModelView', + 'UserLDAPModelView', + 'UserOAuthModelView', + 'UserOIDModelView', + 'UserRemoteUserModelView', +} + GAMMA_READ_ONLY_MODEL_VIEWS = { 'SqlMetricInlineView', 'TableColumnInlineView', @@ -40,12 +48,7 @@ 'ResetPasswordView', 'RoleModelView', 'Security', - 'UserDBModelView', - 'UserLDAPModelView', - 'UserOAuthModelView', - 'UserOIDModelView', - 'UserRemoteUserModelView', -} +} | USER_MODEL_VIEWS ALPHA_ONLY_VIEW_MENUS = { 'Upload a CSV', @@ -183,10 +186,12 @@ def user_datasource_perms(self): datasource_perms.add(perm.view_menu.name) return datasource_perms - def schemas_accessible_by_user(self, database, schemas): + def schemas_accessible_by_user(self, database, schemas, hierarchical=True): from superset import db from superset.connectors.sqla.models import SqlaTable - if self.database_access(database) or self.all_datasource_access(): + if (hierarchical and + (self.database_access(database) or + self.all_datasource_access())): return schemas subset = set() @@ -377,7 +382,9 @@ def is_sql_lab_pvm(self, pvm): pvm.permission.name in { 'can_sql_json', 'can_csv', 'can_search_queries', 'can_sqllab_viz', 'can_sqllab', - }) + } or + (pvm.view_menu.name in USER_MODEL_VIEWS and + pvm.permission.name == 'can_list')) def is_granter_pvm(self, pvm): return pvm.permission.name in { diff --git a/superset/sql_lab.py b/superset/sql_lab.py index a659653d37e76..4612b4e0ec8ce 100644 --- a/superset/sql_lab.py +++ b/superset/sql_lab.py @@ -172,7 +172,7 @@ def handle_error(msg): cursor = conn.cursor() logging.info('Running query: \n{}'.format(executed_sql)) logging.info(query.executed_sql) - db_engine_spec.execute(cursor, query.executed_sql, async=True) + db_engine_spec.execute(cursor, query.executed_sql, async_=True) logging.info('Handling cursor') db_engine_spec.handle_cursor(cursor, query, session) logging.info('Fetching data: {}'.format(query.to_dict())) diff --git a/superset/sql_parse.py b/superset/sql_parse.py index ae33453b25b87..ccef3505b46b3 100644 --- a/superset/sql_parse.py +++ b/superset/sql_parse.py @@ -12,6 +12,7 @@ from sqlparse.tokens import Keyword, Name RESULT_OPERATIONS = {'UNION', 'INTERSECT', 'EXCEPT'} +ON_KEYWORD = 'ON' PRECEDES_TABLE_NAME = {'FROM', 'JOIN', 'DESC', 'DESCRIBE', 'WITH'} @@ -128,7 +129,8 @@ def __extract_from_token(self, token): continue if item.ttype in Keyword: - if self.__is_result_operation(item.value): + if (self.__is_result_operation(item.value) or + item.value.upper() == ON_KEYWORD): table_name_preceding_token = False continue # FROM clause is over diff --git a/superset/templates/appbuilder/general/security/login_oauth.html b/superset/templates/appbuilder/general/security/login_oauth.html new file mode 100644 index 0000000000000..72ea8df4e850c --- /dev/null +++ b/superset/templates/appbuilder/general/security/login_oauth.html @@ -0,0 +1,15 @@ +{% extends "appbuilder/base.html" %} + +{% block content %} + +
    +
    +
    + + + +
    +
    +
    + +{% endblock %} diff --git a/superset/templates/appbuilder/navbar.html b/superset/templates/appbuilder/navbar.html index 77248f03ac05c..013da9bae999e 100644 --- a/superset/templates/appbuilder/navbar.html +++ b/superset/templates/appbuilder/navbar.html @@ -10,10 +10,9 @@ - + {{ appbuilder.app_name }} diff --git a/superset/templates/superset/base.html b/superset/templates/superset/base.html index f6c6fa21e17fb..b4397f510d880 100644 --- a/superset/templates/superset/base.html +++ b/superset/templates/superset/base.html @@ -3,14 +3,21 @@ {% block head_css %} {{super()}} - {% for entry in css_manifest('theme') %} + {% for entry in get_unloaded_chunks(css_manifest('theme'), loaded_chunks) %} {% endfor %} {% endblock %} + {% block head_js %} + {{super()}} + {% for entry in get_unloaded_chunks(js_manifest('theme'), loaded_chunks) %} + + {% endfor %} + {% endblock %} + {% block tail_js %} {{super()}} - {% for entry in js_manifest('common') %} + {% for entry in get_unloaded_chunks(js_manifest('common'), loaded_chunks) %} {% endfor %} {% endblock %} diff --git a/superset/templates/superset/basic.html b/superset/templates/superset/basic.html index 660ed1023066f..a5e72f38fae85 100644 --- a/superset/templates/superset/basic.html +++ b/superset/templates/superset/basic.html @@ -16,20 +16,23 @@ - {% for entry in css_manifest('theme') %} + {% for entry in get_unloaded_chunks(css_manifest('theme'), loaded_chunks) %} {% endfor %} {% if entry %} {% set entry_files = css_manifest(entry) %} - {% for entry in entry_files %} + {% for entry in get_unloaded_chunks(entry_files, loaded_chunks) %} {% endfor %} {% endif %} {% endblock %} - {% for entry in js_manifest('common') %} + {% for entry in get_unloaded_chunks(js_manifest('theme'), loaded_chunks) %} + + {% endfor %} + {% for entry in get_unloaded_chunks(js_manifest('common'), loaded_chunks) %} {% endfor %} @@ -77,7 +80,7 @@ {% block tail_js %} {% if entry %} {% set entry_files = js_manifest(entry) %} - {% for entry in entry_files %} + {% for entry in get_unloaded_chunks(entry_files, loaded_chunks) %} {% endfor %} {% endif %} diff --git a/superset/templates/superset/form_view/csv_to_database_view/edit.html b/superset/templates/superset/form_view/csv_to_database_view/edit.html new file mode 100644 index 0000000000000..0f0e5db296035 --- /dev/null +++ b/superset/templates/superset/form_view/csv_to_database_view/edit.html @@ -0,0 +1,46 @@ +{% extends 'appbuilder/general/model/edit.html' %} + +{% block tail_js %} + {{ super() }} + +{% endblock %} \ No newline at end of file diff --git a/superset/templates/superset/models/database/add.html b/superset/templates/superset/models/database/add.html index 0ce38e9ef7752..4f4a9ff526c55 100644 --- a/superset/templates/superset/models/database/add.html +++ b/superset/templates/superset/models/database/add.html @@ -4,4 +4,5 @@ {% block tail_js %} {{ super() }} {{ macros.testconn() }} + {{ macros.expand_extra_textarea() }} {% endblock %} diff --git a/superset/templates/superset/models/database/edit.html b/superset/templates/superset/models/database/edit.html index 5effaeb506d56..9d13b7c5038aa 100644 --- a/superset/templates/superset/models/database/edit.html +++ b/superset/templates/superset/models/database/edit.html @@ -4,4 +4,5 @@ {% block tail_js %} {{ super() }} {{ macros.testconn() }} + {{ macros.expand_extra_textarea() }} {% endblock %} diff --git a/superset/templates/superset/models/database/macros.html b/superset/templates/superset/models/database/macros.html index 32972bc6508b9..12ee5f7a365a3 100644 --- a/superset/templates/superset/models/database/macros.html +++ b/superset/templates/superset/models/database/macros.html @@ -1,7 +1,7 @@ {% macro testconn() %} {% endmacro %} + +{% macro expand_extra_textarea() %} + +{% endmacro %} diff --git a/superset/templates/superset/partials/_script_tag.html b/superset/templates/superset/partials/_script_tag.html index fd049a78834aa..f530c7bd4038b 100644 --- a/superset/templates/superset/partials/_script_tag.html +++ b/superset/templates/superset/partials/_script_tag.html @@ -1,5 +1,5 @@ {% block tail_js %} - {% for entry in js_manifest(filename) %} + {% for entry in get_unloaded_chunks(js_manifest(filename), loaded_chunks) %} {% endfor %} {% endblock %} diff --git a/superset/utils.py b/superset/utils.py index b1583084ebbc8..b5bb545d92789 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -723,13 +723,13 @@ def to_adhoc(filt, expressionType='SIMPLE', clause='where'): if expressionType == 'SIMPLE': result.update({ - 'comparator': filt['val'], - 'operator': filt['op'], - 'subject': filt['col'], + 'comparator': filt.get('val'), + 'operator': filt.get('op'), + 'subject': filt.get('col'), }) elif expressionType == 'SQL': result.update({ - 'sqlExpression': filt[clause], + 'sqlExpression': filt.get(clause), }) return result @@ -843,6 +843,7 @@ def get_or_create_main_db(): dbobj.set_sqlalchemy_uri(conf.get('SQLALCHEMY_DATABASE_URI')) dbobj.expose_in_sqllab = True dbobj.allow_run_sync = True + dbobj.allow_csv_upload = True db.session.add(dbobj) db.session.commit() return dbobj @@ -1016,3 +1017,7 @@ def get_username(): def MediumText(): return Text().with_variant(MEDIUMTEXT(), 'mysql') + + +def shortid(): + return '{}'.format(uuid.uuid4())[-12:] diff --git a/superset/views/__init__.py b/superset/views/__init__.py index a95da8bebb8b0..214aa1ab34208 100644 --- a/superset/views/__init__.py +++ b/superset/views/__init__.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- +from . import lyft # noqa from . import base # noqa from . import core # noqa from . import sql_lab # noqa -from . import annotations # noqa -from . import datasource # noqa +from . import datasource # noqa +from . import annotations # noqa +from . import tags # noqa diff --git a/superset/views/annotations.py b/superset/views/annotations.py index 648be25881b75..c1d45512ed023 100644 --- a/superset/views/annotations.py +++ b/superset/views/annotations.py @@ -24,7 +24,9 @@ class AnnotationModelView(SupersetModelView, DeleteMixin): # noqa list_columns = ['layer', 'short_descr', 'start_dttm', 'end_dttm'] edit_columns = [ - 'layer', 'short_descr', 'long_descr', 'start_dttm', 'end_dttm'] + 'layer', 'short_descr', 'long_descr', 'start_dttm', 'end_dttm', + 'json_metadata'] + add_columns = edit_columns label_columns = { @@ -33,6 +35,12 @@ class AnnotationModelView(SupersetModelView, DeleteMixin): # noqa 'start_dttm': _('Start Dttm'), 'end_dttm': _('End Dttm'), 'long_descr': _('Long Descr'), + 'json_metadata': _('JSON Metadata'), + } + + description_columns = { + 'json_metadata': 'This JSON represents any additional metadata this \ + annotation needs to add more context.', } def pre_add(self, obj): diff --git a/superset/views/base.py b/superset/views/base.py index f24982083f861..a809f4d4b4d54 100644 --- a/superset/views/base.py +++ b/superset/views/base.py @@ -56,6 +56,10 @@ def json_error_response(msg=None, status=500, stacktrace=None, payload=None, lin status=status, mimetype='application/json') +def json_success(json_msg, status=200): + return Response(json_msg, status=status, mimetype='application/json') + + def generate_download_headers(extension, filename=None): filename = filename if filename else datetime.now().strftime('%Y%m%d_%H%M%S') content_disp = 'attachment; filename={}.{}'.format(filename, extension) diff --git a/superset/views/core.py b/superset/views/core.py index 64b58b655435d..998a154981e07 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -6,12 +6,12 @@ from __future__ import unicode_literals from datetime import datetime, timedelta +import inspect import logging import os import re import time import traceback -from urllib import parse from flask import ( flash, g, Markup, redirect, render_template, request, Response, url_for, @@ -25,8 +25,9 @@ import pandas as pd import simplejson as json from six import text_type +from six.moves.urllib import parse import sqlalchemy as sqla -from sqlalchemy import and_, create_engine, or_, update +from sqlalchemy import and_, create_engine, MetaData, or_, update from sqlalchemy.engine.url import make_url from sqlalchemy.exc import IntegrityError from unidecode import unidecode @@ -55,7 +56,8 @@ check_ownership, CsvResponse, DeleteMixin, generate_download_headers, get_error_msg, - json_error_response, SupersetFilter, SupersetModelView, YamlExportMixin, + json_error_response, json_success, SupersetFilter, SupersetModelView, + YamlExportMixin, ) from .utils import bootstrap_user_data @@ -86,8 +88,9 @@ def get_database_access_error_msg(database_name): '`all_datasource_access` permission', name=database_name) -def json_success(json_msg, status=200): - return Response(json_msg, status=status, mimetype='application/json') +def get_datasource_access_error_msg(datasource_name): + return __('This endpoint requires the datasource %(name)s, database or ' + '`all_datasource_access` permission', name=datasource_name) def is_owner(obj, user): @@ -154,10 +157,10 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa 'modified', 'allow_csv_upload', ] add_columns = [ - 'database_name', 'sqlalchemy_uri', 'cache_timeout', 'extra', - 'expose_in_sqllab', 'allow_run_sync', 'allow_run_async', 'allow_csv_upload', + 'database_name', 'sqlalchemy_uri', 'cache_timeout', 'expose_in_sqllab', + 'allow_run_sync', 'allow_run_async', 'allow_csv_upload', 'allow_ctas', 'allow_dml', 'force_ctas_schema', 'impersonate_user', - 'allow_multi_schema_metadata_fetch', + 'allow_multi_schema_metadata_fetch', 'extra', ] search_exclude_columns = ( 'password', 'tables', 'created_by', 'changed_by', 'queries', @@ -203,14 +206,25 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa 'When allowing CREATE TABLE AS option in SQL Lab, ' 'this option forces the table to be created in this schema'), 'extra': utils.markdown( - 'JSON string containing extra configuration elements. ' - 'The ``engine_params`` object gets unpacked into the ' + 'JSON string containing extra configuration elements.
    ' + '1. The ``engine_params`` object gets unpacked into the ' '[sqlalchemy.create_engine]' '(http://docs.sqlalchemy.org/en/latest/core/engines.html#' 'sqlalchemy.create_engine) call, while the ``metadata_params`` ' 'gets unpacked into the [sqlalchemy.MetaData]' '(http://docs.sqlalchemy.org/en/rel_1_0/core/metadata.html' - '#sqlalchemy.schema.MetaData) call. ', True), + '#sqlalchemy.schema.MetaData) call.
    ' + '2. The ``metadata_cache_timeout`` is a cache timeout setting ' + 'in seconds for metadata fetch of this database. Specify it as ' + '**"metadata_cache_timeout": {"schema_cache_timeout": 600, ' + '"table_cache_timeout": 600}**. ' + 'If unset, cache will not be enabled for the functionality. ' + 'A timeout of 0 indicates that the cache never expires.
    ' + '3. The ``schemas_allowed_for_csv_upload`` is a comma separated list ' + 'of schemas that CSVs are allowed to upload to. ' + 'Specify it as **"schemas_allowed": ["public", "csv_upload"]**. ' + 'If database flavor does not support schema or any schema is allowed ' + 'to be accessed, just leave the list empty', True), 'impersonate_user': _( 'If Presto, all the queries in SQL Lab are going to be executed as the ' 'currently logged on user who must have permission to run them.
    ' @@ -222,9 +236,11 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa 'all database schemas. For large data warehouse with thousands of ' 'tables, this can be expensive and put strain on the system.'), 'cache_timeout': _( - 'Duration (in seconds) of the caching timeout for this database. ' + 'Duration (in seconds) of the caching timeout for charts of this database. ' 'A timeout of 0 indicates that the cache never expires. ' 'Note this defaults to the global timeout if undefined.'), + 'allow_csv_upload': _( + 'If selected, please set the schemas allowed for csv upload in Extra.'), } label_columns = { 'expose_in_sqllab': _('Expose in SQL Lab'), @@ -235,7 +251,7 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa 'creator': _('Creator'), 'changed_on_': _('Last Changed'), 'sqlalchemy_uri': _('SQLAlchemy URI'), - 'cache_timeout': _('Cache Timeout'), + 'cache_timeout': _('Chart Cache Timeout'), 'extra': _('Extra'), 'allow_run_sync': _('Allow Run Sync'), 'allow_run_async': _('Allow Run Async'), @@ -247,18 +263,42 @@ class DatabaseView(SupersetModelView, DeleteMixin, YamlExportMixin): # noqa } def pre_add(self, db): + self.check_extra(db) db.set_sqlalchemy_uri(db.sqlalchemy_uri) security_manager.merge_perm('database_access', db.perm) - for schema in db.all_schema_names(): + # adding a new database we always want to force refresh schema list + for schema in db.all_schema_names(force_refresh=True): security_manager.merge_perm( 'schema_access', security_manager.get_schema_perm(db, schema)) def pre_update(self, db): self.pre_add(db) + def pre_delete(self, obj): + if obj.tables: + raise SupersetException(Markup( + 'Cannot delete a database that has tables attached. ' + "Here's the list of associated tables: " + + ', '.join('{}'.format(o) for o in obj.tables))) + def _delete(self, pk): DeleteMixin._delete(self, pk) + def check_extra(self, db): + # this will check whether json.loads(extra) can succeed + try: + extra = db.get_extra() + except Exception as e: + raise Exception('Extra field cannot be decoded by JSON. {}'.format(str(e))) + + # this will check whether 'metadata_params' is configured correctly + metadata_signature = inspect.signature(MetaData) + for key in extra.get('metadata_params', {}): + if key not in metadata_signature.parameters: + raise Exception('The metadata_params in Extra field ' + 'is not configured correctly. The key ' + '{} is invalid.'.format(key)) + appbuilder.add_link( 'Import Dashboards', @@ -295,6 +335,7 @@ class DatabaseAsync(DatabaseView): class CsvToDatabaseView(SimpleFormView): form = CsvToDatabaseForm + form_template = 'superset/form_view/csv_to_database_view/edit.html' form_title = _('CSV to Database configuration') add_columns = ['database', 'schema', 'table_name'] @@ -306,9 +347,19 @@ def form_get(self, form): form.skip_blank_lines.data = True form.infer_datetime_format.data = True form.decimal.data = '.' - form.if_exists.data = 'append' + form.if_exists.data = 'fail' def form_post(self, form): + database = form.con.data + schema_name = form.schema.data or '' + + if not self.is_schema_allowed(database, schema_name): + message = _('Database "{0}" Schema "{1}" is not allowed for csv uploads. ' + 'Please contact Superset Admin'.format(database.database_name, + schema_name)) + flash(message, 'danger') + return redirect('/csvtodatabaseview/form') + csv_file = form.csv_file.data form.csv_file.data.filename = secure_filename(form.csv_file.data.filename) csv_filename = form.csv_file.data.filename @@ -342,6 +393,15 @@ def form_post(self, form): flash(message, 'info') return redirect('/tablemodelview/list/') + def is_schema_allowed(self, database, schema): + if not database.allow_csv_upload: + return False + schemas = database.get_schema_access_for_csv_upload() + if schemas: + return schema in schemas + return (security_manager.database_access(database) or + security_manager.all_datasource_access()) + appbuilder.add_view_no_menu(CsvToDatabaseView) @@ -1466,15 +1526,17 @@ def checkbox(self, model_view, id_, attr, value): @api @has_access_api @expose('/schemas//') - def schemas(self, db_id): + @expose('/schemas///') + def schemas(self, db_id, force_refresh='false'): db_id = int(db_id) + force_refresh = force_refresh.lower() == 'true' database = ( db.session .query(models.Database) .filter_by(id=db_id) .one() ) - schemas = database.all_schema_names() + schemas = database.all_schema_names(force_refresh=force_refresh) schemas = security_manager.schemas_accessible_by_user(database, schemas) return Response( json.dumps({'schemas': schemas}), @@ -1483,16 +1545,18 @@ def schemas(self, db_id): @api @has_access_api @expose('/tables////') - def tables(self, db_id, schema, substr): + @expose('/tables/////') + def tables(self, db_id, schema, substr, force_refresh='false'): """Endpoint to fetch the list of tables for given database""" db_id = int(db_id) + force_refresh = force_refresh.lower() == 'true' schema = utils.js_string_to_python(schema) substr = utils.js_string_to_python(substr) database = db.session.query(models.Database).filter_by(id=db_id).one() table_names = security_manager.accessible_by_user( - database, database.all_table_names(schema), schema) + database, database.all_table_names(schema, force_refresh), schema) view_names = security_manager.accessible_by_user( - database, database.all_view_names(schema), schema) + database, database.all_view_names(schema, force_refresh), schema) if substr: table_names = [tn for tn in table_names if substr in tn] @@ -1694,16 +1758,16 @@ def testconn(self): username), ) - connect_args = ( + engine_params = ( request.json .get('extras', {}) - .get('engine_params', {}) - .get('connect_args', {})) + .get('engine_params', {})) + connect_args = engine_params.get('connect_args') if configuration: connect_args['configuration'] = configuration - engine = create_engine(uri, connect_args=connect_args) + engine = create_engine(uri, **engine_params) engine.connect() return json_success(json.dumps(engine.table_names(), indent=4)) except Exception as e: @@ -2340,9 +2404,20 @@ def results(self, key): query.sql, query.database, query.schema) if rejected_tables: return json_error_response(security_manager.get_table_access_error_msg( - '{}'.format(rejected_tables))) + '{}'.format(rejected_tables)), status=403) - return json_success(utils.zlib_decompress_to_string(blob)) + payload = utils.zlib_decompress_to_string(blob) + display_limit = app.config.get('DISPLAY_MAX_ROW', None) + if display_limit: + payload_json = json.loads(payload) + payload_json['data'] = payload_json['data'][:display_limit] + return json_success( + json.dumps( + payload_json, + default=utils.json_iso_dttm_ser, + ignore_nan=True, + ), + ) @has_access_api @expose('/stop_query/', methods=['POST']) @@ -2364,6 +2439,9 @@ def stop_query(self): @expose('/sql_json/', methods=['POST', 'GET']) @log_this def sql_json(self): + return self.sql_json_call(request) + + def sql_json_call(self, request): """Runs arbitrary sql and returns and json""" async_ = request.form.get('runAsync') == 'true' sql = request.form.get('sql') @@ -2383,7 +2461,8 @@ def sql_json(self): if rejected_tables: return json_error_response( security_manager.get_table_access_error_msg(rejected_tables), - link=security_manager.get_table_access_link(rejected_tables)) + link=security_manager.get_table_access_link(rejected_tables), + status=403) session.commit() select_as_cta = request.form.get('select_as_cta') == 'true' @@ -2394,6 +2473,8 @@ def sql_json(self): tmp_table_name, ) + client_id = request.form.get('client_id') or utils.shortid()[:10] + query = Query( database_id=int(database_id), limit=mydb.db_engine_spec.get_limit_from_sql(sql), @@ -2405,8 +2486,8 @@ def sql_json(self): status=QueryStatus.PENDING if async_ else QueryStatus.RUNNING, sql_editor_id=request.form.get('sql_editor_id'), tmp_table_name=tmp_table_name, - user_id=int(g.user.get_id()), - client_id=request.form.get('client_id'), + user_id=g.user.get_id() if g.user else None, + client_id=client_id, ) session.add(query) session.flush() @@ -2436,7 +2517,7 @@ def sql_json(self): rendered_query, return_results=False, store_results=not query.select_as_cta, - user_name=g.user.username) + user_name=g.user.username if g.user else None) except Exception as e: logging.exception(e) msg = ( @@ -2467,7 +2548,8 @@ def sql_json(self): data = sql_lab.get_sql_results( query_id, rendered_query, - return_results=True) + return_results=True, + user_name=g.user.username if g.user else None) payload = json.dumps( data, default=utils.pessimistic_json_iso_dttm_ser, @@ -2546,6 +2628,9 @@ def fetch_datasource_metadata(self): @expose('/queries/') def queries(self, last_updated_ms): + return self.queries_call(last_updated_ms) + + def queries_call(self, last_updated_ms): """Get the updated queries.""" stats_logger.incr('queries') if not g.user.get_id(): @@ -2733,6 +2818,44 @@ def slice_query(self, slice_id): link=security_manager.get_datasource_access_link(viz_obj.datasource)) return self.get_query_string_response(viz_obj) + @api + @has_access_api + @expose('/schema_access_for_csv_upload') + def schemas_access_for_csv_upload(self): + """ + This method exposes an API endpoint to + get the schema access control settings for csv upload in this database + """ + if not request.args.get('db_id'): + return json_error_response( + 'No database is allowed for your csv upload') + + db_id = int(request.args.get('db_id')) + database = ( + db.session + .query(models.Database) + .filter_by(id=db_id) + .one() + ) + try: + schemas_allowed = database.get_schema_access_for_csv_upload() + if (security_manager.database_access(database) or + security_manager.all_datasource_access()): + return self.json_response(schemas_allowed) + # the list schemas_allowed should not be empty here + # and the list schemas_allowed_processed returned from security_manager + # should not be empty either, + # otherwise the database should have been filtered out + # in CsvToDatabaseForm + schemas_allowed_processed = security_manager.schemas_accessible_by_user( + database, schemas_allowed, False) + return self.json_response(schemas_allowed_processed) + except Exception: + return json_error_response(( + 'Failed to fetch schemas allowed for csv upload in this database! ' + 'Please contact Superset Admin!\n\n' + 'The error message returned was:\n{}').format(traceback.format_exc())) + appbuilder.add_view_no_menu(Superset) diff --git a/superset/views/lyft.py b/superset/views/lyft.py new file mode 100644 index 0000000000000..cbd8a3214d14f --- /dev/null +++ b/superset/views/lyft.py @@ -0,0 +1,64 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from flask import Response, request, g +from flask_appbuilder import expose + +from superset import app, appbuilder, security_manager +from superset.exceptions import SupersetException +import superset.models.core as models +from superset.views.core import Superset +from .base import json_error_response + +config = app.config +stats_logger = config.get('STATS_LOGGER') +log_this = models.Log.log_this +DAR = models.DatasourceAccessRequest + + +class UserDontExistException(SupersetException): + pass + + +def json_success(json_msg, status=200): + return Response(json_msg, status=status, mimetype='application/json') + + +class Lyft(Superset): + + def authorize(self): + """Provides access if token, impersonates if specified""" + if not security_manager.has_tom_key(): + raise SupersetException("Wrong key") + + email = request.headers.get('IMPERSONATE') + if email: + user = security_manager.find_user(email=email) + if not user: + raise UserDontExistException("Email to impersonate not found") + g.user = user + + @expose('/sql_json/', methods=['POST', 'GET']) + @log_this + def sql_json(self): + try: + self.authorize() + except UserDontExistException as e: + return json_error_response('{}'.format(e), status=412) + except Exception as e: + return json_error_response('{}'.format(e)) + return self.sql_json_call(request) + + @expose('/queries/') + @log_this + def queries(self, last_updated_ms): + try: + self.authorize() + except Exception as e: + return json_error_response('{}'.format(e)) + return self.queries_call(last_updated_ms) + + +appbuilder.add_view_no_menu(Lyft) diff --git a/superset/views/tags.py b/superset/views/tags.py new file mode 100644 index 0000000000000..6974befa30fd3 --- /dev/null +++ b/superset/views/tags.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +# pylint: disable=C,R,W +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +from flask import request, Response +from flask_appbuilder import expose +from jinja2.sandbox import SandboxedEnvironment +import simplejson as json +from sqlalchemy import and_, func +from werkzeug.routing import BaseConverter + +from superset import app, appbuilder, db, utils +from superset.jinja_context import current_user_id, current_username +import superset.models.core +from superset.models.sql_lab import SavedQuery +from superset.models.tags import ObjectTypes, Tag, TaggedObject, TagTypes +from .base import BaseSupersetView, json_success + + +class ObjectTypeConverter(BaseConverter): + + """Validate that object_type is indeed an object type.""" + + def to_python(self, object_type): + return ObjectTypes[object_type] + + def to_url(self, object_type): + return object_type.name + + +def process_template(content): + env = SandboxedEnvironment() + template = env.from_string(content) + context = { + 'current_user_id': current_user_id, + 'current_username': current_username, + } + return template.render(context) + + +def get_name(obj): + if obj.Dashboard: + return obj.Dashboard.dashboard_title + elif obj.Slice: + return obj.Slice.slice_name + elif obj.SavedQuery: + return obj.SavedQuery.label + + +def get_creator(obj): + if obj.Dashboard: + return obj.Dashboard.creator() + elif obj.Slice: + return obj.Slice.creator() + elif obj.SavedQuery: + return obj.SavedQuery.creator() + + +def get_attribute(obj, attr): + if obj.Dashboard: + return getattr(obj.Dashboard, attr) + elif obj.Slice: + return getattr(obj.Slice, attr) + elif obj.SavedQuery: + return getattr(obj.SavedQuery, attr) + + +class TagView(BaseSupersetView): + + @expose('/tags/suggestions/', methods=['GET']) + def suggestions(self): + query = ( + db.session.query(TaggedObject) + .group_by(TaggedObject.tag_id) + .order_by(func.count().desc()) + .all() + ) + tags = [{'id': obj.tag.id, 'name': obj.tag.name} for obj in query] + return json_success(json.dumps(tags)) + + @expose('/tags///', methods=['GET']) + def get(self, object_type, object_id): + """List all tags a given object has.""" + query = db.session.query(TaggedObject).filter(and_( + TaggedObject.object_type == object_type, + TaggedObject.object_id == object_id)) + tags = [{'id': obj.tag.id, 'name': obj.tag.name} for obj in query] + return json_success(json.dumps(tags)) + + @expose('/tags///', methods=['POST']) + def post(self, object_type, object_id): + """Add new tags to an object.""" + tagged_objects = [] + for name in request.get_json(force=True): + if ':' in name: + type_name = name.split(':', 1)[0] + type_ = TagTypes[type_name] + else: + type_ = TagTypes.custom + + tag = db.session.query(Tag).filter_by(name=name, type=type_).first() + if not tag: + tag = Tag(name=name, type=type_) + + tagged_objects.append( + TaggedObject( + object_id=object_id, + object_type=object_type, + tag=tag, + ), + ) + + db.session.add_all(tagged_objects) + db.session.commit() + + return Response(status=201) # 201 CREATED + + @expose('/tags///', methods=['DELETE']) + def delete(self, object_type, object_id): + """Remove tags from an object.""" + tag_names = request.get_json(force=True) + if not tag_names: + return Response(status=403) + + db.session.query(TaggedObject).filter(and_( + TaggedObject.object_type == object_type, + TaggedObject.object_id == object_id), + TaggedObject.tag.has(Tag.name.in_(tag_names)), + ).delete(synchronize_session=False) + db.session.commit() + + return Response(status=204) # 204 NO CONTENT + + @expose('/tagged_objects/', methods=['GET', 'POST']) + def tagged_objects(self): + query = db.session.query( + TaggedObject, + superset.models.core.Dashboard, + superset.models.core.Slice, + SavedQuery, + ).join(Tag) + + tags = request.args.get('tags') + if not tags: + return json_success(json.dumps([])) + + tags = [process_template(tag) for tag in tags.split(',')] + query = query.filter(Tag.name.in_(tags)) + + # filter types + types = request.args.get('types') + if types: + query = query.filter(TaggedObject.object_type.in_(types.split(','))) + + # get names + query = query.outerjoin( + superset.models.core.Dashboard, + and_( + TaggedObject.object_id == superset.models.core.Dashboard.id, + TaggedObject.object_type == ObjectTypes.dashboard, + ), + ).outerjoin( + superset.models.core.Slice, + and_( + TaggedObject.object_id == superset.models.core.Slice.id, + TaggedObject.object_type == ObjectTypes.chart, + ), + ).outerjoin( + SavedQuery, + and_( + TaggedObject.object_id == SavedQuery.id, + TaggedObject.object_type == ObjectTypes.query, + ), + ).group_by(TaggedObject.object_id, TaggedObject.object_type) + + objects = [ + { + 'id': get_attribute(obj, 'id'), + 'type': obj.TaggedObject.object_type.name, + 'name': get_name(obj), + 'url': get_attribute(obj, 'url'), + 'changed_on': get_attribute(obj, 'changed_on'), + 'created_by': get_attribute(obj, 'created_by_fk'), + 'creator': get_creator(obj), + } + for obj in query if get_attribute(obj, 'id') + ] + + return json_success(json.dumps(objects, default=utils.json_int_dttm_ser)) + + +app.url_map.converters['object_type'] = ObjectTypeConverter +appbuilder.add_view_no_menu(TagView) diff --git a/superset/viz.py b/superset/viz.py index 5f4cea84984ae..e2a0f27411c0b 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -10,7 +10,7 @@ from __future__ import print_function from __future__ import unicode_literals -from collections import defaultdict +from collections import defaultdict, OrderedDict import copy from datetime import datetime, timedelta import hashlib @@ -18,6 +18,7 @@ from itertools import product import logging import math +import os import re import traceback import uuid @@ -36,6 +37,7 @@ import simplejson as json from six import string_types, text_type from six.moves import cPickle as pkl, reduce +import sqlalchemy from superset import app, cache, get_css_manifest_files, utils from superset.exceptions import NullValueException, SpatialException @@ -100,7 +102,7 @@ def __init__(self, datasource, form_data, force=False): self.process_metrics() def process_metrics(self): - self.metric_dict = {} + self.metric_dict = OrderedDict() fd = self.form_data for mkey in METRIC_KEYS: val = fd.get(mkey) @@ -120,9 +122,14 @@ def process_metrics(self): def get_metric_label(self, metric): if isinstance(metric, string_types): return metric + if isinstance(metric, dict): - return self.datasource.database.db_engine_spec.mutate_expression_label( - metric.get('label')) + metric = metric.get('label') + + if self.datasource.type == 'table': + db_engine_spec = self.datasource.database.db_engine_spec + metric = db_engine_spec.mutate_expression_label(metric) + return metric @staticmethod def handle_js_int_overflow(data): @@ -220,15 +227,15 @@ def get_df(self, query_obj=None): df[DTTM_ALIAS] += self.time_shift if self.enforce_numerical_metrics: - self.df_metrics_to_num(df, query_obj.get('metrics') or []) + self.df_metrics_to_num(df) df.replace([np.inf, -np.inf], np.nan) df = self.handle_nulls(df) return df - @staticmethod - def df_metrics_to_num(df, metrics): + def df_metrics_to_num(self, df): """Converting metrics to numeric when pandas.read_sql cannot""" + metrics = self.metric_labels for col, dtype in df.dtypes.items(): if dtype.type == np.object_ and col in metrics: df[col] = pd.to_numeric(df[col], errors='coerce') @@ -237,6 +244,8 @@ def query_obj(self): """Building a query object""" form_data = self.form_data gb = form_data.get('groupby') or [] + if not isinstance(gb, list): + gb = [gb] metrics = self.all_metrics or [] columns = form_data.get('columns') or [] groupby = [] @@ -322,15 +331,21 @@ def get_json(self): self.get_payload(), default=utils.json_int_dttm_ser, ignore_nan=True) - def cache_key(self, query_obj): + def cache_key(self, query_obj, **extra): """ - The cache key is made out of the key/values in `query_obj` + The cache key is made out of the key/values in `query_obj`, plus any + other key/values in `extra`. - We remove datetime bounds that are hard values, - and replace them with the use-provided inputs to bounds, which - may be time-relative (as in "5 days ago" or "now"). + We remove datetime bounds that are hard values, and replace them with + the use-provided inputs to bounds, which may be time-relative (as in + "5 days ago" or "now"). + + The `extra` arguments are currently used by time shift queries, since + different time shifts wil differ only in the `from_dttm` and `to_dttm` + values which are stripped. """ cache_dict = copy.copy(query_obj) + cache_dict.update(extra) for k in ['from_dttm', 'to_dttm']: del cache_dict[k] @@ -355,11 +370,11 @@ def get_payload(self, query_obj=None): del payload['df'] return payload - def get_df_payload(self, query_obj=None): + def get_df_payload(self, query_obj=None, **kwargs): """Handles caching around the df payload retrieval""" if not query_obj: query_obj = self.query_obj() - cache_key = self.cache_key(query_obj) if query_obj else None + cache_key = self.cache_key(query_obj, **kwargs) if query_obj else None logging.info('Cache key: {}'.format(cache_key)) is_loaded = False stacktrace = None @@ -386,10 +401,6 @@ def get_df_payload(self, query_obj=None): if query_obj and not is_loaded: try: df = self.get_df(query_obj) - if hasattr(self.datasource, 'database') and \ - hasattr(self.datasource.database, 'db_engine_spec'): - db_engine_spec = self.datasource.database.db_engine_spec - df = db_engine_spec.adjust_df_column_names(df, self.form_data) if self.status != utils.QueryStatus.FAILED: stats_logger.incr('loaded_from_source') is_loaded = True @@ -1211,7 +1222,7 @@ def run_extra_queries(self): query_object['from_dttm'] -= delta query_object['to_dttm'] -= delta - df2 = self.get_df_payload(query_object).get('df') + df2 = self.get_df_payload(query_object, time_compare=option).get('df') if df2 is not None and DTTM_ALIAS in df2: label = '{} offset'. format(option) df2[DTTM_ALIAS] += delta @@ -2016,6 +2027,10 @@ def get_data(self, df): ], } + x_series, y_series = df[fd.get('all_columns_x')], df[fd.get('all_columns_y')] + south_west = [x_series.min(), y_series.min()] + north_east = [x_series.max(), y_series.max()] + return { 'geoJSON': geo_json, 'customMetric': custom_metric, @@ -2025,9 +2040,7 @@ def get_data(self, df): 'clusteringRadius': fd.get('clustering_radius'), 'pointRadiusUnit': fd.get('point_radius_unit'), 'globalOpacity': fd.get('global_opacity'), - 'viewportLongitude': fd.get('viewport_longitude'), - 'viewportLatitude': fd.get('viewport_latitude'), - 'viewportZoom': fd.get('viewport_zoom'), + 'bounds': [south_west, north_east], 'renderWhileDragging': fd.get('render_while_dragging'), 'tooltip': fd.get('rich_tooltip'), 'color': fd.get('mapbox_color'), @@ -2161,7 +2174,7 @@ def query_obj(self): fd = self.form_data # add NULL filters - if fd.get('filter_nulls'): + if fd.get('filter_nulls', True): self.add_null_filters() d = super(BaseDeckGLViz, self).query_obj() @@ -2208,6 +2221,7 @@ def get_data(self, df): return { 'features': features, 'mapboxApiKey': config.get('MAPBOX_API_KEY'), + 'metricLabels': self.metric_labels, } def get_properties(self, d): @@ -2266,7 +2280,6 @@ class DeckScreengrid(BaseDeckGLViz): viz_type = 'deck_screengrid' verbose_name = _('Deck.gl - Screen Grid') spatial_control_keys = ['spatial'] - is_timeseries = True def query_obj(self): fd = self.form_data @@ -2304,6 +2317,17 @@ def get_data(self, df): return super(DeckGrid, self).get_data(df) +def geohash_to_json(geohash_code): + p = geohash.bbox(geohash_code) + return [ + [p.get('w'), p.get('n')], + [p.get('e'), p.get('n')], + [p.get('e'), p.get('s')], + [p.get('w'), p.get('s')], + [p.get('w'), p.get('n')], + ] + + class DeckPathViz(BaseDeckGLViz): """deck.gl's PathLayer""" @@ -2314,26 +2338,32 @@ class DeckPathViz(BaseDeckGLViz): deser_map = { 'json': json.loads, 'polyline': polyline.decode, + 'geohash': geohash_to_json, } def query_obj(self): d = super(DeckPathViz, self).query_obj() line_col = self.form_data.get('line_column') if d['metrics']: + self.has_metrics = True d['groupby'].append(line_col) else: + self.has_metrics = False d['columns'].append(line_col) return d def get_properties(self, d): fd = self.form_data - deser = self.deser_map[fd.get('line_type')] - path = deser(d[fd.get('line_column')]) + line_type = fd.get('line_type') + deser = self.deser_map[line_type] + line_column = fd.get('line_column') + path = deser(d[line_column]) if fd.get('reverse_long_lat'): - path = (path[1], path[0]) - return { - self.deck_viz_key: path, - } + path = [(o[1], o[0]) for o in path] + d[self.deck_viz_key] = path + if line_type != 'geohash': + del d[line_column] + return d class DeckPolygon(DeckPathViz): @@ -2383,6 +2413,79 @@ def get_properties(self, d): return json.loads(geojson) +class DeckZipCodes(BaseDeckGLViz): + + """Custom viz for Lyft, shows zip codes as geojson.""" + + viz_type = 'deck_zipcodes' + verbose_name = _('Deck.gl - ZIP codes') + is_timeseries = True + + user = os.environ.get('CREDENTIALS_LYFTPG_USER', '') + password = os.environ.get('CREDENTIALS_LYFTPG_PASSWORD', '') + url = ( + 'postgresql+psycopg2://' + '{user}:{password}' + '@analytics-platform-vpc.c067nfzisc99.us-east-1.rds.amazonaws.com:5432' + '/platform'.format(user=user, password=password) + ) + + def query_obj(self): + fd = self.form_data + self.is_timeseries = fd.get('time_grain_sqla') or fd.get('granularity') + + d = super(DeckZipCodes, self).query_obj() + self.zipcode_col = self.form_data.get('groupby') + d['groupby'] = [self.zipcode_col] + return d + + def get_geojson(self, zipcodes): + out = {} + missing = set() + for zipcode in zipcodes: + cache_key = 'zipcode_geojson_{}'.format(zipcode) + geojson = cache and cache.get(cache_key) + if geojson: + out[zipcode] = geojson + else: + missing.add(str(zipcode)) + + if not missing: + return out + + # fetch missing geojson from lyftpg + in_clause = ', '.join(['%s'] * len(missing)) + query = ( + 'SELECT zipcode, geojson FROM zip_codes WHERE zipcode IN ({0})' + .format(in_clause)) + conn = sqlalchemy.create_engine(self.url, client_encoding='utf8') + results = conn.execute(query, tuple(missing)).fetchall() + + for zipcode, geojson in results: + out[zipcode] = geojson + if cache and len(results) < 10000: # avoid storing too much + cache_key = 'zipcode_geojson_{}'.format(zipcode) + try: + cache.set(cache_key, geojson, timeout=86400) + except Exception: + pass + + return out + + def get_data(self, df): + self.metric_label = self.get_metric_label(self.metric) + data = super(DeckZipCodes, self).get_data(df) + data['geojson'] = self.get_geojson(set(df[self.zipcode_col])) + return data + + def get_properties(self, d): + return { + 'metric': d.get(self.metric_label) or 1, + 'zipcode': d.get(self.zipcode_col), + DTTM_ALIAS: d.get(DTTM_ALIAS), + } + + class DeckArc(BaseDeckGLViz): """deck.gl's Arc Layer""" @@ -2409,10 +2512,9 @@ def get_properties(self, d): def get_data(self, df): d = super(DeckArc, self).get_data(df) - arcs = d['features'] return { - 'arcs': arcs, + 'features': d['features'], 'mapboxApiKey': config.get('MAPBOX_API_KEY'), } diff --git a/tests/base_tests.py b/tests/base_tests.py index 35ac33500973d..61e35784f3dd9 100644 --- a/tests/base_tests.py +++ b/tests/base_tests.py @@ -11,6 +11,8 @@ import unittest from flask_appbuilder.security.sqla import models as ab_models +from mock import Mock +import pandas as pd from superset import app, cli, db, security_manager, utils from superset.connectors.druid.models import DruidCluster, DruidDatasource @@ -119,10 +121,13 @@ def get_table(self, table_id): .one() ) - def get_or_create(self, cls, criteria, session): + def get_or_create(self, cls, criteria, session, **kwargs): obj = session.query(cls).filter_by(**criteria).first() if not obj: obj = cls(**criteria) + obj.__dict__.update(**kwargs) + session.add(obj) + session.commit() return obj def login(self, username='admin', password='general'): @@ -147,6 +152,23 @@ def get_druid_ds_by_name(self, name): return db.session.query(DruidDatasource).filter_by( datasource_name=name).first() + def get_datasource_mock(self): + datasource = Mock() + results = Mock() + results.query = Mock() + results.status = Mock() + results.error_message = None + results.df = pd.DataFrame() + datasource.type = 'table' + datasource.query = Mock(return_value=results) + mock_dttm_col = Mock() + datasource.get_col = Mock(return_value=mock_dttm_col) + datasource.query = Mock(return_value=results) + datasource.database = Mock() + datasource.database.db_engine_spec = Mock() + datasource.database.db_engine_spec.mutate_expression_label = lambda x: x + return datasource + def get_resp( self, url, data=None, follow_redirects=True, raise_on_error=True): """Shortcut to get the parsed results while following redirects""" @@ -204,7 +226,7 @@ def revoke_public_access_to_table(self, table): perm.view_menu and table.perm in perm.view_menu.name): security_manager.del_permission_role(public_role, perm) - def run_sql(self, sql, client_id, user_name=None, raise_on_error=False): + def run_sql(self, sql, client_id=None, user_name=None, raise_on_error=False): if user_name: self.logout() self.login(username=(user_name if user_name else 'admin')) diff --git a/tests/celery_tests.py b/tests/celery_tests.py index 71adb2df43d1e..c521729cf3cdf 100644 --- a/tests/celery_tests.py +++ b/tests/celery_tests.py @@ -6,7 +6,6 @@ from __future__ import unicode_literals import json -import os import subprocess import time import unittest @@ -14,7 +13,7 @@ import pandas as pd from past.builtins import basestring -from superset import app, cli, db, security_manager +from superset import app, db from superset.models.helpers import QueryStatus from superset.models.sql_lab import Query from superset.sql_parse import SupersetQuery @@ -22,13 +21,12 @@ BASE_DIR = app.config.get('BASE_DIR') +CELERY_SLEEP_TIME = 5 class CeleryConfig(object): - BROKER_URL = 'sqla+sqlite:///' + app.config.get('SQL_CELERY_DB_FILE_PATH') + BROKER_URL = app.config.get('CELERY_RESULT_BACKEND') CELERY_IMPORTS = ('superset.sql_lab', ) - CELERY_RESULT_BACKEND = ( - 'db+sqlite:///' + app.config.get('SQL_CELERY_RESULTS_DB_FILE_PATH')) CELERY_ANNOTATIONS = {'sql_lab.add': {'rate_limit': '10/s'}} CONCURRENCY = 1 @@ -88,29 +86,13 @@ def get_query_by_id(self, id): @classmethod def setUpClass(cls): - try: - os.remove(app.config.get('SQL_CELERY_DB_FILE_PATH')) - except OSError as e: - app.logger.warn(str(e)) - try: - os.remove(app.config.get('SQL_CELERY_RESULTS_DB_FILE_PATH')) - except OSError as e: - app.logger.warn(str(e)) - - security_manager.sync_role_definitions() - - worker_command = BASE_DIR + '/bin/superset worker' + db.session.query(Query).delete() + db.session.commit() + + worker_command = BASE_DIR + '/bin/superset worker -w 2' subprocess.Popen( worker_command, shell=True, stdout=subprocess.PIPE) - admin = security_manager.find_user('admin') - if not admin: - security_manager.add_user( - 'admin', 'admin', ' user', 'admin@fab.org', - security_manager.find_role('Admin'), - password='general') - cli.load_examples_run(load_test_data=True) - @classmethod def tearDownClass(cls): subprocess.call( @@ -122,15 +104,15 @@ def tearDownClass(cls): shell=True, ) - def run_sql(self, db_id, sql, client_id, cta='false', tmp_table='tmp', - async='false'): + def run_sql(self, db_id, sql, client_id=None, cta='false', tmp_table='tmp', + async_='false'): self.login() resp = self.client.post( '/superset/sql_json/', data=dict( database_id=db_id, sql=sql, - async=async, + runAsync=async_, select_as_cta=cta, tmp_table_name=tmp_table, client_id=client_id, @@ -150,11 +132,13 @@ def test_run_sync_query_cta(self): main_db = self.get_main_database(db.session) db_id = main_db.id eng = main_db.get_sqla_engine() + tmp_table_name = 'tmp_async_22' + self.drop_table_if_exists(tmp_table_name, main_db) perm_name = 'can_sql_json' sql_where = ( "SELECT name FROM ab_permission WHERE name='{}'".format(perm_name)) result2 = self.run_sql( - db_id, sql_where, '2', tmp_table='tmp_table_2', cta='true') + db_id, sql_where, '2', tmp_table=tmp_table_name, cta='true') self.assertEqual(QueryStatus.SUCCESS, result2['query']['state']) self.assertEqual([], result2['data']) self.assertEqual([], result2['columns']) @@ -169,8 +153,7 @@ def test_run_sync_query_cta_no_data(self): main_db = self.get_main_database(db.session) db_id = main_db.id sql_empty_result = 'SELECT * FROM ab_user WHERE id=666' - result3 = self.run_sql( - db_id, sql_empty_result, '3', tmp_table='tmp_table_3', cta='true') + result3 = self.run_sql(db_id, sql_empty_result, '3') self.assertEqual(QueryStatus.SUCCESS, result3['query']['state']) self.assertEqual([], result3['data']) self.assertEqual([], result3['columns']) @@ -178,22 +161,31 @@ def test_run_sync_query_cta_no_data(self): query3 = self.get_query_by_id(result3['query']['serverId']) self.assertEqual(QueryStatus.SUCCESS, query3.status) + def drop_table_if_exists(self, table_name, database=None): + """Drop table if it exists, works on any DB""" + sql = 'DROP TABLE {}'.format(table_name) + db_id = database.id + if database: + database.allow_dml = True + db.session.flush() + return self.run_sql(db_id, sql) + def test_run_async_query(self): - main_db = self.get_main_database(db.session) - eng = main_db.get_sqla_engine() + main_db = get_main_database(db.session) + db_id = main_db.id + + self.drop_table_if_exists('tmp_async_1', main_db) + sql_where = "SELECT name FROM ab_role WHERE name='Admin'" result = self.run_sql( - main_db.id, sql_where, '4', async='true', tmp_table='tmp_async_1', + db_id, sql_where, '4', async_='true', tmp_table='tmp_async_1', cta='true') assert result['query']['state'] in ( QueryStatus.PENDING, QueryStatus.RUNNING, QueryStatus.SUCCESS) - time.sleep(1) + time.sleep(CELERY_SLEEP_TIME) query = self.get_query_by_id(result['query']['serverId']) - df = pd.read_sql_query(query.select_sql, con=eng) - self.assertEqual(QueryStatus.SUCCESS, query.status) - self.assertEqual([{'name': 'Admin'}], df.to_dict(orient='records')) self.assertEqual(QueryStatus.SUCCESS, query.status) self.assertTrue('FROM tmp_async_1' in query.select_sql) self.assertEqual( @@ -201,27 +193,25 @@ def test_run_async_query(self): "WHERE name='Admin' LIMIT 666", query.executed_sql) self.assertEqual(sql_where, query.sql) self.assertEqual(0, query.rows) - self.assertEqual(666, query.limit) self.assertEqual(False, query.limit_used) self.assertEqual(True, query.select_as_cta) self.assertEqual(True, query.select_as_cta_used) def test_run_async_query_with_lower_limit(self): main_db = self.get_main_database(db.session) - eng = main_db.get_sqla_engine() + db_id = main_db.id + self.drop_table_if_exists('tmp_async_2', main_db) + sql_where = "SELECT name FROM ab_role WHERE name='Alpha' LIMIT 1" result = self.run_sql( - main_db.id, sql_where, '5', async='true', tmp_table='tmp_async_2', + db_id, sql_where, '5', async_='true', tmp_table='tmp_async_2', cta='true') assert result['query']['state'] in ( QueryStatus.PENDING, QueryStatus.RUNNING, QueryStatus.SUCCESS) - time.sleep(1) + time.sleep(CELERY_SLEEP_TIME) query = self.get_query_by_id(result['query']['serverId']) - df = pd.read_sql_query(query.select_sql, con=eng) - self.assertEqual(QueryStatus.SUCCESS, query.status) - self.assertEqual([{'name': 'Alpha'}], df.to_dict(orient='records')) self.assertEqual(QueryStatus.SUCCESS, query.status) self.assertTrue('FROM tmp_async_2' in query.select_sql) self.assertEqual( diff --git a/tests/core_tests.py b/tests/core_tests.py index f03c51f2b392c..e3305496e3d28 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -17,6 +17,7 @@ import string import unittest +import mock import pandas as pd import psycopg2 from six import text_type @@ -696,6 +697,35 @@ def test_slice_payload_viz_markdown(self): self.assertEqual(data['status'], None) self.assertEqual(data['error'], None) + @mock.patch('superset.security.SupersetSecurityManager.schemas_accessible_by_user') + @mock.patch('superset.security.SupersetSecurityManager.database_access') + @mock.patch('superset.security.SupersetSecurityManager.all_datasource_access') + def test_schemas_access_for_csv_upload_endpoint(self, + mock_all_datasource_access, + mock_database_access, + mock_schemas_accessible): + mock_all_datasource_access.return_value = False + mock_database_access.return_value = False + mock_schemas_accessible.return_value = ['this_schema_is_allowed_too'] + database_name = 'fake_db_100' + db_id = 100 + extra = """{ + "schemas_allowed_for_csv_upload": + ["this_schema_is_allowed", "this_schema_is_allowed_too"] + }""" + + self.login(username='admin') + dbobj = self.get_or_create( + cls=models.Database, + criteria={'database_name': database_name}, + session=db.session, + id=db_id, + extra=extra) + data = self.get_json_resp( + url='/superset/schema_access_for_csv_upload?db_id={db_id}' + .format(db_id=dbobj.id)) + assert data == ['this_schema_is_allowed_too'] + if __name__ == '__main__': unittest.main() diff --git a/tests/sql_parse_tests.py b/tests/sql_parse_tests.py index 71ee29406ad90..5306760a49fc0 100644 --- a/tests/sql_parse_tests.py +++ b/tests/sql_parse_tests.py @@ -310,3 +310,31 @@ def test_explain(self): self.assertEquals(True, sql.is_explain()) self.assertEquals(False, sql.is_select()) self.assertEquals(True, sql.is_readonly()) + + def test_complex_extract_tables(self): + query = """SELECT sum(m_examples) AS "sum__m_example" + FROM + (SELECT COUNT(DISTINCT id_userid) AS m_examples, + some_more_info + FROM my_b_table b + JOIN my_t_table t ON b.ds=t.ds + JOIN my_l_table l ON b.uid=l.uid + WHERE b.rid IN + (SELECT other_col + FROM inner_table) + AND l.bla IN ('x', 'y') + GROUP BY 2 + ORDER BY 2 ASC) AS "meh" + ORDER BY "sum__m_example" DESC + LIMIT 10;""" + self.assertEquals( + {'my_l_table', 'my_b_table', 'my_t_table', 'inner_table'}, + self.extract_tables(query)) + + def test_complex_extract_tables2(self): + query = """SELECT * + FROM table_a AS a, table_b AS b, table_c as c + WHERE a.id = b.id and b.id = c.id""" + self.assertEquals( + {'table_a', 'table_b', 'table_c'}, + self.extract_tables(query)) diff --git a/tests/superset_test_config.py b/tests/superset_test_config.py index 3076a0556cb3b..aacbd6a0ad76e 100644 --- a/tests/superset_test_config.py +++ b/tests/superset_test_config.py @@ -12,7 +12,6 @@ if 'SUPERSET__SQLALCHEMY_DATABASE_URI' in os.environ: SQLALCHEMY_DATABASE_URI = os.environ.get('SUPERSET__SQLALCHEMY_DATABASE_URI') -SQL_CELERY_RESULTS_DB_FILE_PATH = os.path.join(DATA_DIR, 'celery_results.sqlite') SQL_SELECT_AS_CTA = True SQL_MAX_ROW = 666 @@ -28,7 +27,6 @@ class CeleryConfig(object): BROKER_URL = 'redis://localhost' CELERY_IMPORTS = ('superset.sql_lab', ) - CELERY_RESULT_BACKEND = 'db+sqlite:///' + SQL_CELERY_RESULTS_DB_FILE_PATH CELERY_ANNOTATIONS = {'sql_lab.add': {'rate_limit': '10/s'}} CONCURRENCY = 1 diff --git a/tests/viz_tests.py b/tests/viz_tests.py index ccca0263afb11..c1bc15e781192 100644 --- a/tests/viz_tests.py +++ b/tests/viz_tests.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals from datetime import datetime -import unittest import uuid from mock import Mock, patch @@ -15,10 +14,11 @@ from superset.exceptions import SpatialException from superset.utils import DTTM_ALIAS import superset.viz as viz +from .base_tests import SupersetTestCase from .utils import load_fixture -class BaseVizTestCase(unittest.TestCase): +class BaseVizTestCase(SupersetTestCase): def test_constructor_exception_no_datasource(self): form_data = {} @@ -31,7 +31,7 @@ def test_get_fillna_returns_default_on_null_columns(self): 'viz_type': 'table', 'token': '12345', } - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() test_viz = viz.BaseViz(datasource, form_data) self.assertEqual( test_viz.default_fillna, @@ -39,16 +39,9 @@ def test_get_fillna_returns_default_on_null_columns(self): ) def test_get_df_returns_empty_df(self): - datasource = Mock() - datasource.type = 'table' form_data = {'dummy': 123} query_obj = {'granularity': 'day'} - results = Mock() - results.query = Mock() - results.status = Mock() - results.error_message = None - results.df = pd.DataFrame() - datasource.query = Mock(return_value=results) + datasource = self.get_datasource_mock() test_viz = viz.BaseViz(datasource, form_data) result = test_viz.get_df(query_obj) self.assertEqual(type(result), pd.DataFrame) @@ -66,14 +59,20 @@ def test_get_df_handles_dttm_col(self): datasource.query = Mock(return_value=results) mock_dttm_col = Mock() datasource.get_col = Mock(return_value=mock_dttm_col) + test_viz = viz.BaseViz(datasource, form_data) test_viz.df_metrics_to_num = Mock() test_viz.get_fillna_for_columns = Mock(return_value=0) results.df = pd.DataFrame(data={DTTM_ALIAS: ['1960-01-01 05:00:00']}) datasource.offset = 0 + mock_dttm_col = Mock() + datasource.get_col = Mock(return_value=mock_dttm_col) mock_dttm_col.python_date_format = 'epoch_ms' result = test_viz.get_df(query_obj) + print(result) + import logging + logging.info(result) pd.testing.assert_series_equal( result[DTTM_ALIAS], pd.Series([datetime(1960, 1, 1, 5, 0)], name=DTTM_ALIAS), @@ -103,38 +102,28 @@ def test_get_df_handles_dttm_col(self): ) def test_cache_timeout(self): - datasource = Mock() + datasource = self.get_datasource_mock() datasource.cache_timeout = 0 test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(0, test_viz.cache_timeout) + datasource.cache_timeout = 156 test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(156, test_viz.cache_timeout) + datasource.cache_timeout = None - datasource.database = Mock() datasource.database.cache_timeout = 0 self.assertEqual(0, test_viz.cache_timeout) + datasource.database.cache_timeout = 1666 self.assertEqual(1666, test_viz.cache_timeout) + datasource.database.cache_timeout = None test_viz = viz.BaseViz(datasource, form_data={}) self.assertEqual(app.config['CACHE_DEFAULT_TIMEOUT'], test_viz.cache_timeout) -class TableVizTestCase(unittest.TestCase): - - class DBEngineSpecMock: - @staticmethod - def mutate_expression_label(label): - return label - - class DatabaseMock: - def __init__(self): - self.db_engine_spec = TableVizTestCase.DBEngineSpecMock() - - class DatasourceMock: - def __init__(self): - self.database = TableVizTestCase.DatabaseMock() +class TableVizTestCase(SupersetTestCase): def test_get_data_applies_percentage(self): form_data = { @@ -151,7 +140,7 @@ def test_get_data_applies_percentage(self): 'column': {'column_name': 'value1', 'type': 'DOUBLE'}, }, 'count', 'avg__C'], } - datasource = TableVizTestCase.DatasourceMock() + datasource = self.get_datasource_mock() raw = {} raw['SUM(value1)'] = [15, 20, 25, 40] raw['avg__B'] = [10, 20, 5, 15] @@ -227,7 +216,7 @@ def test_parse_adhoc_filters(self): }, ], } - datasource = Mock() + datasource = self.get_datasource_mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( @@ -265,7 +254,7 @@ def test_adhoc_filters_overwrite_legacy_filters(self): ], 'having': 'SUM(value1) > 5', } - datasource = Mock() + datasource = self.get_datasource_mock() test_viz = viz.TableViz(datasource, form_data) query_obj = test_viz.query_obj() self.assertEqual( @@ -281,7 +270,7 @@ def test_adhoc_filters_overwrite_legacy_filters(self): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_merges_percent_metrics(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'percent_metrics': ['sum__A', 'avg__B', 'max__Y'], 'metrics': ['sum__A', 'count', 'avg__C'], @@ -299,7 +288,7 @@ def test_query_obj_merges_percent_metrics(self, super_query_obj): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_throws_columns_and_metrics(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'all_columns': ['A', 'B'], 'metrics': ['x', 'y'], @@ -316,7 +305,7 @@ def test_query_obj_throws_columns_and_metrics(self, super_query_obj): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_merges_all_columns(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'all_columns': ['colA', 'colB', 'colC'], 'order_by_cols': ['["colA", "colB"]', '["colC"]'], @@ -333,7 +322,7 @@ def test_query_obj_merges_all_columns(self, super_query_obj): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_uses_sortby(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'timeseries_limit_metric': '__time__', 'order_desc': False, @@ -351,20 +340,20 @@ def test_query_obj_uses_sortby(self, super_query_obj): )], query_obj['orderby']) def test_should_be_timeseries_raises_when_no_granularity(self): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = {'include_time': True} test_viz = viz.TableViz(datasource, form_data) with self.assertRaises(Exception): test_viz.should_be_timeseries() -class PairedTTestTestCase(unittest.TestCase): +class PairedTTestTestCase(SupersetTestCase): def test_get_data_transforms_dataframe(self): form_data = { 'groupby': ['groupA', 'groupB', 'groupC'], 'metrics': ['metric1', 'metric2', 'metric3'], } - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() # Test data raw = {} raw[DTTM_ALIAS] = [100, 200, 300, 100, 200, 300, 100, 200, 300] @@ -456,7 +445,7 @@ def test_get_data_empty_null_keys(self): 'groupby': [], 'metrics': ['', None], } - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() # Test data raw = {} raw[DTTM_ALIAS] = [100, 200, 300] @@ -490,11 +479,11 @@ def test_get_data_empty_null_keys(self): self.assertEqual(data, expected) -class PartitionVizTestCase(unittest.TestCase): +class PartitionVizTestCase(SupersetTestCase): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_time_series_option(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = {} test_viz = viz.PartitionViz(datasource, form_data) super_query_obj.return_value = {} @@ -715,7 +704,7 @@ def test_get_data_calls_correct_method(self): self.assertEqual(7, len(test_viz.nest_values.mock_calls)) -class RoseVisTestCase(unittest.TestCase): +class RoseVisTestCase(SupersetTestCase): def test_rose_vis_get_data(self): raw = {} @@ -755,14 +744,14 @@ def test_rose_vis_get_data(self): self.assertEqual(expected, res) -class TimeSeriesTableVizTestCase(unittest.TestCase): +class TimeSeriesTableVizTestCase(SupersetTestCase): def test_get_data_metrics(self): form_data = { 'metrics': ['sum__A', 'count'], 'groupby': [], } - datasource = Mock() + datasource = self.get_datasource_mock() raw = {} t1 = pd.Timestamp('2000') t2 = pd.Timestamp('2002') @@ -792,7 +781,7 @@ def test_get_data_group_by(self): 'metrics': ['sum__A'], 'groupby': ['groupby1'], } - datasource = Mock() + datasource = self.get_datasource_mock() raw = {} t1 = pd.Timestamp('2000') t2 = pd.Timestamp('2002') @@ -821,7 +810,7 @@ def test_get_data_group_by(self): @patch('superset.viz.BaseViz.query_obj') def test_query_obj_throws_metrics_and_groupby(self, super_query_obj): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'groupby': ['a'], } @@ -835,11 +824,11 @@ def test_query_obj_throws_metrics_and_groupby(self, super_query_obj): test_viz.query_obj() -class BaseDeckGLVizTestCase(unittest.TestCase): +class BaseDeckGLVizTestCase(SupersetTestCase): def test_get_metrics(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() test_viz_deckgl = viz.BaseDeckGLViz(datasource, form_data) result = test_viz_deckgl.get_metrics() assert result == [form_data.get('size')] @@ -851,7 +840,7 @@ def test_get_metrics(self): def test_scatterviz_get_metrics(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() form_data = {} test_viz_deckgl = viz.DeckScatterViz(datasource, form_data) @@ -867,7 +856,7 @@ def test_scatterviz_get_metrics(self): def test_get_js_columns(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() mock_d = { 'a': 'dummy1', 'b': 'dummy2', @@ -881,7 +870,7 @@ def test_get_js_columns(self): def test_get_properties(self): mock_d = {} form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() test_viz_deckgl = viz.BaseDeckGLViz(datasource, form_data) with self.assertRaises(NotImplementedError) as context: @@ -891,7 +880,7 @@ def test_get_properties(self): def test_process_spatial_query_obj(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() mock_key = 'spatial_key' mock_gb = [] test_viz_deckgl = viz.BaseDeckGLViz(datasource, form_data) @@ -917,7 +906,7 @@ def test_process_spatial_query_obj(self): }, } - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() expected_results = { 'latlong_key': ['lon', 'lat'], 'delimited_key': ['lonlat'], @@ -931,7 +920,7 @@ def test_process_spatial_query_obj(self): def test_geojson_query_obj(self): form_data = load_fixture('deck_geojson_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() test_viz_deckgl = viz.DeckGeoJson(datasource, form_data) results = test_viz_deckgl.query_obj() @@ -941,7 +930,7 @@ def test_geojson_query_obj(self): def test_parse_coordinates(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() viz_instance = viz.BaseDeckGLViz(datasource, form_data) coord = viz_instance.parse_coordinates('1.23, 3.21') @@ -956,7 +945,7 @@ def test_parse_coordinates(self): def test_parse_coordinates_raises(self): form_data = load_fixture('deck_path_form_data.json') - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() test_viz_deckgl = viz.BaseDeckGLViz(datasource, form_data) with self.assertRaises(SpatialException): @@ -984,7 +973,7 @@ def test_filter_nulls(self, mock_uuid4): }, } - datasource = {'type': 'table'} + datasource = self.get_datasource_mock() expected_results = { 'latlong_key': [{ 'clause': 'WHERE', @@ -1027,10 +1016,10 @@ def test_filter_nulls(self, mock_uuid4): assert expected_results.get(mock_key) == adhoc_filters -class TimeSeriesVizTestCase(unittest.TestCase): +class TimeSeriesVizTestCase(SupersetTestCase): def test_timeseries_unicode_data(self): - datasource = Mock() + datasource = self.get_datasource_mock() form_data = { 'groupby': ['name'], 'metrics': ['sum__payout'], diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fb57ccd13afbd..0000000000000 --- a/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - -