diff --git a/.gitignore b/.gitignore index c75a949..bbb6008 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,26 @@ -# Compiled class file +# Mac OS files +*.DS_Store +.java-version + +# Compiled class files *.class -# Log file +# Log files *.log # Virtual machine crash logs hs_err_pid* -# Node Modules -node_modules/ +# Node modules +*node_modules/ + +# Java settings files +*.project +*.settings/ +*.gradle/ + +# VSCode settings +*.vscode/ + +# IntelliJ settings +*.idea/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0192849 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,45 @@ +dist: xenial +matrix: + include: + - + language: node_js + node_js: + - lts/* + - node + cache: + directories: + - node_modules + before_install: + - cd TreePLE-Web + install: + - npm install + script: + - npm run lint + - npm run test + - npm run build + # deploy: + # provider: heroku + # app: treeple-web + # api_key: + # secure: q52c8gOVk6hT9xqzUTxERbDWPvjWJerHxa9wbhd/McB1OwE1OXzXefvG67aIRVrwvOOUT4SbgUlwT/2jfJxSQjDrMo6zliPYAoCp0KRW4JSKPbVF9qSAazVvVE6ncSy6D+ouZ3v9fZJrb8izYh8To5zYsx2lSM0iUAVyGNoFZq3JYxoDB8mwUjd+55JQfwMQI0QkSOAST70Ud78jPGJ863NFxtIaJFO0RtU0LsQJSPh2/n0ALasju10348KXoLh+GUW529Tv2kFWFsQ1r6cf8VJeQNy8oZquL+Hx9TGgFm6yFeX9heFyhNElcvN/LHwYeKmP1Xpm2t+YtEvDI0Hc8if1UnsmFMY8eIxYJ/9SHOvx2CwhNMHuwWKkCITcdyWo0J2A2Qzb7nUUjckwUQUDn813g7viGCADI8ifirQReadCKGvbP6X0UZAf3viaJetEjq1IZyJaMd9GEVFp6zP6yOtLdMft+Qa35fq9p867gjZugav7jux6eVMzELpNgEZ2nPTnzA/PMWbafqXVIFAmvPCcol693TIIaKTmoF/Fos796n1YfujmMUXKiItJoFFXO+QpaUDfEokNc6TVTKZqRcyJJ1eziGPt6gqKMkB9dvgMa53erFhWy2OfLDuQnti2bJXShJNJIzjrei5Ldk5TyJ+7dulA9l7c1/r+JAwcitU= + # on: + # repo: theGirrafish/TreePLE + - + language: java + jdk: + - oraclejdk11 + services: + - postgresql + before_install: + - cd TreePLE-Spring + - psql -c 'create database treeple_test;' -U postgres + script: + - gradle build -x test + - gradle test + # deploy: + # provider: heroku + # app: treeple-api + # api_key: + # secure: ZCfDPll62mwc7WBir0hvejHfttT3ib4UwRT2Z+j6IW5/uarEvf6RVw/1OAjBXXJWTG5H3OE7J16a/caN1qaT45TXHokUeB4uo1dK59rSExdY7aPwYWnVKAEM91nobm9olsh4E7CtSnHvSxh77sIzmB29ebYFHd0ikF8+/AoUrrvH4Yr3e8RcxLgWiy8cAeVxY9NyHmtpV1JhI3E5P2WfbuqRNwFB4q0zbpN0ZuvVmq83/YxUolDOX4gZqqp89r3vviYShTIgljnzP4j4D0DAPuaCIgrQBx8ajbz0cQh7wkYtR+OlaQpLGhtwOy9Ni0NYPGLzVThkjomozHDjZgHRbgwz311PsDtEbWi0ZF4xWdRLdUS4gSzGseEzG9eqcpDkcF3nMcV0uLBiPEngJqEA2eSPfBGrPrj6qrN9D5YMrFy+btfiptXIG20a3+tHpdm6s3SamGOxNhb9/5iOY7JqTmf1e9OxV198D2hvMNRNL28Wus1Ka7lEgOa9oUfrfo0teniwryUV+NF6jan/NXubrGE6EXAv7AMkUpbuwSm7/Me4bEj9DCF3UQvmbHr6VBbdwduaxH6PfrUsfcnFRcOCmw22S9M3K9ucAJlH//KalV++PFpblwJXFF8K9fixtZeMpkatmkSNvtTQsSG6RHi9Hp9NsOj5JfSk9hLeBw3X33c= + # on: + # repo: theGirrafish/TreePLE diff --git a/Documents/Deliverables/Deliverable1.pdf b/Documents/Deliverables/Deliverable1.pdf old mode 100644 new mode 100755 diff --git a/Documents/Deliverables/Deliverable2.pdf b/Documents/Deliverables/Deliverable2.pdf old mode 100644 new mode 100755 diff --git a/Documents/Deliverables/Deliverable3.pdf b/Documents/Deliverables/Deliverable3.pdf old mode 100644 new mode 100755 diff --git a/Documents/Deliverables/Deliverable4.pdf b/Documents/Deliverables/Deliverable4.pdf old mode 100644 new mode 100755 diff --git a/Documents/Meetings Log/Meeting 1.docx b/Documents/Meetings/Meeting1.docx similarity index 100% rename from Documents/Meetings Log/Meeting 1.docx rename to Documents/Meetings/Meeting1.docx diff --git a/Documents/Meetings Log/Meeting 2.docx b/Documents/Meetings/Meeting2.docx similarity index 100% rename from Documents/Meetings Log/Meeting 2.docx rename to Documents/Meetings/Meeting2.docx diff --git a/Documents/Meetings Log/Meeting 3.docx b/Documents/Meetings/Meeting3.docx similarity index 100% rename from Documents/Meetings Log/Meeting 3.docx rename to Documents/Meetings/Meeting3.docx diff --git a/Documents/Meetings Log/Meeting 4.docx b/Documents/Meetings/Meeting4.docx similarity index 100% rename from Documents/Meetings Log/Meeting 4.docx rename to Documents/Meetings/Meeting4.docx diff --git a/Documents/Meetings Log/Meeting 5.docx b/Documents/Meetings/Meeting5.docx similarity index 100% rename from Documents/Meetings Log/Meeting 5.docx rename to Documents/Meetings/Meeting5.docx diff --git a/Documents/Meetings Log/Meeting 6.docx b/Documents/Meetings/Meeting6.docx similarity index 100% rename from Documents/Meetings Log/Meeting 6.docx rename to Documents/Meetings/Meeting6.docx diff --git a/Documents/Meetings Log/Meeting 7.docx b/Documents/Meetings/Meeting7.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Meetings Log/Meeting 7.docx rename to Documents/Meetings/Meeting7.docx diff --git a/Documents/Meetings Log/Meeting 8.docx b/Documents/Meetings/Meeting8.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Meetings Log/Meeting 8.docx rename to Documents/Meetings/Meeting8.docx diff --git a/Documents/Work Plan/Work Plan Week 1.docx b/Documents/WorkPlans/WorkPlanW1.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 1.docx rename to Documents/WorkPlans/WorkPlanW1.docx diff --git a/Documents/Work Plan/Work Plan Week 10.docx b/Documents/WorkPlans/WorkPlanW10.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Work Plan/Work Plan Week 10.docx rename to Documents/WorkPlans/WorkPlanW10.docx diff --git a/Documents/Work Plan/Work Plan Week 2.docx b/Documents/WorkPlans/WorkPlanW2.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 2.docx rename to Documents/WorkPlans/WorkPlanW2.docx diff --git a/Documents/Work Plan/Work Plan Week 3.docx b/Documents/WorkPlans/WorkPlanW3.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 3.docx rename to Documents/WorkPlans/WorkPlanW3.docx diff --git a/Documents/Work Plan/Work Plan Week 4.docx b/Documents/WorkPlans/WorkPlanW4.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 4.docx rename to Documents/WorkPlans/WorkPlanW4.docx diff --git a/Documents/Work Plan/Work Plan Week 5.docx b/Documents/WorkPlans/WorkPlanW5.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 5.docx rename to Documents/WorkPlans/WorkPlanW5.docx diff --git a/Documents/Work Plan/Work Plan Week 6.docx b/Documents/WorkPlans/WorkPlanW6.docx similarity index 100% rename from Documents/Work Plan/Work Plan Week 6.docx rename to Documents/WorkPlans/WorkPlanW6.docx diff --git a/Documents/Work Plan/Work Plan Week 7.docx b/Documents/WorkPlans/WorkPlanW7.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Work Plan/Work Plan Week 7.docx rename to Documents/WorkPlans/WorkPlanW7.docx diff --git a/Documents/Work Plan/Work Plan Week 8.docx b/Documents/WorkPlans/WorkPlanW8.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Work Plan/Work Plan Week 8.docx rename to Documents/WorkPlans/WorkPlanW8.docx diff --git a/Documents/Work Plan/Work Plan Week 9.docx b/Documents/WorkPlans/WorkPlanW9.docx old mode 100644 new mode 100755 similarity index 100% rename from Documents/Work Plan/Work Plan Week 9.docx rename to Documents/WorkPlans/WorkPlanW9.docx diff --git a/Images/APK.PNG b/Images/Android/APK.png old mode 100644 new mode 100755 similarity index 100% rename from Images/APK.PNG rename to Images/Android/APK.png diff --git a/Images/ChangePass.png b/Images/Android/ChangePass.png old mode 100644 new mode 100755 similarity index 100% rename from Images/ChangePass.png rename to Images/Android/ChangePass.png diff --git a/Images/CreateSpecies.png b/Images/Android/CreateSpecies.png old mode 100644 new mode 100755 similarity index 100% rename from Images/CreateSpecies.png rename to Images/Android/CreateSpecies.png diff --git a/Images/FirstScreen.png b/Images/Android/FirstScreen.png old mode 100644 new mode 100755 similarity index 100% rename from Images/FirstScreen.png rename to Images/Android/FirstScreen.png diff --git a/Images/PlantTree.png b/Images/Android/PlantTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/PlantTree.png rename to Images/Android/PlantTree.png diff --git a/Images/SignUpResident.png b/Images/Android/SignUpResident.png old mode 100644 new mode 100755 similarity index 100% rename from Images/SignUpResident.png rename to Images/Android/SignUpResident.png diff --git a/Images/SignUpScientist.png b/Images/Android/SignUpScientist.png old mode 100644 new mode 100755 similarity index 100% rename from Images/SignUpScientist.png rename to Images/Android/SignUpScientist.png diff --git a/Images/UpdateTree.png b/Images/Android/UpdateTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/UpdateTree.png rename to Images/Android/UpdateTree.png diff --git a/Images/ViewTree.png b/Images/Android/ViewTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/ViewTree.png rename to Images/Android/ViewTree.png diff --git a/Images/CoverageReport.png b/Images/CoverageReport.png old mode 100644 new mode 100755 diff --git a/Images/M1.PNG b/Images/M1.png old mode 100644 new mode 100755 similarity index 100% rename from Images/M1.PNG rename to Images/M1.png diff --git a/Images/M2.PNG b/Images/M2.png old mode 100644 new mode 100755 similarity index 100% rename from Images/M2.PNG rename to Images/M2.png diff --git a/Images/M3.PNG b/Images/M3.png old mode 100644 new mode 100755 similarity index 100% rename from Images/M3.PNG rename to Images/M3.png diff --git a/Images/M4.PNG b/Images/M4.png old mode 100644 new mode 100755 similarity index 100% rename from Images/M4.PNG rename to Images/M4.png diff --git a/Images/M5.PNG b/Images/M5.png old mode 100644 new mode 100755 similarity index 100% rename from Images/M5.PNG rename to Images/M5.png diff --git a/Images/treeple_logo.png b/Images/TreepleLogo.png old mode 100644 new mode 100755 similarity index 100% rename from Images/treeple_logo.png rename to Images/TreepleLogo.png diff --git a/Images/WP1.PNG b/Images/WP1.png old mode 100644 new mode 100755 similarity index 100% rename from Images/WP1.PNG rename to Images/WP1.png diff --git a/Images/WP2.PNG b/Images/WP2.png old mode 100644 new mode 100755 similarity index 100% rename from Images/WP2.PNG rename to Images/WP2.png diff --git a/Images/WP3.PNG b/Images/WP3.png old mode 100644 new mode 100755 similarity index 100% rename from Images/WP3.PNG rename to Images/WP3.png diff --git a/Images/WP4.PNG b/Images/WP4.png old mode 100644 new mode 100755 similarity index 100% rename from Images/WP4.PNG rename to Images/WP4.png diff --git a/Images/WP5.PNG b/Images/WP5.png old mode 100644 new mode 100755 similarity index 100% rename from Images/WP5.PNG rename to Images/WP5.png diff --git a/Images/AttributesWeb.PNG b/Images/Web/Attributes.png old mode 100644 new mode 100755 similarity index 100% rename from Images/AttributesWeb.PNG rename to Images/Web/Attributes.png diff --git a/Images/FirstScreenWeb.PNG b/Images/Web/FirstScreen.png old mode 100644 new mode 100755 similarity index 100% rename from Images/FirstScreenWeb.PNG rename to Images/Web/FirstScreen.png diff --git a/Images/ForecastWeb.PNG b/Images/Web/Forecast.png old mode 100644 new mode 100755 similarity index 100% rename from Images/ForecastWeb.PNG rename to Images/Web/Forecast.png diff --git a/Images/HoverWindowWeb.PNG b/Images/Web/HoverWindow.png old mode 100644 new mode 100755 similarity index 100% rename from Images/HoverWindowWeb.PNG rename to Images/Web/HoverWindow.png diff --git a/Images/MunicipalityView.PNG b/Images/Web/MunicipalityView.png old mode 100644 new mode 100755 similarity index 100% rename from Images/MunicipalityView.PNG rename to Images/Web/MunicipalityView.png diff --git a/Images/CreateTreeWeb.PNG b/Images/Web/PlantTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/CreateTreeWeb.PNG rename to Images/Web/PlantTree.png diff --git a/Images/SSL.png b/Images/Web/SSL.png old mode 100644 new mode 100755 similarity index 100% rename from Images/SSL.png rename to Images/Web/SSL.png diff --git a/Images/SignInWeb.PNG b/Images/Web/SignIn.png old mode 100644 new mode 100755 similarity index 100% rename from Images/SignInWeb.PNG rename to Images/Web/SignIn.png diff --git a/Images/RegisterWeb.PNG b/Images/Web/SignUp.png old mode 100644 new mode 100755 similarity index 100% rename from Images/RegisterWeb.PNG rename to Images/Web/SignUp.png diff --git a/Images/UpdateTreeWeb.PNG b/Images/Web/UpdateTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/UpdateTreeWeb.PNG rename to Images/Web/UpdateTree.png diff --git a/Images/ViewTreeWeb.PNG b/Images/Web/ViewTree.png old mode 100644 new mode 100755 similarity index 100% rename from Images/ViewTreeWeb.PNG rename to Images/Web/ViewTree.png diff --git a/README.md b/README.md index 25b8b09..282a4dc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## TreePLE As the core functionality, the TreePLE system allows to manage trees in an urban environment. -TreePLE enables forecasting to analyze sustainability attributes in what-if scenarios to help implement a plan for urban forest management by scientists and urban foresters. See the [wiki](https://github.mcgill.ca/ECSE321-2018-Winter/Project-11/wiki) for additional info. +TreePLE enables forecasting to analyze sustainability attributes in what-if scenarios to help implement a plan for urban forest management by scientists and urban foresters. See the [wiki](../../wiki) for additional info. ## Contributors @@ -12,12 +12,12 @@ TreePLE enables forecasting to analyze sustainability attributes in what-if scen * Yunus Can Cukran - 260669715 * Gareth Peters - 260678626 -## Notes on creating users +## Notes on Creating Users In order to create a user with the role of Scientist, we require an extra password for security purposes. For testing purposes, this password is "i<3tr33s". ## URLs -Backend: [ecse321-11.ece.mcgill.ca:8080](http://ecse321-11.ece.mcgill.ca:8080) +Backend: [https://treeple-api.herokuapp.com](https://treeple-api.herokuapp.com) -Web Frontend: [ecse321-11.ece.mcgill.ca:8087](http://ecse321-11.ece.mcgill.ca:8087) +Web Frontend: [https://treeple-web.herokuapp.com](https://treeple-web.herokuapp.com) diff --git a/TreePLE-Android/.idea/caches/build_file_checksums.ser b/TreePLE-Android/.idea/caches/build_file_checksums.ser deleted file mode 100644 index 8eb925c..0000000 Binary files a/TreePLE-Android/.idea/caches/build_file_checksums.ser and /dev/null differ diff --git a/TreePLE-Android/.idea/codeStyles/Project.xml b/TreePLE-Android/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626..0000000 --- a/TreePLE-Android/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/.idea/gradle.xml b/TreePLE-Android/.idea/gradle.xml deleted file mode 100644 index 7ac24c7..0000000 --- a/TreePLE-Android/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/.idea/misc.xml b/TreePLE-Android/.idea/misc.xml deleted file mode 100644 index 3963879..0000000 --- a/TreePLE-Android/.idea/misc.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/.idea/modules.xml b/TreePLE-Android/.idea/modules.xml deleted file mode 100644 index ee55dae..0000000 --- a/TreePLE-Android/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/.idea/runConfigurations.xml b/TreePLE-Android/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/TreePLE-Android/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/.idea/vcs.xml b/TreePLE-Android/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/TreePLE-Android/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/TreePLE-Android/app/src/main/java/ca/mcgill/ecse321/treeple/utils/VolleyController.java b/TreePLE-Android/app/src/main/java/ca/mcgill/ecse321/treeple/utils/VolleyController.java index fdc28ef..a8f657a 100644 --- a/TreePLE-Android/app/src/main/java/ca/mcgill/ecse321/treeple/utils/VolleyController.java +++ b/TreePLE-Android/app/src/main/java/ca/mcgill/ecse321/treeple/utils/VolleyController.java @@ -21,7 +21,7 @@ public class VolleyController { private Context mContext; //Backend URL - public static final String DEFAULT_BASE_URL = "http://ecse321-11.ece.mcgill.ca:8080/"; + public static final String DEFAULT_BASE_URL = "https://treeple-api.herokuapp.com/"; private VolleyController(Context context) { mContext = context.getApplicationContext(); diff --git a/TreePLE-Android/build.gradle b/TreePLE-Android/build.gradle index 527790e..b94b16f 100644 --- a/TreePLE-Android/build.gradle +++ b/TreePLE-Android/build.gradle @@ -1,17 +1,10 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { - repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.1' - - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } } @@ -22,7 +15,3 @@ allprojects { mavenCentral() } } - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/TreePLE-Android/deployment/deploy.sh b/TreePLE-Android/deployment/deploy.sh deleted file mode 100644 index 3126e46..0000000 --- a/TreePLE-Android/deployment/deploy.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -exitStatus () { - if [ $1 -ne 0 ]; then - exit $1 - fi -} - -echo "rm -f /opt/tomcat/TreePLE-Android/*-release-signed.apk" -rm -f /opt/tomcat/TreePLE-Android/*-release-signed.apk -exitStatus $? - -echo "cp -f $1/TreePLE-Android/app/build/outputs/apk/release/*-release-signed.apk /opt/tomcat/TreePLE-Android/TreePLE.apk" -cp -f $1/TreePLE-Android/app/build/outputs/apk/release/*-release-signed.apk /opt/tomcat/TreePLE-Android/TreePLE.apk -exitStatus $? - -echo "chown tomcat -R /opt/tomcat/TreePLE-Android/" -chown tomcat -R /opt/tomcat/TreePLE-Android/ -exitStatus $? - diff --git a/TreePLE-Android/gradle.properties b/TreePLE-Android/gradle.properties index aac7c9b..be36c4c 100644 --- a/TreePLE-Android/gradle.properties +++ b/TreePLE-Android/gradle.properties @@ -1,17 +1,5 @@ # Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true diff --git a/TreePLE-Android/gradle/wrapper/gradle-wrapper.jar b/TreePLE-Android/gradle/wrapper/gradle-wrapper.jar index 13372ae..28861d2 100644 Binary files a/TreePLE-Android/gradle/wrapper/gradle-wrapper.jar and b/TreePLE-Android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/TreePLE-Android/gradle/wrapper/gradle-wrapper.properties b/TreePLE-Android/gradle/wrapper/gradle-wrapper.properties index c819288..44e7c4d 100644 --- a/TreePLE-Android/gradle/wrapper/gradle-wrapper.properties +++ b/TreePLE-Android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Mar 27 00:00:11 EDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/TreePLE-Android/settings.gradle b/TreePLE-Android/settings.gradle index e7b4def..3e6188c 100644 --- a/TreePLE-Android/settings.gradle +++ b/TreePLE-Android/settings.gradle @@ -1 +1,3 @@ -include ':app' +include 'app' + +rootProject.name='TreePLE-Android' diff --git a/TreePLE-Spring/.gitignore b/TreePLE-Spring/.gitignore index 6a5051f..dcc7e6f 100644 --- a/TreePLE-Spring/.gitignore +++ b/TreePLE-Spring/.gitignore @@ -1,5 +1,3 @@ -.gradle -.vscode /build/ /bin/ /output/ diff --git a/TreePLE-Spring/.metadata/.log b/TreePLE-Spring/.metadata/.log deleted file mode 100644 index 4bbc5d1..0000000 --- a/TreePLE-Spring/.metadata/.log +++ /dev/null @@ -1,230 +0,0 @@ -!SESSION 2018-01-28 03:39:06.809 ----------------------------------------------- -eclipse.buildId=4.7.1.M20171009-0410 -java.version=1.8.0_151 -java.vendor=Oracle Corporation -BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_CA -Framework arguments: -product org.eclipse.epp.package.modeling.product -Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.modeling.product - -!ENTRY org.eclipse.jface 2 0 2018-01-28 03:39:56.220 -!MESSAGE Keybinding conflicts occurred. They may interfere with normal accelerator operation. -!SUBENTRY 1 org.eclipse.jface 2 0 2018-01-28 03:39:56.220 -!MESSAGE A conflict occurred for CTRL+SHIFT+T: -Binding(CTRL+SHIFT+T, - ParameterizedCommand(Command(org.eclipse.jdt.ui.navigate.open.type,Open Type, - Open a type in a Java editor, - Category(org.eclipse.ui.category.navigate,Navigate,null,true), - org.eclipse.ui.internal.WorkbenchHandlerServiceHandler@24032706, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.contexts.window,,,system) -Binding(CTRL+SHIFT+T, - ParameterizedCommand(Command(org.eclipse.lsp4e.symbolinworkspace,Go to Symbol in Workspace, - , - Category(org.eclipse.lsp4e.category,Language Servers,null,true), - org.eclipse.ui.internal.WorkbenchHandlerServiceHandler@3e455d01, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.contexts.window,,,system) - -!ENTRY org.eclipse.wst.common.project.facet.core 4 0 2018-01-28 03:40:19.070 -!MESSAGE Project facet jst.web has not been defined. It is used in plugin org.eclipse.jst.j2ee. - -!ENTRY org.eclipse.wst.common.project.facet.core 4 0 2018-01-28 03:40:19.093 -!MESSAGE Project facet jst.webfragment has not been defined. It is used in plugin org.eclipse.jst.j2ee. - -!ENTRY org.eclipse.ui.ide 4 0 2018-01-28 03:41:46.962 -!MESSAGE Could not import project located at /home/student/git/TreePLE/TreePLE-Spring -!STACK 0 -org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at /home/student/git/TreePLE/TreePLE-Spring - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:557) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:250) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) -Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. - at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:169) - at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:53) - at org.eclipse.core.internal.resources.Project.create(Project.java:263) - at org.eclipse.core.internal.resources.Project.create(Project.java:247) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:596) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:544) - ... 2 more - -!ENTRY org.eclipse.ui.ide 4 0 2018-01-28 03:42:26.250 -!MESSAGE Could not import project located at /home/student/git/TreePLE/TreePLE-Spring -!STACK 0 -org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at /home/student/git/TreePLE/TreePLE-Spring - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:557) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:250) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) -Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. - at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:169) - at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:53) - at org.eclipse.core.internal.resources.Project.create(Project.java:263) - at org.eclipse.core.internal.resources.Project.create(Project.java:247) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:596) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:544) - ... 2 more -!SESSION 2018-03-15 20:18:24.168 ----------------------------------------------- -eclipse.buildId=4.7.1.M20171009-0410 -java.version=1.8.0_151 -java.vendor=Oracle Corporation -BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_CA -Framework arguments: -product org.eclipse.epp.package.modeling.product -Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.modeling.product - -!ENTRY org.eclipse.jface 2 0 2018-03-15 20:21:30.230 -!MESSAGE Keybinding conflicts occurred. They may interfere with normal accelerator operation. -!SUBENTRY 1 org.eclipse.jface 2 0 2018-03-15 20:21:30.230 -!MESSAGE A conflict occurred for CTRL+SHIFT+T: -Binding(CTRL+SHIFT+T, - ParameterizedCommand(Command(org.eclipse.jdt.ui.navigate.open.type,Open Type, - Open a type in a Java editor, - Category(org.eclipse.ui.category.navigate,Navigate,null,true), - org.eclipse.ui.internal.WorkbenchHandlerServiceHandler@30ffc3c0, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.contexts.window,,,system) -Binding(CTRL+SHIFT+T, - ParameterizedCommand(Command(org.eclipse.lsp4e.symbolinworkspace,Go to Symbol in Workspace, - , - Category(org.eclipse.lsp4e.category,Language Servers,null,true), - org.eclipse.ui.internal.WorkbenchHandlerServiceHandler@76b8b6a6, - ,,true),null), - org.eclipse.ui.defaultAcceleratorConfiguration, - org.eclipse.ui.contexts.window,,,system) - -!ENTRY org.eclipse.wst.common.project.facet.core 4 0 2018-03-15 20:22:16.957 -!MESSAGE Project facet jst.web has not been defined. It is used in plugin org.eclipse.jst.j2ee. - -!ENTRY org.eclipse.wst.common.project.facet.core 4 0 2018-03-15 20:22:17.274 -!MESSAGE Project facet jst.webfragment has not been defined. It is used in plugin org.eclipse.jst.j2ee. - -!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-03-15 20:22:29.213 -!MESSAGE -!STACK 0 -java.lang.NullPointerException - at org.springsource.ide.eclipse.commons.browser.swt.StsBrowserEditor.createPartControl(StsBrowserEditor.java:89) - at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151) - at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:99) - at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:355) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) - at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990) - at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955) - at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124) - at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399) - at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318) - at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162) - at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105) - at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74) - at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56) - at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:992) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:661) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:767) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:738) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:732) - at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:716) - at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:104) - at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40) - at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233) - at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:144) - at org.eclipse.swt.widgets.Display.syncExec(Display.java:5455) - at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:212) - at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36) - at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201) - at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197) - at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) - at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) - at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) - at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135) - at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78) - at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39) - at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:52) - at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60) - at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374) - at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:173) - at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:620) - at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:584) - at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:769) - at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:401) - at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1188) - at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3261) - at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3176) - at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3158) - at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) - at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3153) - at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3117) - at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3098) - at org.springsource.ide.eclipse.dashboard.ui.actions.ShowDashboardPageAction$1.runInUIThread(ShowDashboardPageAction.java:77) - at org.eclipse.ui.progress.UIJob.lambda$0(UIJob.java:95) - at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37) - at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) - at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4497) - at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4110) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150) - at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) - at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039) - at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153) - at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680) - at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) - at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594) - at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) - at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151) - at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) - at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) - at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) - at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) - at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.lang.reflect.Method.invoke(Method.java:498) - at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) - at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) - at org.eclipse.equinox.launcher.Main.run(Main.java:1499) - at org.eclipse.equinox.launcher.Main.main(Main.java:1472) - -!ENTRY org.apache.log4j 2 0 2018-03-15 20:22:32.921 -!MESSAGE org.springsource.ide.eclipse.commons.core.templates.TemplateProcessor - May have failed to replace token //window.ide 'dummy'. Replaced/injected later by STS browser integration. - - -!ENTRY org.apache.log4j 2 0 2018-03-15 20:22:32.923 -!MESSAGE org.springsource.ide.eclipse.commons.core.templates.TemplateProcessor - May have failed to replace token //The dummy helps preview/test the page in an external browser. - - -!ENTRY org.eclipse.ui.ide 4 0 2018-03-15 20:27:53.352 -!MESSAGE Could not import project located at /home/student/Project/Project-11/TreePLE-Spring -!STACK 0 -org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at /home/student/Project/Project-11/TreePLE-Spring - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:557) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:250) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) -Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. - at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:169) - at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:53) - at org.eclipse.core.internal.resources.Project.create(Project.java:263) - at org.eclipse.core.internal.resources.Project.create(Project.java:247) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:596) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:544) - ... 2 more - -!ENTRY org.eclipse.ui.ide 4 0 2018-03-15 20:30:06.974 -!MESSAGE Could not import project located at /home/student/Project/Project-11/TreePLE-Spring -!STACK 0 -org.eclipse.ui.internal.wizards.datatransfer.CouldNotImportProjectException: Could not import project located at /home/student/Project/Project-11/TreePLE-Spring - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:557) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.run(SmartImportJob.java:250) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) -Caused by: org.eclipse.core.internal.resources.ResourceException: Invalid project description. - at org.eclipse.core.internal.resources.Project.checkDescription(Project.java:169) - at org.eclipse.core.internal.resources.Project.assertCreateRequirements(Project.java:53) - at org.eclipse.core.internal.resources.Project.create(Project.java:263) - at org.eclipse.core.internal.resources.Project.create(Project.java:247) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.createOrImportProject(SmartImportJob.java:596) - at org.eclipse.ui.internal.wizards.datatransfer.SmartImportJob.toExistingOrNewProject(SmartImportJob.java:544) - ... 2 more diff --git a/TreePLE-Spring/.metadata/.mylyn/.taskListIndex/segments_1 b/TreePLE-Spring/.metadata/.mylyn/.taskListIndex/segments_1 deleted file mode 100644 index d32dc7b..0000000 Binary files a/TreePLE-Spring/.metadata/.mylyn/.taskListIndex/segments_1 and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.mylyn/.taskListIndex/write.lock b/TreePLE-Spring/.metadata/.mylyn/.taskListIndex/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.mylyn/repositories.xml.zip b/TreePLE-Spring/.metadata/.mylyn/repositories.xml.zip deleted file mode 100644 index a848de9..0000000 Binary files a/TreePLE-Spring/.metadata/.mylyn/repositories.xml.zip and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.mylyn/tasks.xml.zip b/TreePLE-Spring/.metadata/.mylyn/tasks.xml.zip deleted file mode 100644 index f948edd..0000000 Binary files a/TreePLE-Spring/.metadata/.mylyn/tasks.xml.zip and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version deleted file mode 100644 index 25cb955..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index deleted file mode 100644 index d81a528..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version deleted file mode 100644 index 6b2aaa7..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources deleted file mode 100644 index 93aeef7..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/TreePLE-Spring/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi deleted file mode 100644 index 0e43de3..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi +++ /dev/null @@ -1,3142 +0,0 @@ - - - - activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration - ModelMigrationProcessor.001 - - - - - - - - topLevel - shellMaximized - - - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:ajrefactoring - persp.actionSet:org.eclipse.contribution.xref.ui.XRefActionSet - persp.actionSet:org.springframework.ide.eclipse.aop.ui.ActionSet - persp.actionSet:org.springframework.ide.eclipse.aop.ui.matcher.actionSet - persp.actionSet:org.springframework.ide.eclipse.beans.ui.actionSet - persp.actionSet:org.springframework.ide.eclipse.beans.search.actionSet - persp.actionSet:org.springsource.ide.eclipse.quicksearch.actionSet - persp.actionSet:org.springsource.ide.eclipse.commons.launch.actionSet - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.newWizSC:org.eclipse.sirius.ui.modelingproject.wizard - persp.newWizSC:org.eclipse.sirius.ui.session.creation - persp.viewSC:org.eclipse.sirius.ui.tools.views.model.explorer - persp.viewSC:org.eclipse.ui.views.PropertySheet - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.ProblemView - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.newWizSC:org.eclipse.ecoretools.emf.design.wizardID - - - - noFocus - - - - - - - - - - - - - - - - - - persp.actionSet:org.eclipse.mylyn.doc.actionSet - persp.actionSet:org.eclipse.mylyn.tasks.ui.navigation - persp.actionSet:org.eclipse.ui.cheatsheets.actionSet - persp.actionSet:org.eclipse.search.searchActionSet - persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation - persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo - persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet - persp.actionSet:org.eclipse.ui.actionSet.keyBindings - persp.actionSet:org.eclipse.ui.actionSet.openFiles - persp.actionSet:ajrefactoring - persp.actionSet:org.eclipse.contribution.xref.ui.XRefActionSet - persp.actionSet:org.springframework.ide.eclipse.aop.ui.ActionSet - persp.actionSet:org.springframework.ide.eclipse.aop.ui.matcher.actionSet - persp.actionSet:org.springframework.ide.eclipse.beans.ui.actionSet - persp.actionSet:org.springframework.ide.eclipse.beans.search.actionSet - persp.actionSet:org.springsource.ide.eclipse.quicksearch.actionSet - persp.actionSet:org.springsource.ide.eclipse.commons.launch.actionSet - persp.actionSet:org.eclipse.debug.ui.launchActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaActionSet - persp.actionSet:org.eclipse.jdt.ui.JavaElementCreationActionSet - persp.actionSet:org.eclipse.ui.NavigateActionSet - persp.viewSC:org.eclipse.jdt.ui.PackageExplorer - persp.viewSC:org.eclipse.jdt.ui.TypeHierarchy - persp.viewSC:org.eclipse.jdt.ui.SourceView - persp.viewSC:org.eclipse.jdt.ui.JavadocView - persp.viewSC:org.eclipse.search.ui.views.SearchView - persp.viewSC:org.eclipse.ui.console.ConsoleView - persp.viewSC:org.eclipse.ui.views.ContentOutline - persp.viewSC:org.eclipse.ui.views.ProblemView - persp.viewSC:org.eclipse.ui.views.ResourceNavigator - persp.viewSC:org.eclipse.ui.views.TaskList - persp.viewSC:org.eclipse.ui.views.ProgressView - persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer - persp.viewSC:org.eclipse.ui.texteditor.TemplatesView - persp.viewSC:org.eclipse.pde.runtime.LogView - persp.newWizSC:org.eclipse.jdt.ui.wizards.JavaProjectWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewPackageCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewClassCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewInterfaceCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewEnumCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewAnnotationCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSourceFolderCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewSnippetFileCreationWizard - persp.newWizSC:org.eclipse.jdt.ui.wizards.NewJavaWorkingSetWizard - persp.newWizSC:org.eclipse.ui.wizards.new.folder - persp.newWizSC:org.eclipse.ui.wizards.new.file - persp.newWizSC:org.eclipse.ui.editors.wizards.UntitledTextFileWizard - persp.perspSC:org.eclipse.jdt.ui.JavaBrowsingPerspective - persp.perspSC:org.eclipse.debug.ui.DebugPerspective - persp.showIn:org.eclipse.ui.navigator.ProjectExplorer - persp.showIn:org.springframework.ide.eclipse.ui.navigator.springExplorer - persp.viewSC:org.springframework.ide.eclipse.ui.navigator.springExplorer - persp.newWizSC:org.springframework.ide.eclipse.beans.ui.wizards.newBeansConfig - persp.viewSC:org.springframework.ide.eclipse.aop.ui.navigator.aopReferenceModelNavigator - persp.viewSC:org.springframework.ide.eclipse.aop.ui.tracing.eventTraceView - persp.newWizSC:org.springframework.ide.eclipse.webflow.ui.wizard.newWebflowConfigWizard - persp.viewSC:org.eclipse.mylyn.tasks.ui.views.tasks - persp.newWizSC:org.eclipse.mylyn.tasks.ui.wizards.new.repository.task - persp.showIn:org.eclipse.jdt.ui.PackageExplorer - persp.showIn:org.eclipse.team.ui.GenericHistoryView - persp.showIn:org.eclipse.ui.views.ResourceNavigator - persp.newWizSC:org.eclipse.m2e.core.wizards.Maven2ProjectWizard - persp.newWizSC:org.springsource.ide.eclipse.commons.gettingstarted.wizard.boot.NewSpringBootWizard - persp.newWizSC:org.springsource.ide.eclipse.gettingstarted.wizards.import.generic.newalias - persp.actionSet:org.eclipse.debug.ui.breakpointActionSet - persp.actionSet:org.eclipse.jdt.debug.ui.JDTDebugActionSet - persp.newWizSC:org.eclipse.jdt.junit.wizards.NewTestCaseCreationWizard - persp.actionSet:org.eclipse.jdt.junit.JUnitActionSet - persp.showIn:org.eclipse.egit.ui.RepositoriesView - persp.newWizSC:com.springsource.sts.wizard.template - persp.viewSC:org.eclipse.ant.ui.views.AntView - persp.actionSet:ajelementCreation - persp.newWizSC:ajaspectwizard - persp.newWizSC:ajprojectwizard - persp.perspSC:org.eclipse.ajdt.ui.visualiser.AspectVisualizationPerspective - - - - org.eclipse.e4.primaryNavigationStack - active - noFocus - - - - - - - - - - - - - - - - - - - - - - org.eclipse.e4.secondaryNavigationStack - - - - - - - - - - - - - - - - - - - - org.eclipse.e4.secondaryDataStack - - - - - - - - - - - - - - - - - - - - - - View - categoryTag:Help - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:Help - - - - org.eclipse.e4.primaryDataStack - EditorStack - - - - - - View - categoryTag:Sirius - - ViewMenu - menuContribution:menu - - - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - - View - categoryTag:General - - ViewMenu - menuContribution:menu - - - - - - - - View - categoryTag:Java - active - activeOnClose - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:Java - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - - View - categoryTag:Spring - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:Spring - - - - - - View - categoryTag:Mylyn - - ViewMenu - menuContribution:menu - - - - - - - View - categoryTag:AspectJ - - - - - View - categoryTag:Java - - - - - View - categoryTag:Git - - - - - View - categoryTag:Ant - - - - toolbarSeparator - - - - Draggable - - - - toolbarSeparator - - - - Draggable - - - Draggable - - - Draggable - - - toolbarSeparator - - - - Draggable - - - - toolbarSeparator - - - - toolbarSeparator - - - - Draggable - - - stretch - SHOW_RESTORE_MENU - - - Draggable - HIDEABLE - SHOW_RESTORE_MENU - - - - - stretch - - - Draggable - - - Draggable - - - - - Draggable - - - - - - TrimStack - Draggable - - - - - - - - - - - - - - - - - - - - - - - - - - - platform:gtk - - - - - - - - - - - platform:gtk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - platform:gtk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - platform:gtk - - - - - - platform:gtk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Editor - - - - - View - categoryTag:Other - - - - - View - categoryTag:Amalgam - - - - - View - categoryTag:Ant - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:Git - - - - - View - categoryTag:CDO - - - - - View - categoryTag:CDO - - - - - View - categoryTag:CDO - - - - - View - categoryTag:CDO - - - - - View - categoryTag:CDO - - - - - View - categoryTag:CDO - - - - - View - categoryTag:EMF Compare - - - - - View - categoryTag:Ecore Tools - - - - - View - categoryTag:Ecore Tools - - - - - View - categoryTag:ECP Views - - - - - View - categoryTag:ECP Views - - - - - View - categoryTag:ECP Views - - - - - View - categoryTag:EMF Forms - - - - - View - categoryTag:EMFStore Views - - - - - View - categoryTag:General - - - - - View - categoryTag:Help - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java Browsing - - - - - View - categoryTag:Java - - - - - View - categoryTag:General - - - - - View - categoryTag:Java - - - - - View - categoryTag:Java - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Mylyn - - - - - View - categoryTag:Debug - - - - - View - categoryTag:Net4j - - - - - View - categoryTag:Net4j - - - - - View - categoryTag:Net4j Debug - - - - - View - categoryTag:Net4j Debug - - - - - View - categoryTag:Oomph - - - - - View - categoryTag:API Tools - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:Plug-in Development - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Sirius Profiler - - - - - View - categoryTag:Sirius - - - - - View - categoryTag:CVS - - - - - View - categoryTag:CVS - - - - - View - categoryTag:Team - - - - - View - categoryTag:Team - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:Help - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:General - - - - - View - categoryTag:AspectJ - - - - - View - categoryTag:Visualiser - - - - - View - categoryTag:Visualiser - - - - - View - categoryTag:AspectJ - - - - - View - categoryTag:Maven - - - - - View - categoryTag:Maven - - - - - View - categoryTag:General - - - - - View - categoryTag:Server - - - - - View - categoryTag:XML - - - - - View - categoryTag:XML - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Spring - - - - - View - categoryTag:Gradle - - - - - View - categoryTag:Gradle - - - - - - - glue - move_after:PerspectiveSpacer - SHOW_RESTORE_MENU - - - move_after:Spacer Glue - HIDEABLE - SHOW_RESTORE_MENU - - - glue - move_after:SearchField - SHOW_RESTORE_MENU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/http-cache.lucene60/segments_1 b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/http-cache.lucene60/segments_1 deleted file mode 100644 index 43521ba..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/http-cache.lucene60/segments_1 and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/http-cache.lucene60/write.lock b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/http-cache.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfe b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfe deleted file mode 100644 index 50532c4..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfe and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfs b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfs deleted file mode 100644 index e71aa36..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.cfs and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.si b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.si deleted file mode 100644 index 9af195c..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/_0.si and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/segments_1 b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/segments_1 deleted file mode 100644 index 0867722..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/segments_1 and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/write.lock b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/local-history.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/server-config.json b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/server-config.json deleted file mode 100644 index e84bcc1..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/com.genuitec.eclipse.aeri.server1/server-config.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "version": "v1", - "title": "Spring IDE", - "timestamp": 1521159739212, - "ttl": 10080, - "helpUrl": "https://aer.ctrlflow.com/spring-ide/help", - "feedbackUrl": "https://www.codetrails.com/error-analytics/", - "aboutUrl": "https://www.codetrails.com/error-analytics/", - "submitUrl": "https://aer.ctrlflow.com/spring-ide/community/new", - "maxReportSize": 524288, - "problemsUrl": "https://aer.ctrlflow.com/downloads/spring-ide/problems.zip", - "problemsTtl": 20160, - "interestUrl": "https://aer.ctrlflow.com/spring-ide/community/interest", - "connectTimeout": 5, - "socketTimeout": 10, - "acceptedProducts": [ - "*" - ], - "acceptedPlugins": [ - "*" - ], - "acceptedPackages": [ - "ch.qos.*", - "com.sun.*", - "java.*", - "javafx.*", - "javax.*", - "org.apache.*", - "org.eclipse.*", - "org.osgi.*", - "org.slf4j.*", - "org.springframework.*", - "sun.*" - ], - "requiredPackages": [ - "org.springframework.*" - ], - "acceptOtherPackages": true, - "acceptUiFreezes": true, - "ignoredStatuses": [ - ":java.net.*:" - ], - "problemsZipLastDownloadTimestamp": 0 -} \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 deleted file mode 100644 index 8c8cd79..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/segments_1 and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/write.lock b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/http-cache.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe deleted file mode 100644 index 9b33091..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfe and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs deleted file mode 100644 index d267c22..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.cfs and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si deleted file mode 100644 index fa44dee..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/_0.si and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 deleted file mode 100644 index d6b1046..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/segments_1 and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/write.lock b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/local-history.lucene60/write.lock deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json b/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json deleted file mode 100644 index 0d09e8b..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.epp.logging.aeri.ide/org.eclipse.epp.logging.aeri.ide.server/server-config.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "version": "v1", - "title": "Eclipse", - "timestamp": 1521159739103, - "ttl": 10080, - "helpUrl": "https://dev.eclipse.org/recommenders/community/aeri/v2/help/", - "feedbackUrl": "https://www.codetrails.com/error-analytics/", - "aboutUrl": "https://wiki.eclipse.org/EPP/Logging", - "submitUrl": "https://dev.eclipse.org/recommenders/community/confess/0.6/reports/", - "maxReportSize": 262144, - "problemsUrl": "https://www.eclipse.org/downloads/download.php?r\u003d1\u0026file\u003d/technology/epp/logging/problems.zip", - "problemsTtl": 20160, - "interestUrl": "https://dev.eclipse.org/recommenders/community/confess/v2/interest", - "connectTimeout": 10, - "socketTimeout": 10, - "acceptedProducts": [ - "org.eclipse.*", - "org.fordiac.*" - ], - "acceptedPlugins": [ - "org.apache.log4j.*", - "org.eclipse.*", - "org.fordiac.*" - ], - "acceptedPackages": [ - "ch.qos.*", - "com.cforcoding.*", - "com.google.*", - "com.gradleware.tooling.*", - "com.mountainminds.eclemma.*", - "com.naef.*", - "com.sun.*", - "java.*", - "javafx.*", - "javax.*", - "org.apache.*", - "org.eclipse.*", - "org.fordiac.*", - "org.gradle.*", - "org.jacoco.*", - "org.osgi.*", - "org.slf4j.*", - "sun.*" - ], - "requiredPackages": [ - "com.cforcoding.*", - "com.gradleware.tooling.*", - "com.mountainminds.eclemma.*", - "com.naef.*", - "org.eclipse.*", - "org.fordiac.*", - "org.gradle.*", - "org.jacoco.*" - ], - "acceptOtherPackages": false, - "acceptUiFreezes": true, - "ignoredStatuses": [ - ":java.io.IOException:There is not enough space on the disk", - ":java.net.*:", - "org.eclipse.core.filesystem::Could not delete*", - "org.eclipse.core.filesystem::Could not move*", - "org.eclipse.core.resources:org.eclipse.core.internal.resources.ResourceException:Resource is out of sync with the file system*", - "org.eclipse.core.runtime::Invalid input url*", - "org.eclipse.epp.mpc.ui:java.io.IOException:", - "org.eclipse.equinox.p2.*::", - "org.eclipse.jface:java.io.IOException:Unable to resolve plug-in*", - "org.eclipse.oomph.setup.core:$org.apache.http.ConnectionClosedException:", - "org.eclipse.pde.core::The current target platform contains errors*", - "org.eclipse.ui::Conflicting handlers for*" - ], - "problemsZipLastDownloadTimestamp": 0 -} \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache deleted file mode 100644 index 593f470..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache deleted file mode 100644 index 593f470..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/index.db b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/index.db deleted file mode 100644 index e69de29..0000000 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt deleted file mode 100644 index 4644f71..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt +++ /dev/null @@ -1,2 +0,0 @@ -aj -java \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache deleted file mode 100644 index 593f470..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat deleted file mode 100644 index 0fe3ecb..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml deleted file mode 100644 index 1865a35..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml deleted file mode 100644 index d98b1b6..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml deleted file mode 100644 index a4ee3cb..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml deleted file mode 100644 index 9e390f5..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml deleted file mode 100644 index a2b93db..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml +++ /dev/null @@ -1,12 +0,0 @@ - -
-
- - - - - -
-
-
-
diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup b/TreePLE-Spring/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup deleted file mode 100644 index 1f73e14..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties b/TreePLE-Spring/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties deleted file mode 100644 index a8046de..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.pde.core/.cache/clean-cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Cached timestamps -#Thu Mar 15 20:51:13 EDT 2018 diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml deleted file mode 100644 index 23869ed..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ /dev/null @@ -1,9 +0,0 @@ - -
- - - - -
-
-
diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml deleted file mode 100644 index f118f02..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml +++ /dev/null @@ -1,4 +0,0 @@ - -
- -
diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml deleted file mode 100644 index c008601..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ /dev/null @@ -1,19 +0,0 @@ - -
-
- - - - - - - - - - -
-
-
-
-
-
diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml deleted file mode 100644 index 3129e2c..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml b/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml deleted file mode 100644 index 5ca0b77..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.eclipse.ui/dialog_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - -
-
diff --git a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.aop.core/.state b/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.aop.core/.state deleted file mode 100644 index 8a7bbde..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.aop.core/.state +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/metadata/.state b/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/metadata/.state deleted file mode 100644 index 4e0dff4..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/metadata/.state and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/properties/.state b/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/properties/.state deleted file mode 100644 index 4e0dff4..0000000 Binary files a/TreePLE-Spring/.metadata/.plugins/org.springframework.ide.eclipse.beans.core.metadata/properties/.state and /dev/null differ diff --git a/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.blogs/-549550714.xml b/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.blogs/-549550714.xml deleted file mode 100644 index 6ebb514..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.blogs/-549550714.xml +++ /dev/null @@ -1,1372 +0,0 @@ - - - Spring - - - http://spring.io/blog.atom - https://spring.io/favicon.ico - 2018-03-13T16:59:30Z - - Spring Cloud Open Service Broker M1 released - - - - Scott Frederick - - tag:spring.io,2018-03-07:3205 - 2018-03-13T16:59:30Z - <p>We are pleased to announce the first milestone release of Spring Cloud Open Service Broker 2.0.0. </p> -<p>This project was formerly named Spring Cloud - Cloud Foundry Service Broker. A lot has changed in the few years since that project was released. The service broker API that the project implements is no longer specific to Cloud Foundry but has been donated to the <a href="https://www.openservicebrokerapi.org/">Open Service Broker API</a> project and is implemented by Kubernetes and other platforms. The new project name reflects this evolution and openness. </p> -<p>In addition to a new name, some highlights of the 2.0 version are: </p> -<ul> - <li>Requires Java 8, Spring Framework 5, and Spring Boot 2</li> - <li>Supports inclusion in either a Spring MVC or a Spring WebFlux application</li> - <li>Provides improved Spring Boot auto-configuration</li> -</ul> -<p>See the <a href="https://cloud.spring.io/spring-cloud-open-service-broker/">project page</a> for more information about using the project to build a service broker. </p> -<p>If you&rsquo;ve been using Spring Cloud - Cloud Foundry Service Broker 1.0, we&rsquo;d appreciate feedback on the upgrade experience to Spring Cloud Open Service Broker 2.0. A <a href="https://github.com/spring-cloud/spring-cloud-open-service-broker/wiki/2.0-Migration-Guide">migration guide</a> is available to help with the transition. </p> - - - This Week in Spring - March 13th, 2018 - - - - Josh Long - - tag:spring.io,2018-03-13:3208 - 2018-03-13T16:23:00Z - <p>Hi Spring fans! Welcome to another installment of <em>This Week in Spring</em>! This week I&rsquo;m in blizzard-besieged Boston, Massachusetts, for the epic Spring One Tour Boston event. Unfortunately, due to this <em>crazy</em> snow storm / blizzard, the event&rsquo;s been postponed one day as we all grapple with the weather. Hope you were able to join the Spring Boot 2.0 launch webinar! If not the replay will be available <a href="https://content.pivotal.io/webinars/mar-13-introducing-spring-boot-2-0-webinar">here</a> and don&rsquo;t forget to check out the launch <a href="https://content.pivotal.io/blog/opening-doors-with-spring-boot-2-0">blog</a>!</p> -<IMG src = "https://pbs.twimg.com/media/DYK9ObmWkAA3QYH.jpg" width = "500" /> -<img src = "https://pbs.twimg.com/media/DYK-rfQXkAEuK8W.jpg" width = "500" /> -<p>Snow or no snow! The show must go on, at least here on the Spring blog, so without further ado:</p> -<ul> - <li>The Reactor team is looking for a <a href="https://pivotal.io/careers/posting/staff-software-engineer-reactor-reactive-spring/1077260">motivated new engineer to join the team</a> - apply now!</li> - <li>Spring Cloud Data Flow ninja Gunnar Hillert has just announced <a href="https://spring.io/blog/2018/03/12/spring-cloud-data-flow-1-4-rc1-released">Spring Cloud Data Flow 1.4 RC1</a></li> - <li><a href="https://spring.io/blog/2018/03/12/spring-io-platform-cairo-rc1">Spring IO Platform Cairo-RC1</a> lead Andy Wilkinson has just announced the latest updates, including Spring Boot 2.0. Check it out and make sure works as you expect it to.</li> - <li>I love this <a href="https://spring.io/blog/2018/03/12/upgrading-start-spring-io-to-spring-boot-2">post</a> by Spring team legend Stéphane Nicoll on upgrading the <a href="http://start.spring.io">Spring Initializr (http://start.spring.io)</a> to Spring Boot 2.0.</li> - <li><a href="https://github.com/spring-projects/spring-data-jdbc/commit/73fe1ca93bb7c5f9e31292343c0b06f981e51284">The Spring Data JDBC project has added <code>@Modify</code> for marking queries</a> that perform DML or DDL. Modifying queries will return type <code>boolean</code> or <code>Boolean</code> when the number of updated rows is greater 0. This shouldn&rsquo;t be used for DML statements since it will always return false.</li> - <li>Spring Web Flow lead Rossen Stoyanchev has just <a href="https://spring.io/blog/2018/03/07/spring-web-flow-2-5-released">announced Spring Web Flow 2.5</a>. This release provides an upgrade path for applications using Web Flow to Spring Framework 5 with Java 8, Servlet 3.1, Hibernate 5, Tiles 3, and JSF 2.2 as minimum requirements.</li> - <li>Spring Boot legend Madhura Bhave looks at support for <a href="https://spring.io/blog/2018/03/07/testing-auto-configurations-with-spring-boot-2-0">testing auto-configurations in Spring Boot 2.0</a></li> - <li>Spring Batch ninja Mahmoud Ben Hassine has <a href="https://spring.io/blog/2018/03/07/spring-batch-3-0-9-release-and-4-0-1-release-are-now-available">just announced Spring Batch 3.0.9 and 4.0.1</a>, both with several improvements, bug fixes and documentation updates.</li> - <li>Spring Data lead Oliver Gierke out a <a href="https://jira.spring.io/browse/DATAREST-948">Request for Feedback on this proposed API draft for more fine-grained control over the HTTP methods exposed by Spring Data REST</a>. Please give the snapshots a try and report feedback!</li> - <li>Spring Data lead <a href="https://spring.io/blog/2018/03/06/security-issue-in-spring-data-rest-cve-2017-8046">Oliver Gierke looks at the history of a CVE</a> that was discovered, and fixed, last Fall.</li> - <li>Spring Boot lead Phil Webb talks to InfoQ <a href="https://www.infoq.com/news/2018/03/spring-boot-2.0-ga">about the recently released Spring Boot 2.0</a></li> - <li>Jeffrey Haskovec has a nice roundup <a href="https://haskovec.com/spring-boot-2-0/">of what&rsquo;s new in Spring Boot 2</a></li> - <li>This is a simple and interesting example of <a href="https://github.com/bjartek/webflux-retry/blob/master/src/main/kotlin/org/bjartek/webfluxretry/WebfluxRetryApplication.kt">using the retry operator in a Spring WebFlux</a>-based application. It also demonstrates error-handling mechanisms.</li> - <li>The <a href="https://www.cloudfoundry.org/blog/may-1st-cloud-foundry-day-copenhagen-sponsorships-available-cfp-open/">Cloud Foundry Day in Copenhagen</a> is coming and the CFP is open!</li> - <li>Tim Spann has a funnily named new blog post that is <a href="https://dzone.com/articles/spring-boot-20-on-acid-big-data-spring-boot">a guide to using Spring Boot 2.0 with Apache Hive LLAP ACID</a> tables to make the most of a Big Data pipeline.</li> - <li>The <a href="https://twitter.com/brunoborges/status/971685078551035904">Microsoft Azure Spring Boot starters</a> have been updated to support Spring Boot 2.0! Hurray!</li> - <li>Nominate a <a href="https://www.cloudfoundry.org/blog/community-awards-cloud-foundry-na-summit-2018/">community member that is an active advocate of the Cloud Foundry technology</a>.</li> - <li>This thread is a nice breakdown on some ways <a href="https://twitter.com/smaldini/status/973228433860837376?s=12">to approach error handling using Project Reactor</a>, as in a Spring WebFlux application.</li> - <li>This is an interesting post that looks at a particular way to quantify how responsive <a href="https://medium.com/@tristan_96324/prometheus-apdex-alerting-d17a065e39d0">a system is - Apdex</a>. It&rsquo;s yet another useful application of a time series DB (like Prometheus, Graphite, InfluxDB, etc.) and you&rsquo;re going to need a metrics facade like Micrometer to use it.</li> - <li>RxJava 2 lead and frequent Pivotal Reactor contributor David Karnok <a href="https://github.com/akarnokd/akarnokd-misc/issues/2">has a nice benchmark of RxJava and Reactor</a></li> - <li>Check out Christoph Strobl and Mark Paluch&rsquo;s talk on <a href="https://www.infoq.com/presentations/reactive-spring-data">Reactive Data Access with Spring</a></li> - <li>The SivaLabs blog continues its series on building microservices with Spring. <a href="https://sivalabs.in/2018/03/spring-cloud-netflix-circuit-breaker/">This is part 4 and it looks at circuit breakers with Spring Cloud Netflix Hystrix</a></li> - <li>Dhaval Shah has a nice post, <a href="https://t.co/s7gilJuRhy?ssr=true">&ldquo;Bootiful Test Driven Development&rdquo;</a></li> - <li>Our very own Pivotal legend Toshiaki Maki put together a BOSH release <a href="https://github.com/making/nexus-boshrelease/releases/tag/0.8.0">to deploy the Sonatype Nexus artifact repository</a>. Nice!</li> - <li>Gunter Rotsaert has written a quick, interesting <a href="https://t.co/QPLsbo9WF2?ssr=true">introduction to the Reactive Streams and Spring Web Flux with Java 9</a></li> - <li>Raj Saxena has a <a href="https://t.co/Cp3fvQ8BZn?ssr=true">performance test comparing Spring WebFlux and Spring MVC</a></li> - <li><a href="https://thenewstack.io/cerner-uses-concourses-continuous-integration-platform-regulated-environments/?_lrsc=aeb08570-7015-4076-91b7-ecc52aaaa2c1">How Cerner Leverages Concourse&rsquo;s CI Platform for Regulated Environments - The New Stack</a></li> - <li>This new post on the Cloud Foundry community site looks <a href="https://www.cloudfoundry.org/blog/polyglot-service-discovery-container-networking-cloud-foundry/">at <em>polyglot service discovery</em></a> in Cloud Foundry</li> - <li>I love this post - on the Kotlin Development blog - on why <a href="https://www.kotlindevelopment.com/kotlin-webflux/">Spring Web Flux</a> is so amazing. Plus, Kotlin!</li> - <li>Claus Ibsen on Twitter: &ldquo;What version of <a href="https://twitter.com/davsclaus/status/972144268017061888">#ApacheCamel supports Spring Boot 2</a>? That is easy to remember, the version starting with all the 2&rsquo;s, eg v2.22 (planned for early summer 2018)&rdquo;</li> - <li>Mark Paluch explains <a href="https://twitter.com/SpringData/status/972061237734494209">how to use Kotlin default methods with Spring Data repository interfaces</a>. TL;DR: you can&rsquo;t.</li> - <li>In which Spring Data lead Oliver Gierke <a href="https://twitter.com/SpringData/status/972061189302833152">alludes to some interesting integration possibilities</a> with Camunda, the BPMN engine forked from Activit.</li> - <li>This is interesting - <a href="https://github.com/raphaelDL/spring-webflux-security-jwt">it&rsquo;s a prototype JWT integration with Spring WebFlux and Spring Security 5</a></li> - <li>Great Tweet from <a href="https://twitter.com/addisonhuddy/status/971795942595747840">Addison Huddy</a>: &ldquo;The power of @springcentral reactor clicked for me yesterday. &lsquo;B/c async programming is callback hell.&rsquo;&rdquo;</li> - <li>Microsoft have published a nice blog: <a href="https://azure.microsoft.com/en-us/blog/build-spring-boot-2-0-apps-with-azure-starters-and-new-vscode-extensions/">build Spring Boot 2.0 apps with AAzure starters and new VSCode etensions</a></li> - <li>Interesting Google community doc: <a href="https://cloud.google.com/community/tutorials/kotlin-springboot-container-engine">&ldquo;Run a Kotlin Spring Boot application on Google Kubernetes Engine&rdquo;</a></li> - <li>The process to develop open source practices <a href="https://twitter.com/cloudfoundry/status/971510174367338496">inside Home Depot has led to becoming a CloudFoundry foundation member&hellip;</a></li> - <li>Check out this upcoming webinar from Pivotal&rsquo;s Richard Seroter and Microsoft&rsquo;s Asir Vedamuthu that looks at <a href="https://twitter.com/springcentral/status/971507034800754689">how to run Spring applications on Microsoft Azure</a></li> - <li>Brian McClain looks at what goes into <a href="https://medium.com/@brianmmcclain/anatomy-of-a-riff-function-3524d84feb9a">creating a Project Riff with this quick rundown</a>.</li> - <li>Registration <em>and</em> the CFP for <a href="https://twitter.com/springcentral/status/971490856313151488">SpringOne Platform 2018 are both now open!</a></li> - <li>The <a href="http://bmuschko.com/blog/gradle-project-generation/">Gradle Initializr now runs on Spring Boot 2.0</a>. You can even enjoy the custom Gradlephant banner if you&rsquo;d like.</li> - <li>We&rsquo;re growing <a href="https://www.meetup.com/SpringMN/events/246492750/?_lrsc=7d17a732-8fa2-44e3-8ee8-9d271de18519&_cookie-check=BKO9-hM4zzyV8nkq">the Spring community in Minnesota</a>. Let&rsquo;s keep the momentum going from our first #meetup. Join us on 3/12!</li> - <li>Spring Social lead Craig Walls has a <em>great</em> post that looks at how to <a href="https://twitter.com/springcentral/status/971159310226006016">use Spring Security 5’s OAuth2 client support to integrate with external APIs such as Facebook</a>.</li> - <li>I really liked this discussion on <a href="https://yokota.blog/2018/03/05/stream-relational-processing-platforms/amp/?__twitter_impression=true">the types of data streaming platforms</a></li> - <li>I was one of many in the <a href="https://twitter.com/offheap/status/970920533893271553?s=12">Off Heap podcast episode recorded live at the Atlanta DevNexus 2018 event</a> - enjoy!</li> - <li>The Pivotal conversations podcast <a href="https://twitter.com/cote/status/970803667593916417?s=12">has a nice interview with Spring Tools lead Martin Lippert</a></li> - <li><a href="https://t.co/uJBAzQs7mH?ssr=true">ascii in java</a></li> - <li>The Heroku blog has a nice post by <a href="https://twitter.com/codefinger/status/970783853215473666?s=12">Joe Kutner on using Spring Boot 2.0 on Heroku</a></li> - <li>The <em>Talking Kotlin</em> podcast discusses <a href="https://itunes.apple.com/us/podcast/talking-kotlin/id1194631266?mt=2&i=1000404125552">how one company uses Spring Boot and Kotlin together in building their cloud-based offering</a>.</li> - <li>Check out all <a href="https://twitter.com/aless_falappa/status/970743733628088320?s=12">the improvements to the Spring Boot Netbeans integration</a></li> -</ul> - - - Spring Cloud Data Flow 1.4 RC1 released - - - - Gunnar Hillert - - tag:spring.io,2018-03-12:3207 - 2018-03-12T16:00:00Z - <div class="paragraph"> -<p>The Spring Cloud Data Flow team is pleased to announce the release of 1.4.0 RC1. Follow the <em>Getting Started</em> guides for <a href="https://docs.spring.io/spring-cloud-dataflow/docs/1.4.0.RC1/reference/htmlsingle/#getting-started">Local Server</a>, <a href="https://docs.spring.io/spring-cloud-dataflow-server-cloudfoundry/docs/1.4.0.RC1/reference/htmlsingle/#getting-started">Cloud Foundry</a>, and <a href="https://docs.spring.io/spring-cloud-dataflow-server-kubernetes/docs/1.4.0.RC1/reference/htmlsingle/#kubernetes-getting-started">Kubernetes</a>.</p> -</div> -<div class="paragraph"> -<p>Following are the release highlights:</p> -</div> -<div class="sect1"> -<h2 id="stream-deployment-ux"><a class="anchor" href="#stream-deployment-ux"></a>Stream Deployment UX</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>In Skipper mode, we have added a brand new stream deployment builder form to simplify the selection of platform and the properties while deploying a stream. The options include override to the deployment platform and the deployer, application and global properties for the streaming pipeline.</p> -</div> -<div class="imageblock"> -<div class="content"> -<img src="https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/gh-pages/img/ui-deployment-properties-1-4-0-RC1.png" alt="Deployment Properties"> -</div> -</div> -</div> -</div> -<div class="sect1"> -<h2 id="docker-compose-for-development"><a class="anchor" href="#docker-compose-for-development"></a>Docker Compose for Development</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>To simplify the getting started experience for the Local Server, we have added the <a href="https://docs.spring.io/spring-cloud-dataflow/docs/1.4.0.RC1/reference/htmlsingle/#getting-started-deploying-spring-cloud-dataflow-docker">Docker Compose</a> support, which when run as a single command from the CLI, it will automatically provision the latest release of the Local-server along with Apache Kafka for messaging and H2 database to back the SCDF repository.</p> -</div> -<div class="paragraph"> -<p>In addition to the out-of-the-box experience, you can also <a href="https://docs.spring.io/spring-cloud-dataflow/docs/1.4.0.RC1/reference/htmlsingle/#getting-started-customizing-spring-cloud-dataflow-docker">customize</a> to switch to RabbitMQ for messaging, MySQL for database, or add Redis for Analytics.</p> -</div> -</div> -</div> -<div class="sect1"> -<h2 id="security"><a class="anchor" href="#security"></a>Security</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>Based on the recent feedback, this release adds support for <a href="https://docs.spring.io/spring-cloud-dataflow/docs/1.4.0.RC1/reference/htmlsingle/#_ldap_role_mapping">mapping</a> the LDAP Active Directory Groups with the roles in Spring Cloud Data Flow. No need of extra translations or filtering; with Active Directory definition and the right mapping in SCDF, the desired authorization role can be automatically applied.</p> -</div> -<div class="paragraph"> -<p>This release also addressed a few technical debt chores and bug-fixes. For more details, check out the <a href="https://github.com/spring-cloud/spring-cloud-dataflow/releases/tag/v1.4.0.RC1">release notes</a>.</p> -</div> -<div class="paragraph"> -<p>As always, we welcome feedback and contributions, so please reach out to us on <a href="https://stackoverflow.com/questions/tagged/spring-cloud-dataflow">Stackoverflow</a> or <a href="https://github.com/spring-cloud/spring-cloud-dataflow/issues">GitHub</a> or via <a href="https://gitter.im/spring-cloud/spring-cloud-dataflow">Gitter</a>.</p> -</div> -<div class="paragraph"> -<p>Please try it out, share your feedback, and consider contributing to the project!</p> -</div> -</div> -</div> - - - Spring IO Platform Cairo-RC1 - - - - Andy Wilkinson - - tag:spring.io,2018-03-12:3206 - 2018-03-12T15:39:09Z - <p>It&rsquo;s my pleasure to announce that Spring IO Platform Cairo-RC1 is now available from the <a href="http://repo.spring.io/milestone/">Spring milestone repository</a>. The Cairo generation of the Platform builds on top of Spring Framework 5.0 and Spring Boot 2.0 and requires Java 8.</p> -<p>Cairo includes the following projects:</p> -<ul> - <li>AspectJ 1.8.13</li> - <li>Reactor Bismuth-SR7</li> - <li>Spring AMQP 2.0.2</li> - <li>Spring Batch 4.0.0</li> - <li>Spring Boot 2.0.0</li> - <li>Spring Cloud Connectors 2.0.1</li> - <li>Spring Data Kay-SR5</li> - <li>Spring Framework 5.0.4</li> - <li>Spring HATEOAS 0.24.0</li> - <li>Spring Integration 5.0.3</li> - <li>Spring Kafka 2.1.4</li> - <li>Spring LDAP 2.3.2</li> - <li>Spring Plugin 1.2.0</li> - <li>Spring REST Docs 2.0.0</li> - <li>Spring Retry 1.2.2</li> - <li>Spring Security 5.0.3</li> - <li>Spring Security JWT 1.0.9</li> - <li>Spring Security OAuth 2.2.1</li> - <li>Spring Session Apple-SR1</li> - <li>Spring Social 1.1.6</li> - <li>Spring Social Twitter 1.1.2</li> - <li>Spring Web Flow 2.5.0</li> - <li>Spring Web Services 3.0.0</li> -</ul> -<p>A complete list of all of the Platform&rsquo;s managed dependencies can be found in the <a href="https://docs.spring.io/platform/docs/Cairo-RC1/reference/htmlsingle/#appendix-dependency-versions">documentation</a>.</p> -<p>A number of dependencies have been removed from the Platform&rsquo;s dependency management. Please refer to the <a href="https://docs.spring.io/platform/docs/Cairo-RC1/reference/htmlsingle/#upgrading">upgrading section of the documentation</a> for further information.</p> -<p>Please take RC1 for a spin and let us know if you find any problems. All being well, Cairo-RELEASE will be available shortly after <a href="https://github.com/spring-projects/spring-boot/milestone/98">Spring Boot 2.0.1.RELEASE</a>.</p> -<p><a href="http://platform.spring.io/platform">Project Page</a> | <a href="https://github.com/spring-io/platform">GitHub</a> | <a href="https://github.com/spring-io/platform/issues">Issues</a> | <a href="http://docs.spring.io/platform/docs/Cairo-RC1/reference/htmlsingle">Documentation</a></p> - - - Upgrading start.spring.io to Spring Boot 2 - - - - Stéphane Nicoll - - tag:spring.io,2018-03-02:3199 - 2018-03-12T10:08:00Z - <p>Spring Boot 2 was released recently and the production instance of <a href="https://github.com/spring-io/initializr">Spring Initializr</a> (<a href="https://start.spring.io">start.spring.io</a>) was upgraded to Spring Boot 2 the same day.</p> -<p>In this post, I&rsquo;d like to walk you through the process of upgrading a Spring Boot <code>1.x</code> app to Spring Boot 2.</p><h2><a href="#release-notes-and-migration-guide" class="anchor" name="release-notes-and-migration-guide"></a>Release notes and migration guide</h2> -<p>A good first step is to get yourself familiar with the main changes in Spring Boot 2 by reading the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide">migration guide</a> and the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes">release notes</a>.</p><h2><a href="#build-upgrade" class="anchor" name="build-upgrade"></a>Build upgrade</h2> -<p>If you are using Maven and the <code>spring-boot-starter-parent</code>, you need to be aware that several plugins are going to be updated as part of the upgrade. If you&rsquo;re not using the parent, it is worthwhile to inspect your build and upgrade the plugins that you are using. Spring Initializr is built with Maven so the easiest way is to <a href="https://github.com/spring-projects/spring-boot/blob/v2.0.0.RELEASE/spring-boot-project/spring-boot-dependencies/pom.xml#L183">scan <code>spring-boot-dependencies</code></a> and upgrade the plugins you are using if necessary.</p><h2><a href="#upgrade-to-spring-boot-2" class="anchor" name="upgrade-to-spring-boot-2"></a>Upgrade to Spring Boot 2</h2> -<p>Initializr has dedicated auto-configuration to automatically configure the service. It also exposes dedicated metrics so it goes beyond using what already exists. The first step is to review some basic compilation errors due to renames and relocations.</p> -<p>In the case of Initializr, the biggest change was the move to <a href="http://micrometer.io/">micrometer</a> as the <code>CounterService</code> and <code>GaugeService</code> are no longer available. Fortunately, it was <a href="https://github.com/spring-io/initializr/blob/fe7650f2c8b98161473d4406a8bbc5e7007ea648/initializr-actuator/src/main/java/io/spring/initializr/actuate/metric/ProjectGenerationMetricsListener.java">quite easy to fix the compilation errors</a> by injecting the <code>MeterRegistry</code>. We can then use the registry to retrieve a <code>Counter</code> per element to increment.</p> -<p>We certainly need to improve our integration with Micrometer, but that basic change is enough to get us going.</p><h2><a href="#properties-migration" class="anchor" name="properties-migration"></a>Properties migration</h2> -<p>We haven&rsquo;t looked at the test suite yet but we could give the app a go to get a first impression. Before doing so, let&rsquo;s add the properties migrator to the build</p> -<pre><code class="prettyprint xml">&lt;dependency&gt; - &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; - &lt;artifactId&gt;spring-boot-properties-migrator&lt;/artifactId&gt; - &lt;scope&gt;runtime&lt;/scope&gt; -&lt;/dependency&gt; -</code></pre> -<p>Or, if you&rsquo;re using Gradle:</p> -<pre><code class="prettyprint gradle">runtime(&quot;org.springframework.boot:spring-boot-properties-migrator&quot;) -</code></pre> -<p>If we run the app, it will identify the properties that are no longer managed by Spring Boot. If there is a replacement it will temporarily remap the property for you with a warning. If there isn&rsquo;t a replacement, an error report will give you more information. Either way, the configuration has to be updated and the dependency removed once you have updated the configuration. </p> -<p>Before you move on, it is a good idea to use the search feature of your IDE to double-check that you aren&rsquo;t using one of the properties you&rsquo;ve migrated in an integration test. In the case of Initializr, <code>management.security.enabled</code> was used and <a href="https://github.com/spring-io/initializr/blob/fe7650f2c8b98161473d4406a8bbc5e7007ea648/initializr-actuator/src/test/java/io/spring/initializr/actuate/ActuatorIntegrationTests.java#L42">had to be migrated as well</a>.</p> -<p>So the app starts now. Before going further, let&rsquo;s have a look at the test suite.</p><h2><a href="#test-infrastructure" class="anchor" name="test-infrastructure"></a>Test infrastructure</h2> -<p>As part of the upgrade, test utilities are also upgraded (we primarily use AssertJ and Mockito). AssertJ had an interesting behaviour change: <code>containsSequence</code> on a <code>String</code> stopped permitting holes in the sequence (<code>containsSubSequence</code> was introduced for that behavior). The Mockito upgrade was painless (<code>ArgumentMatcher</code> is now an interface and the import for <code>argThat</code> had to be changed).</p> -<p>We were also using <code>PropertiesConfigurationFactory</code> to bind a POJO to a prefix of the <code>Environment</code>. In 2.0, a brand new <code>Binder</code> API was introduced that is more flexible and easier to use. Our binding that took 10 lines of code <a href="https://github.com/spring-io/initializr/commit/fe7650f2c8b98161473d4406a8bbc5e7007ea648#diff-2aede7dc447980e1149b5948298cb231R211">could be reduced to 3 simple lines</a>.</p> -<p>Finally, our auto-configuration tests can now benefit from <code>ApplicationContextRunner</code>, rather than creating the <code>ApplicationContext</code> and managing its lifecycle ourselves. This feature is covered in detail <a href="https://spring.io/blog/2018/03/07/testing-auto-configurations-with-spring-boot-2-0">in a separate blog post</a>.</p> -<p>We can now run the tests and realize that there are a few tests failing. The home page of the service does not work anymore in the browser! Some tests exercising the creation of build scripts via the endpoint failed too. </p><h2><a href="#mustache-prefix-change" class="anchor" name="mustache-prefix-change"></a>Mustache prefix change</h2> -<p>The reason the templates did not render anymore is due to the fact that the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#mustache-templates-default-file-extension">prefix for Mustache templates has changed</a>. Renaming our templates to <code>.mustache</code> was enough to fix that problem. </p><h2><a href="#spring-mvc-path-matching-default-behavior-change" class="anchor" name="spring-mvc-path-matching-default-behavior-change"></a>Spring MVC Path Matching Default Behavior Change</h2> -<p>The second problem was an abuse of path matching in our endpoint. The endpoint that allows you to create a <code>pom.xml</code> file was as follows:</p> -<pre><code class="prettyprint java">@RequestMapping(&quot;/pom&quot;) -@ResponseBody -public ResponseEntity&lt;byte[]&gt; pom(BasicProjectRequest request) { ... } -</code></pre> -<p>Users are expected to call <code>/pom.xml</code> and that&rsquo;s what we should have mapped initially. In Spring Boot 2, the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#spring-mvc-path-matching-default-behavior-change">Spring MVC path matching default behavior has changed</a> so that this endpoint does not match anymore.</p> -<p>An easy fix is:</p> -<pre><code class="prettyprint java">@RequestMapping(path = { &quot;/pom&quot;, &quot;/pom.xml&quot; }) -@ResponseBody -public ResponseEntity&lt;byte[]&gt; pom(BasicProjectRequest request) { ... } -</code></pre><h2><a href="#redirect-for-code-info-code" class="anchor" name="redirect-for-code-info-code"></a>Redirect for <code>/info</code></h2> -<p><a href="https://start.spring.io/info">https://start.spring.io/info</a> is a well-known URL to retrieve the versions mapping that Spring Initializr is currently using. It typically allows you to know which Spring Cloud version matches your current Spring Boot version.</p> -<p>Spring Boot 2 moves actuator endpoints to <code>/actuator</code> and we want to follow that default. But that does not mean we want to break a URL that users may have bookmarked. To get the best of the both worlds, we can add a simple redirect:</p> -<pre><code class="prettyprint java">@Bean -public WebMvcConfigurer initializrWebMvcConfigurer() { - return new WebMvcConfigurer() { - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addRedirectViewController(&quot;/info&quot;, &quot;/actuator/info&quot;); - } - } -} -</code></pre><h2><a href="#wrapping-up" class="anchor" name="wrapping-up"></a>Wrapping up</h2> -<p>Migrating Spring Initializr to Spring Boot 2 was quite easy in the end. Reading the release notes and the migration guide to know beforehand the changes that may affect your app was key. Since the Spring Boot 2 release, <a href="https://start.spring.io">start.spring.io</a> has been happily generating tens of thousands of projects a day for the community around the World.</p> -<p>The next step is to properly migrate metrics to Micrometer, abandoning hierarchical names and using tags instead. Subscribe to <a href="https://github.com/spring-io/initializr/issues/526">#526</a> if you are interested to know more about that. </p> - - - Spring Web Flow 2.5 released - - - - Rossen Stoyanchev - - tag:spring.io,2018-03-07:3204 - 2018-03-07T19:14:59Z - <p>Spring Web Flow 2.5 is now GA and available for use. This release provides an upgrade path for applications using Web Flow to Spring Framework 5 with Java 8, Servlet 3.1, Hibernate 5, Tiles 3, and JSF 2.2 as minimum requirements.</p> - - - Testing auto-configurations with Spring Boot 2.0 - - - - Madhura Bhave - - tag:spring.io,2018-01-03:3134 - 2018-03-07T16:30:00Z - <p>Auto-configuration is one of the most powerful features of Spring Boot. Tests for auto-configuration classes usually follow the same pattern. Most tests start up an <code>ApplicationContext</code> with the auto-configuration class under test and depending on the test, also load additional configuration to simulate user behavior. The recurrence of this pattern can add a lot of repetition in the code base.</p> -<p>Spring Boot 2.0 provides a suite of new test helpers for easily configuring an <code>ApplicationContext</code> to simulate auto-configuration test scenarios. The following example configures an <code>ApplicationContextRunner</code> to test the <code>UserServiceAutoConfiguration</code>:</p> -<pre><code class="prettyprint java">private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(UserServiceAutoConfiguration.class)); -</code></pre> -<p>Since most tests in a test class share similar configuration, <code>ApplicationContextRunner</code> is best used as a field of the test class that is set up with some common configuration. </p> -<p>Each test can further customize the <code>ApplicationContext</code> with the desired configuration and properties.</p> -<pre><code class="prettyprint java">@Test -public void someTest() { - this.contextRunner - .withPropertyValues(&quot;user.my.property=test&quot;) - .withUserConfiguration(MyConfiguration.class) - .run(...); -} -</code></pre> -<p>In addition to invoking <code>UserServiceAutoConfiguration</code>, the example above registers <code>MyConfiguration</code> and sets the <code>user.my.property</code> property to <code>test</code>.</p> -<p><code>ApplicationContextRunner</code> transparently replicates the configuration initialization order that Spring Boot uses (scanning user configuration first, then auto-configurations according to their defined order).</p> -<p>There is support for an <code>AssertableApplicationContext</code> which provides AssertJ style assertions on an <code>ApplicationContext</code>. You can also chain multiple assertions as shown in the following example:</p> -<pre><code class="prettyprint java">@Test -public void someTest() { - this.contextRunner.run((context) -&gt; { - assertThat(context).hasSingleBean(MyBean.class); - assertThat(context).getBeanNames(UserRule.class).hasSize(2); - }); -} -</code></pre> -<p>Assertions can also be used on an <code>ApplicationContext</code> that has failed to start to check the cause of the failure. Regardless, the lifecycle of the context does not need to be managed by the test anymore, i.e the context is automatically closed.</p> -<p>For tests that require a <code>WebApplicationContext</code>, <code>WebApplicationContextRunner</code> or <code>ReactiveWebApplicationContextRunner</code> can be used.</p> -<p>An auto-configuration can also be affected by the presence of a particular <code>Class</code> on the classpath using the <code>@ConditionalOnClass</code> annotation. <code>ApplicationContextRunner</code> lets you test what happens when a given <code>Class</code> is not present at runtime. Spring Boot ships with a <code>FilteredClassLoader</code> that can easily be used by the runner. In the following example, we assert that if <code>UserService</code> is not present, the auto-configuration is properly disabled:</p> -<pre><code class="prettyprint java">@Test -public void serviceIsIgnoredIfLibraryIsNotPresent() { - this.contextRunner - .withClassLoader(new FilteredClassLoader(UserService.class)) - .run((context) -&gt; assertThat(context) - .doesNotHaveBean(&quot;userService&quot;)); -} -</code></pre> - - - Spring Batch 3.0.9.RELEASE and 4.0.1.RELEASE are now available - - - - Mahmoud Ben Hassine - - tag:spring.io,2018-03-02:3200 - 2018-03-07T16:26:00Z - <p>We are pleased to announce the release of Spring Batch 3.0.9.RELEASE and 4.0.1.RELEASE via Maven Central, Github, and the Pivotal download repository.</p> -<p>These two maintenance releases address a number of bug fixes, enhancements and documentation updates. For a complete list of changes, please refer to the change logs for <a href="https://jira.spring.io/jira/secure/ReleaseNote.jspa?projectId=10090&version=16254">3.0.9</a> and <a href="https://jira.spring.io/jira/secure/ReleaseNote.jspa?projectId=10090&version=16626">4.0.1</a>. Many thanks to all of those who submitted <a href="https://github.com/spring-projects/spring-batch/pulls">pull requests</a> that went into these releases.</p> -<p>Please note that the next patch version, 3.0.10.RELEASE, will be the <strong>last</strong> maintenance release of the 3.x line. We strongly recommend users to migrate to the latest and greatest Spring Batch 4 (now available via Spring Boot 2).</p> -<p>We look forward to your feedback in <a href="https://jira.spring.io/browse/BATCH">Jira</a>, <a href="https://stackoverflow.com/questions/tagged/spring-batch">StackOverflow</a>, <a href="https://gitter.im/spring-batch/Lobby">Gitter</a>, or directly via Twitter at <a href="https://twitter.com/_benas_">@_benas_</a>.</p> -<p><a href="https://projects.spring.io/spring-batch/">Spring Batch Home</a> | <a href="https://github.com/spring-projects/spring-batch">Source on GitHub</a> | <a href="https://docs.spring.io/spring-batch/4.0.x/reference/html/index.html">Reference Documentation</a></p> - - - Security issue in Spring Data REST (CVE-2017-8046) - - - - Oliver Gierke - - tag:spring.io,2018-03-06:3203 - 2018-03-06T17:52:00Z - <p>Last fall, a security vulnerability affecting Spring Data REST was discovered. We patched the affected modules and published a <a href="https://pivotal.io/security/cve-2017-8046">CVE</a>. We&rsquo;ve seen some recent news about this that&rsquo;s led to confusion. Here&rsquo;s the scoop:</p><h2><a href="#tl-dr" class="anchor" name="tl-dr"></a>tl;dr:</h2> -<ul> - <li>There was a security vulnerability allowing arbitrary code execution in Spring Data REST up to version 2.6.8 and 3.0.0.</li> - <li>This vulnerability has been fixed in the following versions:<br/>&ndash; Spring Data REST 2.6.9 (Ingalls SR9, Oct. 27th, 2017), included in Spring Boot 1.5.9 (Oct, 28th 2017).<br/>&ndash; Spring Data REST 3.0.1 (Kay SR1, Oct. 27th 2017), included in Spring Boot 2.0 M6, (Nov. 6th 2017)</li> - <li>The CVE was originally published at the end of September 2017. We originally thought that we had fixed the issue with releases that had been published a couple of days before. Subsequent feedback showed that this wasn&rsquo;t the case and the issue was eventually fixed in October / November 2017. Regrettably, the CVE was not updated to reflect this. The team is working on making sure that this lack of update does not happen again.</li> -</ul><h2><a href="#the-reality" class="anchor" name="the-reality"></a>The reality</h2> -<p>We saw some stories that got a few details wrong. Let&rsquo;s clear things up:</p> -<ul> - <li>At no point in time &ldquo;various Spring modules&rdquo; have been affected. The issue has existed in Spring Data REST only.</li> - <li>When the CVE states a Spring Boot version affected, it does <em>not</em> mean that every Spring Boot project is affected. Only projects that use the particular Spring Data REST module are. We only state the Spring Boot versions in CVEs to allow users to quickly identify whether or not the version of Spring Boot that they are using contains a vulnerable version of Spring Data.</li> - <li>Some publications create the impression that all REST APIs built with Spring – including ones manually coded with Spring MVC – are affected. That&rsquo;s not the case. You&rsquo;re only affected if you expose HTTP resources that are handled by Spring Data REST.</li> -</ul><h2><a href="#recommendations" class="anchor" name="recommendations"></a>Recommendations</h2> -<p>We generally recommend to upgrade to new bugfix releases of individual Spring modules as soon as possible. The team also takes great care to coordinate releases so that a Spring Boot release bundling the latest bug- and security fixes is published very close to the releases of the ecosystem projects.</p> -<p>For security relevant upgrades, please make sure you monitor our <a href="https://pivotal.io/security">published CVE list</a> to find out about releases shipping security fixes immediately.</p> - - - Using Spring Security 5 to integrate with OAuth 2-secured services such as Facebook and GitHub - - - - Craig Walls - - tag:spring.io,2018-02-27:3190 - 2018-03-06T15:01:29Z - <div class="paragraph"> -<p>One of the key features in Spring Security 5 is support for writing applications that integrate with services that are secured with OAuth 2. This includes the ability to sign into an application by way of an external service such as Facebook or GitHub.</p> -</div> -<div class="paragraph"> -<p>But with a little bit of extra code, you can also obtain an OAuth 2 access token that can be used to perform authorized requests against the service&#8217;s API.</p> -</div> -<div class="paragraph"> -<p>In this article, we&#8217;re going to look at how to develop a Spring Boot application that, using Spring Security 5, integrates with Facebook. You can find the complete code for this article at <a href="https://github.com/habuma/facebook-security5" class="bare">https://github.com/habuma/facebook-security5</a>.</p> -</div> -<h1 id="enabling-oauth-2-login" class="sect0"><a class="anchor" href="#enabling-oauth-2-login"></a>Enabling OAuth 2 login</h1> -<div class="paragraph"> -<p>Suppose that you want to enable users of your application to be able to sign in with Facebook. With Spring Security 5, it couldn&#8217;t be any easier. All you need to do is add Spring Security&#8217;s OAuth 2 client support to your project&#8217;s build and then configure your application&#8217;s Facebook credentials.</p> -</div> -<div class="paragraph"> -<p>First, add the Spring Security OAuth 2 client library to your Spring Boot project&#8217;s build, along with the Spring Security starter dependency:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt; - &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; - &lt;artifactId&gt;spring-boot-starter-security&lt;/artifactId&gt; -&lt;/dependency&gt; -&lt;dependency&gt; - &lt;groupId&gt;org.springframework.security&lt;/groupId&gt; - &lt;artifactId&gt;spring-security-oauth2-client&lt;/artifactId&gt; -&lt;/dependency&gt;</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Then you&#8217;ll need to configure your application&#8217;s client ID and client secret (which you can obtain by registering your application with Facebook at <a href="https://developers.facebook.com/" class="bare">https://developers.facebook.com/</a>). The properties for all OAuth 2 clients are prefixed with <code>spring.security.oauth2.client.registration</code>. For Facebook specifically, you&#8217;ll add <code>facebook.client-id</code> and <code>facebook-client-secret</code> properties under that prefix. In the project&#8217;s <code>application.yml</code> file, it will look something like this:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-yaml" data-lang="yaml">spring: - security: - oauth2: - client: - registration: - facebook: - client-id: YOUR CLIENT ID GOES HERE - client-secret: YOUR CLIENT SECRET GOES HERE</code></pre> -</div> -</div> -<div class="paragraph"> -<p>You may also set those properties as environment variables, in a properties file, or any property source supported by Spring Boot. Of course, you&#8217;ll substitute your application&#8217;s own client ID and secret for the placeholder text shown in the YAML above.</p> -</div> -<div class="paragraph"> -<p>With the OAuth 2 client dependency in place and those properties set, your application will now offer authentication via Facebook. When you try to access a page without having been previously authenticated, you&#8217;ll be presented a page that looks like this:</p> -</div> -<div class="imageblock"> -<div class="content"> -<img src="https://raw.githubusercontent.com/habuma/facebook-security5/master/article/images/FB_Link.png" alt="FB Link"> -</div> -</div> -<div class="paragraph"> -<p>This page offers you the opportunity to login using any of the configured OAuth 2 clients. For our purposes, Facebook is the only option.</p> -</div> -<div class="paragraph"> -<p>After clicking on the Facebook link, you&#8217;ll be redirected to Facebook. If you&#8217;ve not already signed into Facebook, you&#8217;ll be prompted to sign in. After signing in, and assuming you&#8217;ve not already authorized this application, you&#8217;ll be presented with an authorization prompt that will look something like this:</p> -</div> -<div class="imageblock"> -<div class="content"> -<img src="https://raw.githubusercontent.com/habuma/facebook-security5/master/article/images/FB_Authorities.png" alt="FB Authorities"> -</div> -</div> -<div class="paragraph"> -<p>If you choose to continue (by clicking the "Continue" button), you&#8217;ll be redirected back to your application and will be authenticated. (If you choose "Cancel", you&#8217;ll also be redirected back to the application, but will not be successfully authenticated.)</p> -</div> -<div class="paragraph"> -<p>Authentication with an external service like Facebook is a nice alternative to a traditional application login. But it&#8217;s only half of the story. Once the user has logged in, you can also use that authentication to access resources on the remote service&#8217;s API.</p> -</div> -<h1 id="accessing-api-resources" class="sect0"><a class="anchor" href="#accessing-api-resources"></a>Accessing API resources</h1> -<div class="paragraph"> -<p>After a successful authentication with an external OAuth 2 service, the <code>Authentication</code> object kept in the security context is actually an <code>OAuth2AuthenticationToken</code> which, along with help from <code>OAuth2AuthorizedClientService</code> can avail us with an access token for making requests against the service&#8217;s API.</p> -</div> -<div class="paragraph"> -<p>The <code>Authentication</code> can be obtained in many ways, including via <code>SecurityContextHolder</code>. Once you have the <code>Authentication</code>, you can cast it to <code>OAuth2AuthenticationToken</code>.</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">Authentication authentication = - SecurityContextHolder - .getContext() - .getAuthentication(); - -OAuth2AuthenticationToken oauthToken = - (OAuth2AuthenticationToken) authentication;</code></pre> -</div> -</div> -<div class="paragraph"> -<p>There will be an <code>OAuth2AuthorizedClientService</code> automatically configured as a bean in the Spring application context, so you&#8217;ll only need to inject it into wherever you&#8217;ll use it.</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">OAuth2AuthorizedClient client = - clientService.loadAuthorizedClient( - oauthToken.getAuthorizedClientRegistrationId(), - oauthToken.getName()); - -String accessToken = client.getAccessToken().getTokenValue();</code></pre> -</div> -</div> -<div class="paragraph"> -<p>The call to <code>loadAuthorizedClient()</code> is given the client&#8217;s registration ID, which is how the client credentials are registered in configuration--"facebook" in our example. The second parameter is the user&#8217;s username. Essentially, we&#8217;re asking the client service to load the <code>OAuth2AuthorizedClient</code> for the given user and for the given service. With an <code>OAuth2AuthorizedClient</code> in hand, it&#8217;s a simple matter of asking for the access token value by calling <code>getAccessToken().getTokenValue()</code>.</p> -</div> -<div class="paragraph"> -<p>We can apply this technique to flesh out a client API binding for the service. First, we&#8217;ll create a base API binding class to deal with the essential task of ensuring that the access token is included in all requests:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public abstract class ApiBinding { - - protected RestTemplate restTemplate; - - public ApiBinding(String accessToken) { - this.restTemplate = new RestTemplate(); - if (accessToken != null) { - this.restTemplate.getInterceptors() - .add(getBearerTokenInterceptor(accessToken)); - } else { - this.restTemplate.getInterceptors().add(getNoTokenInterceptor()); - } - } - - private ClientHttpRequestInterceptor - getBearerTokenInterceptor(String accessToken) { - ClientHttpRequestInterceptor interceptor = - new ClientHttpRequestInterceptor() { - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] bytes, - ClientHttpRequestExecution execution) throws IOException { - request.getHeaders().add("Authorization", "Bearer " + accessToken); - return execution.execute(request, bytes); - } - }; - return interceptor; - } - - private ClientHttpRequestInterceptor getNoTokenInterceptor() { - return new ClientHttpRequestInterceptor() { - @Override - public ClientHttpResponse intercept(HttpRequest request, byte[] bytes, - ClientHttpRequestExecution execution) throws IOException { - throw new IllegalStateException( - "Can't access the API without an access token"); - } - }; - } - -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>The most significant piece of the <code>ApiBinding</code> class is the <code>getBearerTokenInterceptor()</code> method where a request interceptor is created for the <code>RestTemplate</code> to ensure that the given access token is included in all requests to the API. If the given access token is <code>null</code>, however, a special request interceptor will throw an <code>IllegalStateException</code> without even trying to make the API request. This is acceptable and even desirable behavior for most APIs which require all requests to be authorized.</p> -</div> -<div class="paragraph"> -<p>Now we can write the Facebook API binding based on the <code>ApiBinding</code> base class:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public class Facebook extends ApiBinding { - - private static final String GRAPH_API_BASE_URL = - "https://graph.facebook.com/v2.12"; - - public Facebook(String accessToken) { - super(accessToken); - } - - public Profile getProfile() { - return restTemplate.getForObject( - GRAPH_API_BASE_URL + "/me", Profile.class); - } - - public List&lt;Post&gt; getFeed() { - return restTemplate.getForObject( - GRAPH_API_BASE_URL + "/me/feed", Feed.class).getData(); - } - -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>As you can see, the <code>Facebook</code> class is rather simple. All of the OAuth 2 specifics are captured in <code>ApiBinding</code>, so this class can focus on making requests to support the operations required by the application.</p> -</div> -<div class="paragraph"> -<p>Now we only need to configure a <code>Facebook</code> bean. The bean will be request-scoped to allow for an instance to be created based on the access token from the user&#8217;s <code>Authentication</code>:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">@Configuration -public class SocialConfig { - - @Bean - @RequestScope - public Facebook facebook(OAuth2AuthorizedClientService clientService) { - Authentication authentication = - SecurityContextHolder.getContext().getAuthentication(); - String accessToken = null; - if (authentication.getClass() - .isAssignableFrom(OAuth2AuthenticationToken.class)) { - OAuth2AuthenticationToken oauthToken = - (OAuth2AuthenticationToken) authentication; - String clientRegistrationId = - oauthToken.getAuthorizedClientRegistrationId(); - if (clientRegistrationId.equals("facebook")) { - OAuth2AuthorizedClient client = clientService.loadAuthorizedClient( - clientRegistrationId, oauthToken.getName()); - accessToken = client.getAccessToken().getTokenValue(); - } - } - return new Facebook(accessToken); - } - -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Also, because the <code>getFeed()</code> method from the <code>Facebook</code> API binding fetches data from the user&#8217;s feed, we&#8217;ll need to set <code>spring.security.oauth2.client.registration.facebook.scope</code> to specify "user_posts" scope when authenticating the user:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-yaml" data-lang="yaml">spring: - security: - oauth2: - client: - registration: - facebook: - client-id: YOUR CLIENT ID GOES HERE - client-secret: YOUR CLIENT SECRET GOES HERE - scope: user_posts</code></pre> -</div> -</div> -<h1 id="a-more-flexible-api-binding" class="sect0"><a class="anchor" href="#a-more-flexible-api-binding"></a>A more flexible API binding</h1> -<div class="paragraph"> -<p>You may be wondering what this has to do with Spring Social, which also offers support for signing in with an external service as well as an API binding for Facebook.</p> -</div> -<div class="paragraph"> -<p>Spring Social offers sign in support with <code>ProviderSignInController</code> and <code>SocialAuthenticationFilter</code>. Both of those implementations leverage a <code>ConnectionFactory</code> to provide a <code>ServiceProvider</code> for the external service. Each of Spring Social&#8217;s API bindings must provide API-specific implementations of <code>ConnectionFactory</code> and <code>ServiceProvider</code>. This limits Spring Social to supporting sign in with those services for whom implementations of <code>ConnectionFactory</code> and <code>ServiceProvider</code> is available.</p> -</div> -<div class="paragraph"> -<p>In contrast, Spring Security 5 is capable of supporting sign in with virtually any OAuth 2 or OpenID Connect service by simply providing the service details in configuration. Out of the box, Spring Security 5 offers baseline configuration for Facebook, Google, GitHub, and Okta (you only need to specify the client ID and secret). But if you must integrate with another service, you must only specify the service&#8217;s details (such as the authorization URL) in your application configuration.</p> -</div> -<div class="paragraph"> -<p>As for the API binding, Spring Social&#8217;s API bindings are vast, covering much of what is offered by the APIs that they target. But in reality, most applications need only a fraction of the operations supported by Spring Social. If you only need to fetch a user&#8217;s feed, why must you work with a large API binding that offers hundreds of other operations? Likewise, if you only care about one or two properties of a post response, why deal with a <code>Post</code> object that is comprehensive to what Facebook&#8217;s Graph API offers? In many cases like this, it may be easier to write your own API binding, tailor-made for your application&#8217;s needs.</p> -</div> -<div class="paragraph"> -<p>Moreover, Spring Social&#8217;s API bindings all employ <code>RestTemplate</code> under the covers. If you&#8217;d rather work with a non-blocking reactive API binding, you&#8217;re out of luck. Retrofitting the API bindings to be based on <code>WebClient</code> is no small undertaking and would essentially double the maintenance of those API bindings.</p> -</div> -<div class="paragraph"> -<p>But if you&#8217;ve developed an API binding of your own, it&#8217;s easy enough to swap out <code>RestTemplate</code> for a reactive <code>WebClient</code>, as shown in <code>ReactiveApiBinding</code> here:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public abstract class ReactiveApiBinding { - protected WebClient webClient; - - public ReactiveApiBinding(String accessToken) { - Builder builder = WebClient.builder(); - if (accessToken != null) { - builder.defaultHeader("Authorization", "Bearer " + accessToken); - } else { - builder.exchangeFunction( - request -&gt; { - throw new IllegalStateException( - "Can't access the API without an access token"); - }); - } - this.webClient = builder.build(); - } -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>You may even mix-and-match <code>WebClient</code> and <code>RestTemplate</code> in the same API binding, applying non-blocking <code>WebClient</code> where needed, and <code>RestTemplate</code> where a synchronous request is sufficient.</p> -</div> -<h1 id="summary" class="sect0"><a class="anchor" href="#summary"></a>Summary</h1> -<div class="paragraph"> -<p>Spring Security 5&#8217;s client-side support for OAuth 2 offers the ability to login via an external service as well as the ability to consume that service&#8217;s API using a token obtained from the authentication. This is just the first step toward reconciling Spring&#8217;s OAuth story, which is currently spread across several projects such as Spring Social and Spring Security OAuth.</p> -</div> -<div class="paragraph"> -<p>Future versions of Spring Security will continue to improve upon the OAuth 2 client support as well as take steps toward reconciling Spring&#8217;s story around the server side of OAuth security. In fact, work currently underway for Spring Security 5.1.0 aims to make working with APIs even easier, effectively eliminating the need for the <code>ApiBinding</code> class and much of the plumbing code in the configuration of the <code>Facebook</code> bean shown in this article. Stay tuned!</p> -</div> - - - This Week in Spring - Tuesday March 6th, 2018 - - - - Josh Long - - tag:spring.io,2018-03-05:3202 - 2018-03-05T14:53:00Z - <p>Hi Spring fans and welcome to another installment of <em>This Week in Spring</em>! As I write this it&rsquo;s early morning Tuesday in Sydney, Australia, where I&rsquo;ve been visiting with some of Pivotal&rsquo;s amazing customers, and I&rsquo;m now preparing for my flight to Dubai, in six short hours, where I&rsquo;ll visit some more of Pivotal&rsquo;s amazing customers. Later this week I&rsquo;ll be in Bangalore, India, for the <a href="https://2018.agileindia.org/schedule/">amazing Agile India conference</a>, and then - early next week on Tuesday - I&rsquo;ll be in Boston, MA for the <a href="https://springonetour.io/2018/boston">first SpringOne Tour event</a>. If <a href="http://twitter.com/starbuxman">you&rsquo;re around don&rsquo;t hesitate to say hi</a>, as usual!</p> -<p>This week we&rsquo;ve got a lot of great content celebrating the wonderful release of Spring Boot 2.0, so without further ado let&rsquo;s get to it! </p> -<ul> - <li>Huzzah! Spring Boot co-founder Phil Webb has <a href="https://spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga">just announced Spring Boot 2.0 GA</a>! The new release is <em>packed</em> with too many new features to count so what&rsquo;re you doing? Get over there, read the post, say hi to <a href="http://twitter.com/SpringBoot">the <code>@SpringBoot</code></a> team on Twitter, and <a href="http://start.spring.io">get started</a></li> - <li>Join <a href="https://content.pivotal.io/webinars/mar-13-introducing-spring-boot-2-0-webinar">the Spring Boot 2.0 launch webinar on March 13th</a> to learn about it from the source!</li> - <li>Spring Boot 2.0 is finally, at long last, here! I wrote about the journey to Spring Boot 2.0 in this Twitter thread, reviewing the history of Spring Boot from 1.0, on the 1st April 2014, to this momentous release. Click and join me <a href="https://twitter.com/starbuxman/status/968960930150100992">for a #bootiful trip down memory lane</a></li> - <li>Spring Security lead Rob Winch previews the <a href="https://spring.io/blog/2018/03/05/spring-security-saml-roadmap">Spring Security SAML Roadmap</a></li> - <li>Sandra Gómez has put together a <a href="https://blog-es.mimacom.com/documentacion-apis-spring-rest-docs/">very nice Spanish-language post on documenting APIs with Spring REST Docs</a></li> - <li>Guillermo Tantachuco has put together a really nice overview of Project Riff, the <a href="https://content.pivotal.io/blog/building-functions-with-riff?_lrsc=13c8ab0f-8cde-49d7-a5a3-7dc3d8a562d1">new function-as-a-service offering from Pivotal that runs on top of Kubernetes</a>.</li> - <li>Spring Cloud co-founder Spencer Gibb has just <a href="https://spring.io/blog/2018/03/02/spring-cloud-finchley-m8-is-available">announced Spring Cloud Finchley M8</a>, the first release after the recent Spring Boot 2.0 release.</li> - <li>Spring Security ninja Joe Grandja has just <a href="https://spring.io/blog/2018/03/01/spring-security-oauth-boot-2-auto-config-2-0-0-released">announced the Spring Security OAuth Boot 2.0 auto-configuration has been released</a>. It&rsquo;s used to help users transition between the old Spring Security OAuth 2.x support and the next generation OAuth 2.0 Support in Spring Security 5. It provides users of Spring Security OAuth 2.x the same auto-configuration capabilities in a Spring Boot 2.0 based application that is currently available in Spring Boot 1.5.x. For more details please refer to the documentation.</li> - <li>Spring Security lead Rob Winch chimes in on the state of <a href="https://spring.io/blog/2018/03/01/spring-security-saml-and-this-week-s-saml-vulnerability">Spring Security SAML and this week&rsquo;s SAML Vulnerability</a></li> - <li>Spring Session ninja Vedran Pavić has just announced Spring Session Apple SR1. The new release includes <a href="https://spring.io/blog/2018/03/01/spring-session-apple-sr1-released">a BOM, and a number of other features</a></li> - <li>Project Reactor ninja Simon Baslé <a href="https://spring.io/blog/2018/02/28/reactor-bismuth-sr7-is-out">announced Reactor BISMUTH-SR7</a>. The release was the final release needed for Spring Boot 2.0</li> - <li>Spring Security lead Rob Winch has just <a href="https://spring.io/blog/2018/02/28/spring-security-5-0-3-released">announced Spring Security 5.0.3</a>. This release introduces a major performance improvement.</li> - <li><a href="https://spring.io/blog/2018/02/28/spring-data-kay-sr5-released">Spring Data Kay SR5 released</a></li> - <li>The <a href="https://docs.gradle.org/4.6/release-notes.html">new Gradle 4.6 is out</a> and it is packed with lots of cool features including initial JUnit 5 support, initial bill-of-material (BOM) dependencies and optional dependencies support, <code>--fail-fast</code> for tests, and custom command line flags for tasks.</li> - <li>I recently spoke at the first IBM Index conference where I performed an <a href="https://www.youtube.com/watch?v=CjWADhZBiXE&list=PLpryjkO3KF2yh5AFr3PDgOSIcWoZFGH1E&index=39">updated <em>Cloud Native Java</em></a>. This looks at building reactive microservices with Spring Cloud.</li> - <li>Looking to get into open source? <a href="https://github.com/OpenFeign/feign/issues/646">Open Feign is looking for maintainers</a></li> - <li>This is a monolithic <a href="https://github.com/mzubal/spring-boot-monolith">Spring Boot application that&rsquo;s been designed to be a modular monolith</a>. It&rsquo;s an interesting codebase - check it out!</li> - <li>Marcos Barbero&rsquo;s got a really detailed post on how to build an API gateway (using Spring Cloud Netflix Zuul) that <a href="http://blog.marcosbarbero.com/ha-and-zone-affinity-spring-cloud-eureka/">will resolve and route requests (with Netflix Eureka) to other services in the same zone</a>.</li> - <li>Spring and Cloud Foundry community legend Christophe has done a really nice job <a href="https://medium.com/@christophef/scheduler-with-cloud-foundry-2f98d3daef35">introducing scheduled jobs in Cloud Foundry</a></li> - <li>This T-Mobile talk from SpringOne Platform 2017 features Brendan Aye discussing how T-Mobile built an application <a href="https://www.infoq.com/presentations/t-mobile-cloud-foundry">receiving 12M daily calls with Cloud Foundry, covering the issues encountered and how they dealt with them.</a></li> - <li>Sam McAffee looks at <a href="https://medium.com/startup-patterns/why-enterprise-agile-teams-fail-4ae64f7852d6?_lrsc=c4967b80-f364-4798-912c-4bf359dfd56a">the reasons enterprises fail at agile</a>. These problems are exactly the sorts of things that Pivotal helps address.</li> - <li>Shamik Mitra has a nice post <a href="https://dzone.com/articles/buiding-microservice-using-springboot-and-docker">on building microservices with Spring Boot and Spring Cloud</a></li> - <li>Hot on the heels of the recent Spring Boot 2.0 release, the community project Spring Data Jest has been <a href="https://twitter.com/vanr0y/status/969320129971609600?s=12">updated to Spring Boot 2.0</a>.</li> - <li>Spring Cloud Contract lead Marcin Grzejszczak introduces the theory behind consumer driven <a href="https://www.slideshare.net/MarcinGrzejszczak/stick-to-the-rules-consumer-driven-contracts-201507-confitura">contracts in the slides from one of his presentations</a></li> - <li><a href="https://twitter.com/sdkman_/status/969106848526761984?s=12">Spring Boot 2 on sdkman</a></li> - <li>I really liked this post, <a href="https://www.azul.com/109-new-features-in-jdk-10/"><em>109 New Features In JDK 10</em></a></li> - <li>If you&rsquo;ll indulge me, I think this list of, em, <a href="http://www.java67.com/2018/02/10-books-java-developers-should-read-in.html?m=1#ixzz58PVGvEGA">ten books every Java developer should read in 2018</a> is, well, a must-read.</li> - <li>Michael Simons has a nice <a href="https://jaxenter.de/spring-boot-2-spring-5-68265">piece over on JAXenter on the new Spring Boot 2.0 release</a></li> - <li>Check out our first guide on <a href="https://twitter.com/springcentral/status/969312034738159617">building reactive microservices with Spring</a></li> - <li>Shannon Coen introduces three major improvements to <a href="https://www.cloudfoundry.org/blog/three-improvements-cloud-foundry-routing-security-resiliency-consistency/">routing in Cloud Foundry supporting security, resiliency and consistency</a></li> - <li><a href="https://twitter.com/springcentral/status/969022493129240577">https://twitter.com/springcentral/status/969022493129240577</a></li> - <li>Here are some interesting courses <a href="https://dzone.com/articles/top-5-spring-microservices-courses-with-spring-boo">introducing Spring Boot and Spring Cloud</a></li> - <li>The Java Revisited blog has seven reasons <a href="http://javarevisited.blogspot.sg/2018/01/7-reasons-for-using-spring-to-develop-RESTful-web-service.html">to use Spring to develop RESTful services in Java</a></li> - <li>The <em>Java Revisited</em> blog also has a <a href="http://javarevisited.blogspot.sg/2018/02/top-20-spring-rest-interview-questions-answers-java.html#axzz58PUD5MEC">list of twenty interview questions for Java programmers</a></li> - <li>The <em>Java Revisited</em> blog <em>also</em> looked <a href="http://javarevisited.blogspot.sg/2018/02/what-is-securitycontext-and-SecurityContextHolder-Spring-security.html#axzz58PUD5MEC">at Spring Security&rsquo;s <code>SecurityContext</code> and <code>SecurityContextHolder</code>.</a></li> - <li>This looks promising: Spring Data ninja Christoph Strobl previews <a href="https://twitter.com/SpringData/status/968789942141939713">reactive <code>ClientSession</code> support for MongoDB</a>.</li> -</ul> - - - Spring Security SAML Roadmap - - - - Rob Winch - - tag:spring.io,2018-03-02:3198 - 2018-03-05T13:54:00Z - <div class="paragraph"> -<p>The Spring Security SAML project has been an integral part of the Spring ecosystem since its inception nearly 9 years ago. This critically important project was born through the incredible effort and contributions of <a href="https://github.com/vschafer">Vladimír Schäfer</a>. I’d like to take the time to personally thank Vladimír and our fantastic community for their tireless work. Without all of their efforts, this project would not be what it is today.</p> -</div> -<div class="paragraph"> -<p>Vladimír, our amazing community, and the Spring engineering team are planning to team up to enhance Spring Security SAML to achieve the following primary goals:</p> -</div> -<div class="ulist"> -<ul> -<li> -<p>Ensuring all dependencies are up to date</p> -</li> -<li> -<p>Ensure all Spring Security APIs do not expose any dependency APIs</p> -</li> -<li> -<p>Graduate Spring Security SAML from an extension into Spring Security proper</p> -</li> -</ul> -</div> -<div class="paragraph"> -<p>Starting today <a href="https://github.com/fhanik">Filip Hanik</a> will be working full time on Spring Security SAML to help the community push these goals forward in a timely manner. If you would like to get involved, please <a href="https://github.com/spring-projects/spring-security-saml">join us</a>. You may also ping me in the comments on this blog or ping us on Twitter at <a href="https://twitter.com/rob_winch">@rob_winch</a> and <a href="https://twitter.com/fhanik">@fhanik</a>.</p> -</div> -<div class="paragraph"> -<p><a href="http://projects.spring.io/spring-security-saml/">Project Site</a> | -<a href="https://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/">Reference</a> | <a href="http://stackoverflow.com/questions/tagged/spring-security">Help</a></p> -</div> - - - Spring Cloud Finchley M8 is available - - - - Spencer Gibb - - tag:spring.io,2018-03-02:3201 - 2018-03-02T21:21:05Z - <p>On behalf of the community, I am pleased to announce that the Milestone 8 (M8) of the <a href="https://cloud.spring.io">Spring Cloud Finchley</a> Release Train is available today. The release can be found in <a href="https://repo.spring.io/milestone/">Spring Milestone</a> repository. You can check out the Finchley <a href="https://github.com/spring-projects/spring-cloud/wiki/Spring-Cloud-Finchley-Release-Notes">release notes for more information</a>.</p><h2><a href="#notable-changes-in-the-finchley-release-train" class="anchor" name="notable-changes-in-the-finchley-release-train"></a>Notable Changes in the Finchley Release Train</h2> -<p>Finchley.M8 is compatible with Spring Boot 2.0.0.RELEASE.</p><h3><a href="#spring-cloud-gateway" class="anchor" name="spring-cloud-gateway"></a>Spring Cloud Gateway</h3> -<p>Some bug fixes and small configuration enhancements.</p><h3><a href="#spring-cloud-bus" class="anchor" name="spring-cloud-bus"></a>Spring Cloud Bus</h3> -<p>Fixes for custom remote events.</p><h3><a href="#spring-cloud-security" class="anchor" name="spring-cloud-security"></a>Spring Cloud Security</h3> -<p>Updated to spring-security-oauth2-autoconfigure 2.0.0.RELEASE.</p><h3><a href="#spring-cloud-config" class="anchor" name="spring-cloud-config"></a>Spring Cloud Config</h3> -<p>Support for <a href="http://gitee.com">Gitee</a> webhooks.</p><h3><a href="#spring-cloud-stream" class="anchor" name="spring-cloud-stream"></a>Spring Cloud Stream</h3> -<p>Please see the Elmhurst.RC2 <a href="https://github.com/spring-cloud/spring-cloud-stream-starters/releases/tag/vElmhurst.RC2">release notes</a>.</p> -<p>The following modules were updated as part of Finchley.M8:</p> -<table> - <thead> - <tr> - <th>Module </th> - <th>Version </th> - </tr> - </thead> - <tbody> - <tr> - <td>Spring Cloud Gateway </td> - <td>2.0.0.M8 </td> - </tr> - <tr> - <td>Spring Cloud Bus </td> - <td>2.0.0.M7 </td> - </tr> - <tr> - <td>Spring Cloud Security </td> - <td>2.0.0.M3 </td> - </tr> - <tr> - <td>Spring Cloud Commons </td> - <td>2.0.0.M8 </td> - </tr> - <tr> - <td>Spring Cloud Config </td> - <td>2.0.0.M8 </td> - </tr> - <tr> - <td>Spring Cloud Stream </td> - <td>Elmhurst.RC2 </td> - </tr> - </tbody> -</table> -<p>As always, we welcome feedback on <a href="https://github.com/spring-cloud/">GitHub</a>, on <a href="https://gitter.im/spring-cloud/spring-cloud">Gitter</a>, on <a href="http://stackoverflow.com/questions/tagged/spring-cloud">Stack Overflow</a>, or on <a href="https://twitter.com/SpringCloud">Twitter</a>.</p> -<p>To get started with Maven with a BOM (dependency management only):</p> -<pre><code class="prettyprint">&lt;repositories&gt; - &lt;repository&gt; - &lt;id&gt;spring-milestones&lt;/id&gt; - &lt;name&gt;Spring Milestones&lt;/name&gt; - &lt;url&gt;http://repo.spring.io/milestone&lt;/url&gt; - &lt;snapshots&gt; - &lt;enabled&gt;false&lt;/enabled&gt; - &lt;/snapshots&gt; - &lt;/repository&gt; -&lt;/repositories&gt; -&lt;dependencyManagement&gt; - &lt;dependencies&gt; - &lt;dependency&gt; - &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; - &lt;artifactId&gt;spring-cloud-dependencies&lt;/artifactId&gt; - &lt;version&gt;Finchley.M8&lt;/version&gt; - &lt;type&gt;pom&lt;/type&gt; - &lt;scope&gt;import&lt;/scope&gt; - &lt;/dependency&gt; - &lt;/dependencies&gt; -&lt;/dependencyManagement&gt; -&lt;dependencies&gt; - &lt;dependency&gt; - &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; - &lt;artifactId&gt;spring-cloud-starter-config&lt;/artifactId&gt; - &lt;/dependency&gt; - &lt;dependency&gt; - &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; - &lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client&lt;/artifactId&gt; - &lt;/dependency&gt; - ... -&lt;/dependencies&gt; -</code></pre> -<p>or with Gradle:</p> -<pre><code class="prettyprint">buildscript { - dependencies { - classpath &quot;io.spring.gradle:dependency-management-plugin:1.0.2.RELEASE&quot; - } -} - -repositories { - maven { - url &#39;http://repo.spring.io/milestone&#39; - } -} - -apply plugin: &quot;io.spring.dependency-management&quot; - -dependencyManagement { - imports { - mavenBom &#39;org.springframework.cloud:spring-cloud-dependencies:Finchley.M8&#39; - } -} - -dependencies { - compile &#39;org.springframework.cloud:spring-cloud-starter-config&#39; - compile &#39;org.springframework.cloud:spring-cloud-starter-netflix-eureka-client&#39; - ... -} -</code></pre> - - - Spring Security OAuth Boot 2 Auto-config 2.0.0 Released - - - - Joe Grandja - - tag:spring.io,2018-03-01:3197 - 2018-03-01T20:53:06Z - <div class="paragraph"> -<p>I&#8217;m pleased to announce the release of <a href="https://github.com/spring-projects/spring-security-oauth2-boot">Spring Security OAuth Boot 2 Auto-config</a> 2.0.0.</p> -</div> -<div class="paragraph"> -<p>This project is intended to be used to help users transition between the old Spring Security OAuth 2.x support and the <a href="https://spring.io/blog/2018/01/30/next-generation-oauth-2-0-support-with-spring-security">Next Generation OAuth 2.0 Support in Spring Security 5</a>. It provides users of Spring Security OAuth 2.x the same auto-configuration capabilities in a Spring Boot 2.0 based application that is currently available in Spring Boot 1.5.x. For more details please refer to the <a href="https://docs.spring.io/spring-security-oauth2-boot/docs/current-SNAPSHOT/reference/htmlsingle/">documentation</a>.</p> -</div> -<div class="paragraph"> -<p><a href="https://github.com/spring-projects/spring-security-oauth2-boot/">GitHub</a> | -<a href="https://docs.spring.io/spring-security-oauth2-boot/docs/current-SNAPSHOT/reference/htmlsingle/">Reference</a> | <a href="http://stackoverflow.com/questions/tagged/spring-security">Help</a></p> -</div> - - - Spring Security SAML and this week's SAML Vulnerability - - - - Rob Winch - - tag:spring.io,2018-02-28:3194 - 2018-03-01T19:23:00Z - <div class="paragraph"> -<p>This week, the software world found out that <a href="https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations">SAML Vulnerabilities Affecting Multiple Implementations</a> were discovered. If you use Spring Security SAML&#8217;s defaults, you are not impacted by this vulnerability.</p> -</div> -<div class="paragraph"> -<p>The underlying implementation that Spring Security SAML uses is Shibboleth&#8217;s OpenSAML Java library. The OpenSAML Java implementation was not listed in the libraries that contain the vulnerability (Shibboleth openSAML C++ was vulnerable). However, if the <code>ParserPool</code> <a href="https://github.com/spring-projects/spring-security-saml/issues/228">has been customized</a>, you may be impacted.</p> -</div> -<div class="sect1"> -<h2 id="not-safe-configurations"><a class="anchor" href="#not-safe-configurations"></a>NOT Safe Configurations</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>Specifically, if the application explicitly sets the <code>BasicParserPool</code> or the <code>StaticBasicParserPool</code> to have <code>ignoreComments = false</code>, it is vulnerable to the exploit. For example, the following configurations are vulnerable:</p> -</div> -<div class="paragraph"> -<p>Unsafe Java Configuration with <code>StaticBasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">// NOT secure!!! -@Bean(initMethod = "initialize") -ParserPool parserPool() { - StaticBasicParserPool pool = new StaticBasicParserPool(); - // DO NOT set ignoreComments = false opens up exploit - pool.setIgnoreComments(false); - return pool; -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Unsafe Java Configuration with <code>BasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">// NOT secure!!! -@Bean -ParserPool parserPool() { - BasicParserPool pool = new BasicParserPool(); - // DO NOT set ignoreComments = false opens up exploit - pool.setIgnoreComments(false); - return pool; -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Unsafe XML Configuration with <code>StaticBasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;!-- NOT secure!!! --&gt; -&lt;bean id="parserPool" init-method="initialize" - class="org.opensaml.xml.parse.StaticBasicParserPool"&gt; - &lt;!-- DO NOT set ignoreComments = false opens up exploit --&gt; - &lt;property name="ignoreComments" value="false"/&gt; -&lt;/bean&gt;</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Unsafe XML Configuration with <code>BasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;!-- NOT secure!!! --&gt; -&lt;bean id="parserPool" class="org.opensaml.xml.parse.BasicParserPool"&gt; - &lt;!-- DO NOT set ignoreComments = false opens up exploit --&gt; - &lt;property name="ignoreComments" value="false"/&gt; -&lt;/bean&gt;</code></pre> -</div> -</div> -</div> -</div> -<div class="sect1"> -<h2 id="safe-configurations"><a class="anchor" href="#safe-configurations"></a>Safe Configurations</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>The following configurations are safe:</p> -</div> -<div class="paragraph"> -<p>Safe Java Configuration with <code>StaticBasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">@Bean(initMethod = "initialize") -ParserPool parserPool() { - StaticBasicParserPool pool = new StaticBasicParserPool(); - // ignoreComments default is true (safe) - return pool; -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Safe Java Configuration with <code>BasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">@Bean(initMethod = "initialize") -ParserPool parserPool() { - BasicParserPool pool = new BasicParserPool(); - // ignoreComments default is true (safe) - return pool; -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Safe XML Configuration with <code>StaticBasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;bean id="parserPool" class="org.opensaml.xml.parse.StaticBasicParserPool"&gt; - &lt;!-- ignoreComments default is true (safe) --&gt; -&lt;/bean&gt;</code></pre> -</div> -</div> -<div class="paragraph"> -<p>Safe XML Configuration with <code>BasicParserPool</code></p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;bean id="parserPool" init-method="initialize" - class="org.opensaml.xml.parse.BasicParserPool"&gt; - &lt;!-- ignoreComments default is true (safe) --&gt; -&lt;/bean&gt;</code></pre> -</div> -</div> -</div> -</div> -<div class="sect1"> -<h2 id="unsafe-paserpool-configurations"><a class="anchor" href="#unsafe-paserpool-configurations"></a>Unsafe PaserPool Configurations</h2> -<div class="sectionbody"> -<div class="paragraph"> -<p>Now is probably a good time to review additional <a href="https://shibboleth.net/community/advisories/secadv_20131213.txt">unsafe configurations</a>. Specifically, the following <code>ParserPool</code> properties are UNSAFE:</p> -</div> -<div class="ulist"> -<ul> -<li> -<p>It is UNSAFE to set <code>expandEntityReferences</code> to <code>true</code>.</p> -</li> -<li> -<p>It is UNSAFE to set <code>javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING</code> to <code>false</code>.</p> -</li> -<li> -<p>It is UNSAFE to set <code><a href="http://apache.org/xml/features/disallow-doctype-dec" class="bare">http://apache.org/xml/features/disallow-doctype-dec</a></code> to <code>false</code>. This is a Xerces-specific feature, including derivatives such as the internal JAXP implementations supplied with the Oracle and OpenJDK JREs. For other JAXP implementations, read the documentation for your particular implementation for how to achieve a similar configuration.</p> -</li> -<li> -<p>It is UNSAFE to set <code>ignoreComments</code> to <code>false</code> (as discussed in this article)</p> -</li> -</ul> -</div> -</div> -</div> - - - Spring Session Apple SR1 Released - - - - Rob Winch - - tag:spring.io,2018-03-01:3196 - 2018-03-01T14:43:55Z - <div class="paragraph"> -<p><em>This post was authored by <a href="https://github.com/vpavic">Vedran Pavić</a></em></p> -</div> -<div class="paragraph"> -<p>On behalf of the community I&#8217;m pleased to announce the release of Spring Session BOM <code>Apple-SR1</code>. With the changes to Spring Session modules described in <a href="https://spring.io/blog/2018/01/16/spring-session-2-0-0-released#spring-session-modules"><code>2.0.0.RELEASE</code> announcement</a>, the addition of <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies">bill of materials</a> (BOM) module was a logical next step.</p> -</div> -<div class="admonitionblock note"> -<table> -<tr> -<td class="icon"> -<div class="title">Note</div> -</td> -<td class="content"> -The originally released <code>Apple-RELEASE</code> contained a glitch in published BOM so make sure you use <code>Apple-SR1</code>. -</td> -</tr> -</table> -</div> -<div class="paragraph"> -<p>The BOM provides dependency management for Spring Session core modules (which include Data Redis, Hazelcast and JDBC) and Spring Session Data MongoDB. The following table provides an overview of all the included modules and their respective versions:</p> -</div> -<table class="tableblock frame-all grid-all spread"> -<colgroup> -<col style="width: 50%;"> -<col style="width: 50%;"> -</colgroup> -<thead> -<tr> -<th class="tableblock halign-left valign-top">Module</th> -<th class="tableblock halign-left valign-top">Version</th> -</tr> -</thead> -<tbody> -<tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">Spring Session Core</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2.0.2.RELEASE</code></p></td> -</tr> -<tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">Spring Session Data MongoDB</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2.0.2.RELEASE</code></p></td> -</tr> -<tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">Spring Session Data Redis</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2.0.2.RELEASE</code></p></td> -</tr> -<tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">Spring Session Hazelcast</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2.0.2.RELEASE</code></p></td> -</tr> -<tr> -<td class="tableblock halign-left valign-top"><p class="tableblock">Spring Session JDBC</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2.0.2.RELEASE</code></p></td> -</tr> -</tbody> -</table> -<div class="sect2"> -<h3 id="spring-session"><a class="anchor" href="#spring-session"></a>Spring Session</h3> -<div class="paragraph"> -<p>The <code>2.0.2.RELEASE</code> maintenance release contains a few bug fixes and dependency upgrades. You can find the complete details of the release in the <a href="https://github.com/spring-projects/spring-session/milestone/32?closed=1">changelog</a>.</p> -</div> -<div class="paragraph"> -<p><a href="https://github.com/spring-projects/spring-session">GitHub</a> | <a href="https://github.com/spring-projects/spring-session/issues">Issues</a> | <a href="https://docs.spring.io/spring-session/docs/2.0.2.RELEASE/reference/html5/">Documentation</a></p> -</div> -</div> -<div class="sect2"> -<h3 id="spring-session-data-mongodb"><a class="anchor" href="#spring-session-data-mongodb"></a>Spring Session Data MongoDB</h3> -<div class="paragraph"> -<p>The <code>2.0.2.RELEASE</code> maintenance release contains Jackson serialization support improvements and dependency upgrades.</p> -</div> -<div class="paragraph"> -<p><a href="https://github.com/spring-projects/spring-session-data-mongodb">GitHub</a> | <a href="https://github.com/spring-projects/spring-session-data-mongodb/issues">Issues</a> | <a href="https://docs.spring.io/spring-session-data-mongodb/docs/2.0.2.RELEASE/reference/htmlsingle/">Documentation</a></p> -</div> -</div> -<h1 id="using-the-bom" class="sect0"><a class="anchor" href="#using-the-bom"></a>Using the BOM</h1> -<div class="paragraph"> -<p>With Maven:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;dependencyManagement&gt; - &lt;dependencies&gt; - &lt;dependency&gt; - &lt;groupId&gt;org.springframework.session&lt;/groupId&gt; - &lt;artifactId&gt;spring-session-bom&lt;/artifactId&gt; - &lt;version&gt;Apple-SR1&lt;/version&gt; - &lt;type&gt;pom&lt;/type&gt; - &lt;scope&gt;import&lt;/scope&gt; - &lt;/dependency&gt; - &lt;/dependencies&gt; -&lt;/dependencyManagement&gt; -&lt;dependencies&gt; - &lt;dependency&gt; - &lt;groupId&gt;org.springframework.session&lt;/groupId&gt; - &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt; - &lt;/dependency&gt; - ... -&lt;/dependencies&gt;</code></pre> -</div> -</div> -<div class="paragraph"> -<p>With Gradle:</p> -</div> -<div class="listingblock"> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-gradle" data-lang="gradle">plugins { - id 'io.spring.dependency-management' version '1.0.4.RELEASE' -} - -dependencyManagement { - imports { - mavenBom 'org.springframework.session:spring-session-bom:Apple-SR1' - } -} - -dependencies { - compile 'org.springframework.session:spring-session-data-redis' - ... -}</code></pre> -</div> -</div> -<div class="paragraph"> -<p><a href="https://projects.spring.io/spring-session/">Project Page</a> | <a href="https://stackoverflow.com/questions/tagged/spring-session">Stack Overflow</a> | <a href="https://gitter.im/spring-projects/spring-session">Gitter</a></p> -</div> - - - Spring Boot 2.0 goes GA - - - - Phil Webb - - tag:spring.io,2018-03-01:3195 - 2018-03-01T07:05:00Z - <p>On behalf of the team, it is my very great pleasure to announce that Spring Boot 2.0 is now generally available as <code>2.0.0.RELEASE</code> from <a href="http://repo.spring.io/release/">repo.spring.io</a> and <a href="https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.springframework.boot%22">Maven Central</a>!</p> -<p>This release is the culmination of 17 months work and over <a href="https://github.com/spring-projects/spring-boot/compare/6643ec37130ad589b03d747aa6171fc5e8652e08...7d7cf6aa35b872596b6dd2078dc3682e41e25a2a">6800 commits</a> by 215 different individuals. A massive thank you to everyone that has contributed, and to all the early adopters that have been providing vital feedback on the milestones.</p> -<p>This is the first major revision of Spring Boot since 1.0 was released almost 4 years ago. It&rsquo;s also the first GA version of Spring Boot that provides support for <a href="https://spring.io/blog/2017/09/28/spring-framework-5-0-goes-ga">Spring Framework 5.0</a>. </p> -<p>Highlights of the new release include:</p> -<ul> - <li>A Java 8 baseline, and Java 9 support.</li> - <li>Reactive web programming support with Spring WebFlux/WebFlux.fn.</li> - <li>Auto-configuration and starter POMs for reactive Spring Data Cassandra, MongoDB, Couchbase and Redis.</li> - <li>Support for embedded Netty.</li> - <li>HTTP/2 for Tomcat, Undertow and Jetty.</li> - <li>Kotlin support.</li> - <li>A brand new actuator architecture, with support for Spring MVC, WebFlux and Jersey.</li> - <li><a href="http://micrometer.io/">Micrometer</a> based metrics with exporters for Atlas, Datadog, Ganglia, Graphite, Influx, JMX, New Relic, Prometheus, SignalFx, StatsD and Wavefront.</li> - <li>Quartz scheduler support.</li> - <li>Greatly simplified security auto-configuration.</li> -</ul> -<p>There&rsquo;s far too many features to list them all here in detail, so head over to the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes">release notes</a> page on our wiki, or the <a href="https://content.pivotal.io/blog/opening-doors-with-spring-boot-2-0">launch blog on Pivotal.io</a> to find out more. If you&rsquo;re upgrading an existing Spring Boot application you&rsquo;ll also want to check out the <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide">migration guide</a>. If you just want to get started, you can easily bootstrap a new project on <a href="https://start.spring.io">start.spring.io</a>.</p> -<p>Over the next couple of weeks we&rsquo;ll be publishing blog posts that cover some Spring Boot 2.0 features in detail. You should also join us for <a href="https://content.pivotal.io/webinars/mar-13-introducing-reactive-spring-boot-2-0-webinar">a webinar on March 13th</a> where we&rsquo;ll dive deeper into what upgrading looks like. </p> -<p>Thanks again to everyone that has contributed to Spring and Spring Boot over the years! A special thank you also to the developers of the other projects in the Spring portfolio, without whom there would be no Spring Boot.</p> -<p><a href="http://projects.spring.io/spring-boot/">Project Page</a> | <a href="https://github.com/spring-projects/spring-boot">GitHub</a> | <a href="https://github.com/spring-projects/spring-boot/issues">Issues</a> | <a href="http://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle">Documentation</a> | <a href="http://stackoverflow.com/questions/tagged/spring-boot">Stack Overflow</a> | <a href="https://gitter.im/spring-projects/spring-boot">Gitter</a></p> - - - Reactor BISMUTH-SR7 is out! - - - - Simon Baslé - - tag:spring.io,2018-02-27:3187 - 2018-02-28T17:20:00Z - <div class="paragraph"> -<p>On behalf of the whole Reactor Team, it is my pleasure to announce that the -Reactor <code>BISMUTH-SR7</code> release train is now available. As always, we recommend -using the <a href="http://projectreactor.io/docs/core/release/reference/docs/index.html#getting"><code>reactor-bom</code> Bill Of Material</a>.</p> -</div> -<div class="paragraph"> -<p>In time for Spring Boot 2, this release train comes with improvements and -bugfixes to core, extras, and reactor-netty.</p> -</div> -<div class="paragraph"> -<p><em>This blog post highlights -the most significant changes in both SR7 and last week&#8217;s SR6 release trains.</em></p> -</div> -<h1 id="reactor-core-3-1-5" class="sect0"><a class="anchor" href="#reactor-core-3-1-5"></a>Reactor-Core 3.1.5</h1> -<div class="quoteblock"> -<blockquote> -<div class="paragraph"> -<p>What&#8217;s new since <code>3.1.3</code>? See the full release notes of the -<a href="https://github.com/reactor/reactor-core/releases/tag/v3.1.4.RELEASE"><code>3.1.4.RELEASE</code></a> -and the <a href="https://github.com/reactor/reactor-core/releases/tag/v3.1.5.RELEASE"><code>3.1.5.RELEASE</code></a>. -Core changes include more than 15 improvements and bugfixes.</p> -</div> -</blockquote> -</div> -<div class="paragraph"> -<p>A few new operators have landed in this release: For example, <code>mergeOrdered</code> has been added to <code>Flux</code> and <code>ParallelFlux</code>. It lets you merge multiple sources by continuously picking the smallest available value among all the sources, as defined by a provided <code>Comparator</code>.</p> -</div> -<div class="paragraph"> -<p>For convenience, we also added <code>Flux#concatWithValues(T&#8230;&#8203;)</code> and <code>Mono#thenReturn(T)</code> , allowing easy concatenation/continuation with scalar values.</p> -</div> -<div class="paragraph"> -<p>To kickstart our introspection theme of 2018, our implementations of <code>Scheduler</code> are <code>Scannable</code> and are thus meaningful when used with <code>Scannable#from</code>.</p> -</div> -<div class="paragraph"> -<p>Notable update considerations include the fix of <code>Mono.zip</code> behavior, aligning it to that of <code>Flux.zip</code>: It now cancels in-flight sources as soon as one source completes with <strong>empty</strong> or throws an error. If all the <code>Mono</code> sources you <code>zip</code> together are guaranteed to be value, this changes nothing.</p> -</div> -<div class="admonitionblock tip"> -<table> -<tr> -<td class="icon"> -<div class="title">Tip</div> -</td> -<td class="content"> -If you don&#8217;t care about the results but want to make sure the whole of N sources have all completed, prefer using <code>Mono.when</code>. In particular, look out for a <code>.zip(&#8230;&#8203;).then()</code> pattern, which should be replaced by <code>.when(&#8230;&#8203;)</code>. -</td> -</tr> -</table> -</div> -<div class="paragraph"> -<p>Another change that is less likely to have been noticed by our users is fixing the visibility of a couple of classes that were never intended for the public:</p> -</div> -<div class="ulist"> -<ul> -<li> -<p>The MPSC Queue implementation from 3.1.3.RELEASE is now exposed <strong>only</strong> as a plain <code>Queue</code> through <code>Queues.unboundedMultiproducer()</code>. This concrete class is now package-private.</p> -</li> -<li> -<p><code>FluxDelaySequence</code>, <code>FluxIndex</code> and <code>FluxIndexFuseable</code> are now also package-private.</p> -</li> -</ul> -</div> -<div class="paragraph"> -<p>Bug fixes also include a few GC-friendly fixes, stopping unnecessary retaining of <code>elastic</code> <code>Scheduler</code> workers and event-loop based Processors' background task in case of <code>forceShutdown()</code>.</p> -</div> -<h1 id="reactor-addons-3-1-6" class="sect0"><a class="anchor" href="#reactor-addons-3-1-6"></a>Reactor Addons 3.1.6</h1> -<div class="quoteblock"> -<blockquote> -<div class="paragraph"> -<p>What&#8217;s new since <code>3.1.4</code>? See the full release notes of the -<a href="https://github.com/reactor/reactor-addons/releases/tag/v3.1.5.RELEASE"><code>3.1.5.RELEASE</code></a> -and the <a href="https://github.com/reactor/reactor-addons/releases/tag/v3.1.6.RELEASE"><code>3.1.6.RELEASE</code></a>.</p> -</div> -</blockquote> -</div> -<div class="paragraph"> -<p>Addons has seen a couple of fixes and improvements.</p> -</div> -<div class="paragraph"> -<p>The newly introduced opinionated helper for caching was released with a few package-private interfaces that should have been <code>public</code>. This is embarrassing. :( It has now been fixed.</p> -</div> -<div class="paragraph"> -<p>A new <code>Repeat#create</code> factory method variant has been introduced. It allows combining a <code>Predicate</code> and a maximum amount of repeat attempts.</p> -</div> -<div class="admonitionblock note"> -<table> -<tr> -<td class="icon"> -<div class="title">Note</div> -</td> -<td class="content"> -Speaking of <code>Repeat</code> and its sister, <code>Retry</code>, some user noticed that the default behavior feels a bit misaligned with the core&#8217;s dumbed-down <code>repeat()</code> and <code>retry()</code> variants: Without further configuration, the helpers are capped at a single attempt, where the core versions keep on repeating or retrying. Furthermore, this is changed by chaining in <code>timeout</code>, which switches to an uncapped attempt behavior (which has been clarified in its javadoc). -<br> -<br> -We are thinking about realigning this behavior with core in <code>3.2.0</code>. Please chime in on the <a href="https://github.com/reactor/reactor-addons/issues/149">issue</a> if you have any insight or feedback. -</td> -</tr> -</table> -</div> -<h1 id="reactor-netty-0-7-5" class="sect0"><a class="anchor" href="#reactor-netty-0-7-5"></a>Reactor-Netty 0.7.5</h1> -<div class="quoteblock"> -<blockquote> -<div class="paragraph"> -<p>What&#8217;s new since <code>0.7.3</code>? See the full release notes of the -<a href="https://github.com/reactor/reactor-netty/releases/tag/v0.7.4.RELEASE"><code>0.7.4.RELEASE</code></a> -and the <a href="https://github.com/reactor/reactor-netty/releases/tag/v0.7.5.RELEASE"><code>0.7.5.RELEASE</code></a>.</p> -</div> -</blockquote> -</div> -<div class="paragraph"> -<p>Reactor-Netty has also seen quite a few fixes, mostly around pooling and the connection lifecycle.</p> -</div> -<div class="paragraph"> -<p>New goodies include support for expect 100-continue, as well as better Reactor <code>Context</code> handling, by passing Netty pipelines to it when relevant.</p> -</div> -<div class="paragraph"> -<p>Compression support has also been improved, allowing per-response activation of compression. -This slightly supersedes the <code>minCompressionThreshold</code> feature that was already in place (albeit it was not 100% reliable). It is based on a <code>BiPredicate&lt;Req,Resp&gt;</code> that could, for instance, activate compression only on certain content types. The minimum compression threshold option is backed by a <code>content-length</code> predicate.</p> -</div> -<h1 id="what-s-next" class="sect0"><a class="anchor" href="#what-s-next"></a>What&#8217;s Next</h1> -<div class="paragraph"> -<p>We encourage you to grab these new artifacts, but, if you&#8217;re a Spring Boot user, you&#8217;ll be delighted to learn you&#8217;ll be rewarded with the same goodies as soon as you upgrade to the upcoming Spring Boot 2.0.0 GA release. :)</p> -</div> -<div class="paragraph"> -<p>As always, feedback is welcome. Come and discuss this release on <a href="https://gitter.im/reactor/reactor">Gitter</a> or consider opening an <a href="https://github.com/reactor/reactor-core/issues/new">issue on GitHub</a>.</p> -</div> -<div class="paragraph"> -<p><strong>In the meantime, happy reactive coding!</strong></p> -</div> - - - Spring Security 5.0.3 Released - - - - Rob Winch - - tag:spring.io,2018-02-28:3193 - 2018-02-28T16:53:50Z - <div class="paragraph"> -<p>I&#8217;m pleased to announce the release of Spring Security 5.0.3.</p> -</div> -<div class="paragraph"> -<p>The main purpose of this release is to provide a significant <a href="https://github.com/spring-projects/spring-security/issues/5040">performance improvement</a> for Spring Security WebFlux. It also contains dependency updates to prepare for Spring Boot 2.0.0.RELEASE. For a complete list of changes, refer to the <a href="https://github.com/spring-projects/spring-security/milestone/111?closed=1">changelog</a>.</p> -</div> -<div class="paragraph"> -<p><a href="http://projects.spring.io/spring-security/">Project Site</a> | -<a href="http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/">Reference</a> | <a href="http://stackoverflow.com/questions/tagged/spring-security">Help</a></p> -</div> - - - Spring Data Kay SR5 released - - - - Mark Paluch - - tag:spring.io,2018-02-28:3192 - 2018-02-28T11:35:13Z - <p>On behalf of the Spring Data team, I&rsquo;d like to announce the fifth service release of the Kay release train in prospect of Spring Boot 2.0 GA.</p> -<p>This service release ships with <a href="https://jira.spring.io/issues/?filter=15839">23 tickets fixed</a>. Kay SR5 will be picked up by Spring Boot 2.0 GA for your convenience and is a strongly recommended upgrade to users of the Kay release train. </p> -<p>You can find all details within the linked changelogs.</p> -<ul> - <li>Spring Data Commons 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-commons/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/commons/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/commons/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/commons/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data JPA 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-jpa/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/jpa/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/jpa/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/jpa/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data for Apache Cassandra 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-cassandra/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/cassandra/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/cassandra/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/cassandra/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data KeyValue 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-keyvalue/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/keyvalue/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/keyvalue/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/keyvalue/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data for Apache Solr 3.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-solr/3.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/solr/docs/3.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/solr/docs/3.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/solr/docs/3.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Gemfire 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-gemfire/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/gemfire/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/gemfire/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/gemfire/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Neo4j 5.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-neo4j/5.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/neo4j/docs/5.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/neo4j/docs/5.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/neo4j/docs/5.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data MongoDB 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-mongodb/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/mongodb/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/mongodb/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/mongodb/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data for Apache Geode 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-geode/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/geode/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/geode/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/geode/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data LDAP 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-ldap/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/ldap/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/ldap/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/ldap/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Envers 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-envers/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/envers/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/envers/docs/2.0.5.RELEASE/reference/html">Documentation</a></li> - <li>Spring Data REST 3.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-rest-webmvc/3.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/rest/docs/3.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/rest/docs/3.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/rest/docs/3.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Redis 2.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-redis/2.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/redis/docs/2.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/redis/docs/2.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/redis/docs/2.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Elasticsearch 3.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-elasticsearch/3.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/elasticsearch/docs/3.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/elasticsearch/docs/3.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/elasticsearch/docs/3.0.5.RELEASE/changelog.txt">Changelog</a></li> - <li>Spring Data Couchbase 3.0.5 - <a href="https://repo.spring.io/libs-release/org/springframework/data/spring-data-couchbase/3.0.5.RELEASE">Artifacts</a> - <a href="http://docs.spring.io/spring-data/couchbase/docs/3.0.5.RELEASE/api">JavaDocs</a> - <a href="http://docs.spring.io/spring-data/couchbase/docs/3.0.5.RELEASE/reference/html">Documentation</a> - <a href="http://docs.spring.io/spring-data/couchbase/docs/3.0.5.RELEASE/changelog.txt">Changelog</a></li> -</ul> - - diff --git a/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.update/623127801.xml b/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.update/623127801.xml deleted file mode 100644 index b83d3fb..0000000 --- a/TreePLE-Spring/.metadata/.plugins/org.springsource.ide.eclipse.dashboard.ui/feeds/dashboard.feeds.update/623127801.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - Spring Tool Suites Updates - https://spring.io/tools - This feeds imforms about important updates relevant to users of STS. - Feeder 2.0.7(1195) http://reinventedsoftware.com/feeder/ - http://blogs.law.harvard.edu/tech/rss - en-us - sts@springsource.com - Fri, 22 Dec 2017 10:38:33 +0100 - Fri, 22 Dec 2017 10:38:33 +0100 - - - - Thanks for installing STS 3.9.2 - http://spring.io/tools -

Pivotal has released an update to Spring Tool Suite (STS), the best Eclipse-powered development environment for building Spring powered enterprise application.

-

Please review the following documents:

-
  • 3.9.2 New & Noteworthy
  • ]]>
    - Fri, 22 Dec 2017 12:13:33 +0100 - version=[3.9.2.201712210818-RELEASE,4.0.0) - - thanks-for-installing-sts-392 -
    - - - STS 3.9.2 has been released - http://spring.io/tools -

    Pivotal has released an update to Spring Tool Suite (STS), the best Eclipse-powered development environment for building Spring powered enterprise application.

    It is recommend to update as soon as possible.

    -

    Please review the following documents:

    -
  • 3.9.2 New & Noteworthy
  • ]]>
    - Fri, 22 Oct 2017 12:12:33 +0100 - version=[0,3.9.2.201712210818-RELEASE) - severity=important - sts-392-released -
    - -
    -
    diff --git a/TreePLE-Spring/.metadata/version.ini b/TreePLE-Spring/.metadata/version.ini deleted file mode 100644 index ee985b1..0000000 --- a/TreePLE-Spring/.metadata/version.ini +++ /dev/null @@ -1,3 +0,0 @@ -#Thu Mar 15 20:20:20 EDT 2018 -org.eclipse.core.runtime=2 -org.eclipse.platform=4.7.1.v20171009-0410 diff --git a/TreePLE-Spring/build.gradle b/TreePLE-Spring/build.gradle index db111a7..f2e5a8d 100644 --- a/TreePLE-Spring/build.gradle +++ b/TreePLE-Spring/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - springBootVersion = '1.5.9.RELEASE' + springBootVersion = '2.1.2.RELEASE' } repositories { mavenCentral() @@ -12,20 +12,14 @@ buildscript { apply plugin: 'java' apply plugin: 'application' -apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' -apply plugin: 'war' +apply plugin: 'io.spring.dependency-management' group = 'ca.mcgill.ecse321' -version = '1.0.0' +version = '1.0' sourceCompatibility = 1.8 mainClassName = 'ca.mcgill.ecse321.treeple.TreePLESpringApplication' -war { - baseName = 'treeple' - version = '1.0.0' -} - repositories { mavenCentral() } @@ -34,29 +28,24 @@ configurations { providedRuntime } +test { + systemProperty 'spring.profiles.active', 'test' +} + +task stage(dependsOn: 'assemble') + dependencies { - compile('com.google.guava:guava:23.5-jre') compile('org.apache.commons:commons-lang3:3.7') compile('org.apache.httpcomponents:httpclient:4.5.5') + compile('org.json:json:20180130') + compile('org.mindrot:jbcrypt:0.4') compile('org.modelmapper:modelmapper:1.1.1') compile('org.springframework.boot:spring-boot-starter-web') - compile('org.springframework.boot:spring-boot-starter-actuator') - compile('org.springframework:spring-webmvc:4.2.6.RELEASE') - compile('com.thoughtworks.xstream:xstream:1.4.7') - compile('org.xerial:sqlite-jdbc:3.21.0') - compile('org.mindrot:jbcrypt:0.4') - compile('org.json:json:20180130') + compile('org.postgresql:postgresql:42.2.5') providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') - testCompile('org.springframework.boot:spring-boot-starter-test') testCompile('junit:junit:4.12') testCompile('org.mockito:mockito-core:1.+') -} - -eclipse { - classpath { - containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') - containers('org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8') - } + testCompile('org.springframework.boot:spring-boot-starter-test') } diff --git a/TreePLE-Spring/deployment/deploy.sh b/TreePLE-Spring/deployment/deploy.sh deleted file mode 100644 index 81a5669..0000000 --- a/TreePLE-Spring/deployment/deploy.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -exitStatus () { - if [ $1 -ne 0 ]; then - exit $1 - fi -} - -echo "systemctl stop tomcat" -systemctl stop tomcat -exitStatus $? - -echo "rm -rf /opt/tomcat/webapps/ROOT" -rm -rf /opt/tomcat/webapps/ROOT -exitStatus $? - -echo "rm -f /opt/tomcat/webapps/ROOT.war" -rm -f /opt/tomcat/webapps/ROOT.war -exitStatus $? - -echo "cp $1/TreePLE-Spring/build/libs/treeple*.war /opt/tomcat/webapps/ROOT.war" -cp $1/TreePLE-Spring/build/libs/treeple*.war /opt/tomcat/webapps/ROOT.war -exitStatus $? - -echo "systemctl start tomcat" -systemctl start tomcat -exitStatus $? - diff --git a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.jar b/TreePLE-Spring/gradle/wrapper/gradle-wrapper.jar index 1a958be..28861d2 100644 Binary files a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.jar and b/TreePLE-Spring/gradle/wrapper/gradle-wrapper.jar differ diff --git a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.properties b/TreePLE-Spring/gradle/wrapper/gradle-wrapper.properties index 90a06ce..44e7c4d 100644 --- a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.properties +++ b/TreePLE-Spring/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5.1-bin.zip diff --git a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.sublime-workspace b/TreePLE-Spring/gradle/wrapper/gradle-wrapper.sublime-workspace deleted file mode 100644 index fcbe3c4..0000000 --- a/TreePLE-Spring/gradle/wrapper/gradle-wrapper.sublime-workspace +++ /dev/null @@ -1,169 +0,0 @@ -{ - "auto_complete": - { - "selected_items": - [ - ] - }, - "buffers": - [ - ], - "build_system": "", - "build_system_choices": - [ - ], - "build_varint": "", - "command_palette": - { - "height": 392.0, - "last_filter": "Package Control: ", - "selected_items": - [ - [ - "Package Control: ", - "Package Control: Remove Package" - ] - ], - "width": 497.0 - }, - "console": - { - "height": 130.0, - "history": - [ - "import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)" - ] - }, - "distraction_free": - { - "menu_visible": true, - "show_minimap": false, - "show_open_files": false, - "show_tabs": false, - "side_bar_visible": false, - "status_bar_visible": false - }, - "file_history": - [ - ], - "find": - { - "height": 0.0 - }, - "find_in_files": - { - "height": 0.0, - "where_history": - [ - ] - }, - "find_state": - { - "case_sensitive": false, - "find_history": - [ - ], - "highlight": true, - "in_selection": false, - "preserve_case": false, - "regex": false, - "replace_history": - [ - ], - "reverse": false, - "show_context": true, - "use_buffer2": true, - "whole_word": false, - "wrap": true - }, - "groups": - [ - { - "sheets": - [ - ] - } - ], - "incremental_find": - { - "height": 0.0 - }, - "input": - { - "height": 0.0 - }, - "layout": - { - "cells": - [ - [ - 0, - 0, - 1, - 1 - ] - ], - "cols": - [ - 0.0, - 1.0 - ], - "rows": - [ - 0.0, - 1.0 - ] - }, - "menu_visible": true, - "output.find_results": - { - "height": 0.0 - }, - "pinned_build_system": "", - "project": "gradle-wrapper.sublime-project", - "replace": - { - "height": 0.0 - }, - "save_all_on_build": true, - "select_file": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - ], - "width": 0.0 - }, - "select_project": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - ], - "width": 0.0 - }, - "select_symbol": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - ], - "width": 0.0 - }, - "selected_group": 0, - "settings": - { - }, - "show_minimap": true, - "show_open_files": false, - "show_tabs": true, - "side_bar_visible": true, - "side_bar_width": 150.0, - "status_bar_visible": true, - "template_settings": - { - } -} diff --git a/TreePLE-Spring/gradlew b/TreePLE-Spring/gradlew index 4453cce..cccdd3d 100755 --- a/TreePLE-Spring/gradlew +++ b/TreePLE-Spring/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/TreePLE-Spring/inputs/README.md b/TreePLE-Spring/inputs/README.md new file mode 100644 index 0000000..7ae844c --- /dev/null +++ b/TreePLE-Spring/inputs/README.md @@ -0,0 +1,5 @@ +# Inputs + +## Municipalites + +To add municipalities, follow the open street map [link](https://peteris.rocks/blog/openstreetmap-administrative-boundaries-in-geojson/) and follow the directions. \ No newline at end of file diff --git a/TreePLE-Spring/inputs/municipalities.json b/TreePLE-Spring/inputs/municipalities.json new file mode 100644 index 0000000..da97d4e --- /dev/null +++ b/TreePLE-Spring/inputs/municipalities.json @@ -0,0 +1,63 @@ +[ + { + "name": "Baie-D'Urfe", + "totalTrees": 0, + "borders": [[45.4005811, -73.934378], [45.4012592, -73.9229103], [45.4027596, -73.9167015], [45.403657, -73.9103496], [45.404256, -73.9086263], [45.4053636, -73.9054981], [45.4057131, -73.9044764], [45.4079658, -73.9003907], [45.4096332, -73.8940912], [45.4154149, -73.8956319], [45.4206671, -73.8972085], [45.4222027, -73.8976566], [45.4238508, -73.8981377], [45.4240779, -73.8981937], [45.424585, -73.8983129], [45.4256592, -73.8985659], [45.4350186, -73.9008198], [45.4352303, -73.9008977], [45.4349312, -73.901783], [45.4341738, -73.9037749], [45.4336596, -73.9049096], [45.4319753, -73.9082072], [45.4294502, -73.9128523], [45.4269554, -73.9175025], [45.4248937, -73.9213725], [45.4232525, -73.9244625], [45.4224142, -73.9259923], [45.4214315, -73.9279121], [45.4208337, -73.9290417], [45.4202968, -73.930374], [45.4200283, -73.9314377], [45.4157817, -73.9319884], [45.4140071, -73.9322827], [45.4051644, -73.9337341], [45.4050336, -73.9337707], [45.4044286, -73.9339435], [45.4005811, -73.934378]] + }, { + "name": "Beaconsfield", + "totalTrees": 0, + "borders": [[45.4350186, -73.9008198], [45.4366412, -73.894008], [45.4350761, -73.8935126], [45.4366075, -73.8855856], [45.437238, -73.8855631], [45.4374407, -73.8850901], [45.4373281, -73.8836489], [45.4362472, -73.8831534], [45.4368101, -73.8810591], [45.438927, -73.8817797], [45.439704, -73.8798089], [45.4381459, -73.8791537], [45.4382402, -73.876983], [45.4388932, -73.8760822], [45.4406994, -73.8765543], [45.4415254, -73.8767704], [45.441891, -73.8751363], [45.4424534, -73.8732966], [45.4426536, -73.8727629], [45.441338, -73.8716827], [45.4416119, -73.8710917], [45.4426063, -73.8691172], [45.4428802, -73.8684974], [45.4405165, -73.8661914], [45.4390608, -73.8649087], [45.4417416, -73.8593597], [45.4453448, -73.8524272], [45.4455075, -73.8519859], [45.445517, -73.8515372], [45.445517, -73.8504085], [45.4455021, -73.8428552], [45.4454705, -73.8382654], [45.4384544, -73.8354574], [45.429992, -73.8318876], [45.4287559, -73.8314775], [45.4285466, -73.8311436], [45.4236784, -73.8297737], [45.4007535, -73.82128], [45.4016825, -73.836475], [45.4033387, -73.8553868], [45.4051474, -73.8684907], [45.4066722, -73.875121], [45.4094513, -73.8842645], [45.4102019, -73.8878311], [45.4102255, -73.8897655], [45.410149, -73.8913171], [45.4096332, -73.8940912], [45.4154149, -73.8956319], [45.4206671, -73.8972085], [45.4238508, -73.8981377], [45.4240779, -73.8981937], [45.4256592, -73.8985659], [45.4350186, -73.9008198]] + }, { + "name": "Cote Saint-Luc", + "totalTrees": 0, + "borders": [[45.46318, -73.6828127], [45.4836883, -73.6772199], [45.4819555, -73.6745874], [45.4838106, -73.6695801], [45.4803112, -73.6618427], [45.4811348, -73.661085], [45.4789967, -73.655996], [45.4740738, -73.6447046], [45.4738898, -73.6442826], [45.4738203, -73.6444349], [45.4737624, -73.6445729], [45.4737273, -73.6448486], [45.4732253, -73.6459118], [45.4729475, -73.6462935], [45.4723018, -73.6471005], [45.4721758, -73.6472611], [45.4717008, -73.6478663], [45.4716464, -73.6479527], [45.4713183, -73.6483411], [45.4711208, -73.6486], [45.470652, -73.649195], [45.4702628, -73.6495631], [45.4699642, -73.6497383], [45.4696173, -73.649912], [45.4692241, -73.6500731], [45.4688465, -73.6503027], [45.4684944, -73.6507373], [45.4681732, -73.6513003], [45.4679642, -73.6516363], [45.4675406, -73.652278], [45.4665929, -73.6530046], [45.4660159, -73.6534517], [45.4654118, -73.6538699], [45.4650256, -73.654163], [45.464851, -73.6543113], [45.4643599, -73.6547721], [45.4632568, -73.6556139], [45.4629269, -73.655904], [45.4626647, -73.6562376], [45.4621671, -73.657028], [45.4617143, -73.6578417], [45.4603451, -73.6601884], [45.4602795, -73.6600766], [45.4598609, -73.6590552], [45.4595493, -73.658225], [45.4595013, -73.6581514], [45.4594365, -73.6581582], [45.4593046, -73.6583149], [45.458971, -73.6588482], [45.4588409, -73.6590386], [45.4585003, -73.6595249], [45.4583861, -73.6596197], [45.4580986, -73.6598478], [45.457951, -73.6603738], [45.457528, -73.6610735], [45.4573203, -73.6613528], [45.4560222, -73.6578952], [45.4545633, -73.6595833], [45.457554, -73.6672816], [45.4566189, -73.6682461], [45.4530137, -73.6719645], [45.4527132, -73.6775193], [45.4554071, -73.6872541], [45.4567572, -73.6864859], [45.4600626, -73.6831372], [45.4621383, -73.681282], [45.46318, -73.6828127]] + }, { + "name": "Dollard-Des-Ormeaux", + "totalTrees": 0, + "borders": [[45.4708006, -73.8542399], [45.4628906, -73.8462189], [45.4705788, -73.8310332], [45.4784285, -73.8155179], [45.4751764, -73.8127], [45.4831875, -73.7959917], [45.4822351, -73.7950422], [45.4821223, -73.7949246], [45.484218, -73.7895812], [45.484784, -73.7884206], [45.488074, -73.7816947], [45.4886956, -73.7804232], [45.4896846, -73.7783039], [45.4907005, -73.776097], [45.4911683, -73.7751705], [45.494286, -73.76885], [45.5007978, -73.7778763], [45.499763, -73.7802624], [45.5004068, -73.7816958], [45.4998473, -73.7830948], [45.50164, -73.7859873], [45.5019709, -73.7860732], [45.5031439, -73.7830348], [45.5039139, -73.7869315], [45.5046478, -73.7903218], [45.5045395, -73.790811], [45.5033665, -73.7918066], [45.5010902, -73.7965851], [45.4992577, -73.8004326], [45.500509, -73.8016257], [45.4970799, -73.808844], [45.4973807, -73.8091273], [45.4968994, -73.8100886], [45.5007737, -73.8138393], [45.5010961, -73.8131954], [45.5015377, -73.8136677], [45.5012369, -73.8142685], [45.5037094, -73.8167147], [45.5061637, -73.819118], [45.5061241, -73.8191491], [45.5053817, -73.820723], [45.5021453, -73.8274865], [45.4994382, -73.8331942], [45.4985839, -73.8356146], [45.4987343, -73.8357691], [45.4977597, -73.8376402], [45.4958646, -73.8363528], [45.4946733, -73.8350825], [45.4943905, -73.8355288], [45.4941318, -73.835752], [45.4908286, -73.8425498], [45.4875373, -73.8493132], [45.4867189, -73.8506178], [45.4794073, -73.845674], [45.4736717, -73.8572955], [45.4711919, -73.8544802], [45.4708006, -73.8542399]] + }, { + "name": "Dorval", + "totalTrees": 0, + "borders": [[45.4821223, -73.7949246], [45.484218, -73.7895812], [45.484784, -73.7884206], [45.488074, -73.7816947], [45.4886956, -73.7804232], [45.4896846, -73.7783039], [45.4907005, -73.776097], [45.4911683, -73.7751705], [45.494286, -73.76885], [45.4925301, -73.7659465], [45.4918482, -73.7648189], [45.491409, -73.7640929], [45.4891011, -73.7663696], [45.4845399, -73.7682253], [45.4817513, -73.7743463], [45.4785203, -73.7691548], [45.4767101, -73.7662032], [45.4749778, -73.7684432], [45.4686972, -73.7625494], [45.4684471, -73.7628766], [45.4610712, -73.7504171], [45.4758324, -73.7315911], [45.4833133, -73.7220605], [45.4734691, -73.7081128], [45.4733842, -73.7082288], [45.4613232, -73.7244649], [45.4612316, -73.7245873], [45.4610259, -73.7245225], [45.4482176, -73.7204947], [45.4482283, -73.7215186], [45.4482342, -73.7221], [45.438909, -73.7190244], [45.4388972, -73.7195308], [45.438987, -73.7200581], [45.4387891, -73.7200354], [45.4384015, -73.7199888], [45.4209929, -73.7137859], [45.4201763, -73.7294459], [45.4200167, -73.7324847], [45.4193412, -73.7393251], [45.4159839, -73.766926], [45.447679, -73.7796663], [45.4523574, -73.7814746], [45.4544612, -73.7822055], [45.4549135, -73.779986], [45.4605822, -73.782028], [45.4621775, -73.7826958], [45.4638859, -73.7834308], [45.465011, -73.7844973], [45.4670694, -73.780113], [45.4672008, -73.7803138], [45.4712452, -73.7843796], [45.4736869, -73.7867718], [45.4752848, -73.7882913], [45.4756823, -73.7886425], [45.4779178, -73.790769], [45.4821223, -73.7949246]] + }, { + "name": "Hampstead", + "totalTrees": 0, + "borders": [[45.4789967, -73.655996], [45.4829563, -73.6560171], [45.4843143, -73.6560106], [45.4844515, -73.6559927], [45.4849818, -73.6559271], [45.4856994, -73.6557769], [45.4863836, -73.6555266], [45.4872848, -73.6551428], [45.4879857, -73.6546421], [45.4885864, -73.6540914], [45.4926984, -73.6505068], [45.4918632, -73.6483936], [45.4889698, -73.6511434], [45.4869943, -73.6467757], [45.4834566, -73.6389546], [45.4827173, -73.6373129], [45.4814217, -73.6344361], [45.4796567, -73.6305171], [45.4793129, -73.6308161], [45.4790598, -73.6310362], [45.4783799, -73.6295588], [45.4782441, -73.6301749], [45.4780212, -73.6314285], [45.4778738, -73.6322393], [45.4777826, -73.6326619], [45.477375, -73.6337714], [45.477058, -73.6347904], [45.4769447, -73.6354131], [45.476854, -73.6364997], [45.4768509, -73.6365119], [45.4767296, -73.6393429], [45.4766802, -73.6395966], [45.4762497, -73.6403459], [45.4756681, -73.6412185], [45.4751265, -73.6421085], [45.4750409, -73.6422504], [45.4748288, -73.6426016], [45.4744938, -73.643104], [45.4738898, -73.6442826], [45.4740738, -73.6447046], [45.4789967, -73.655996]] + }, { + "name": "Kirkland", + "totalTrees": 0, + "borders": [[45.4467217, -73.9045745], [45.4474865, -73.9022918], [45.4464, -73.9014887], [45.4467307, -73.9002605], [45.4472031, -73.9002841], [45.4476283, -73.8981228], [45.4464591, -73.8933161], [45.4471322, -73.8913911], [45.4479235, -73.8916745], [45.4494529, -73.8884149], [45.4503741, -73.8874583], [45.4512599, -73.8863009], [45.4524586, -73.8846475], [45.4526594, -73.8818839], [45.4549623, -73.8766048], [45.4563063, -73.8736877], [45.4566925, -73.8728492], [45.4580152, -73.8701329], [45.4593911, -73.8672394], [45.4600695, -73.8659303], [45.4612864, -73.8671397], [45.4622766, -73.8656205], [45.4625562, -73.8651594], [45.4636976, -73.8631564], [45.4656514, -73.8598458], [45.4660936, -73.8602691], [45.4683948, -73.8573893], [45.4684211, -73.8573564], [45.4687088, -73.8569962], [45.4708006, -73.8542399], [45.4628906, -73.8462189], [45.4497315, -73.8337938], [45.4497427, -73.8351904], [45.4474397, -73.8335083], [45.4452418, -73.8318771], [45.4454705, -73.8382654], [45.4455021, -73.8428552], [45.445517, -73.8504085], [45.445517, -73.8515372], [45.4455075, -73.8519859], [45.4453448, -73.8524272], [45.4417416, -73.8593597], [45.4390608, -73.8649087], [45.4405165, -73.8661914], [45.4428802, -73.8684974], [45.4426063, -73.8691172], [45.4416119, -73.8710917], [45.441338, -73.8716827], [45.4426536, -73.8727629], [45.4424534, -73.8732966], [45.441891, -73.8751363], [45.4415254, -73.8767704], [45.4406994, -73.8765543], [45.4388932, -73.8760822], [45.4382402, -73.876983], [45.4381459, -73.8791537], [45.439704, -73.8798089], [45.438927, -73.8817797], [45.4368101, -73.8810591], [45.4362472, -73.8831534], [45.4373281, -73.8836489], [45.4374407, -73.8850901], [45.437238, -73.8855631], [45.4366075, -73.8855856], [45.4350761, -73.8935126], [45.4366412, -73.894008], [45.4350186, -73.9008198], [45.4352303, -73.9008977], [45.4349312, -73.901783], [45.4382901, -73.9023863], [45.4403923, -73.9030476], [45.4403037, -73.9042286], [45.4447561, -73.9055041], [45.4450986, -73.9040279], [45.4467217, -73.9045745]] + }, { + "name": "L'Ile-Dorval", + "totalTrees": 0, + "borders": [[45.4305219, -73.7397557], [45.430805, -73.7391128], [45.4309698, -73.738681], [45.4311367, -73.738664], [45.4313155, -73.7385685], [45.4314999, -73.7384136], [45.4318061, -73.738118], [45.4322508, -73.7374281], [45.4325635, -73.7371279], [45.4327808, -73.7369871], [45.433018, -73.7369307], [45.4334625, -73.7369731], [45.4335579, -73.7371514], [45.4336107, -73.7376769], [45.4335943, -73.7383009], [45.4337884, -73.739202], [45.4338971, -73.7401499], [45.4337293, -73.7408491], [45.4337194, -73.7411024], [45.4338938, -73.7414028], [45.4335844, -73.7423693], [45.4336403, -73.7430404], [45.4338642, -73.7440774], [45.4339137, -73.7443778], [45.433884, -73.7445607], [45.4337094, -73.7450582], [45.4333012, -73.7455227], [45.4330345, -73.7458136], [45.4330509, -73.7460435], [45.4326525, -73.7464519], [45.4324253, -73.7465504], [45.4321519, -73.7465129], [45.4318885, -73.7463438], [45.4315296, -73.7457292], [45.4314407, -73.7456401], [45.4312135, -73.7449643], [45.4310784, -73.7441619], [45.4310915, -73.7438522], [45.4310455, -73.7428949], [45.4308183, -73.7421441], [45.4306568, -73.7414215], [45.4304691, -73.7404267], [45.4305219, -73.7397557]] + }, { + "name": "Montreal-Est", + "totalTrees": 0, + "borders": [[45.6194885, -73.5337731], [45.6155837, -73.534712], [45.6152748, -73.5330242], [45.6138952, -73.5254857], [45.6094341, -73.5005185], [45.6130032, -73.4997821], [45.6252798, -73.489225], [45.6317689, -73.4847719], [45.6377318, -73.5211937], [45.6483684, -73.544862], [45.6441606, -73.5529086], [45.6435175, -73.554069], [45.6414078, -73.5573718], [45.6384448, -73.5618672], [45.6359772, -73.5656223], [45.6341805, -73.5682546], [45.6270884, -73.5514297], [45.6234404, -73.5428879], [45.6194885, -73.5337731]] + }, { + "name": "Montreal-West", + "totalTrees": 0, + "borders": [[45.4566189, -73.6682461], [45.457554, -73.6672816], [45.4545633, -73.6595833], [45.4560222, -73.6578952], [45.4573203, -73.6613528], [45.457528, -73.6610735], [45.4579538, -73.6603715], [45.4580986, -73.6598478], [45.4583861, -73.6596197], [45.4585003, -73.6595249], [45.4588409, -73.6590386], [45.458971, -73.6588482], [45.4593046, -73.6583149], [45.4594365, -73.6581582], [45.4595013, -73.6581514], [45.4584079, -73.6549709], [45.4542139, -73.6441155], [45.4495215, -73.6320122], [45.4481456, -73.635829], [45.4478917, -73.6364913], [45.4476065, -73.6371274], [45.4472912, -73.6377344], [45.4466916, -73.6388101], [45.4471329, -73.6400162], [45.4483611, -73.6432942], [45.4478569, -73.6433572], [45.4475941, -73.6448391], [45.4485876, -73.6474108], [45.4520944, -73.6564882], [45.4522327, -73.65685], [45.4553184, -73.6649243], [45.4566189, -73.6682461]] + }, { + "name": "Mount Royal", + "totalTrees": 0, + "borders": [[45.488592, -73.6838332], [45.4897199, -73.6855464], [45.4900258, -73.684548], [45.4906693, -73.6827636], [45.4909365, -73.6820441], [45.4914741, -73.6811998], [45.4947693, -73.6771226], [45.5036512, -73.6652993], [45.5039196, -73.6651258], [45.508786, -73.6619807], [45.5241573, -73.652129], [45.5264317, -73.6509389], [45.5272382, -73.650517], [45.5307516, -73.6482671], [45.5234261, -73.6230933], [45.5241354, -73.6224746], [45.5235921, -73.620694], [45.5193283, -73.6242679], [45.5192058, -73.6243539], [45.5141761, -73.628586], [45.5157152, -73.6345918], [45.514342, -73.6354821], [45.5146137, -73.6364327], [45.5110374, -73.6385755], [45.5071744, -73.6418651], [45.5069371, -73.6415589], [45.5062237, -73.6422122], [45.5054733, -73.6421726], [45.5053636, -73.6421669], [45.5016515, -73.645547], [45.5043827, -73.651583], [45.5038093, -73.6562156], [45.5047751, -73.6599277], [45.5027681, -73.6602446], [45.502421, -73.6607123], [45.5020891, -73.6630664], [45.4994904, -73.6622085], [45.4986327, -73.6631662], [45.494502, -73.6562806], [45.4943923, -73.6560979], [45.4929891, -73.6579054], [45.4867417, -73.6659517], [45.4867417, -73.6679811], [45.4915855, -73.6754135], [45.484467, -73.6773319], [45.4881551, -73.6831412], [45.488592, -73.6838332]] + }, { + "name": "Pointe-Claire", + "totalTrees": 0, + "borders": [[45.4628906, -73.8462189], [45.4497315, -73.8337938], [45.4497427, -73.8351904], [45.4474397, -73.8335083], [45.4452418, -73.8318771], [45.4454705, -73.8382654], [45.4384544, -73.8354574], [45.429992, -73.8318876], [45.4287559, -73.8314775], [45.4285466, -73.8311436], [45.4236784, -73.8297737], [45.4007535, -73.82128], [45.4000495, -73.8164961], [45.398482, -73.8052887], [45.4019955, -73.8016632], [45.4039541, -73.7992991], [45.4060194, -73.7964739], [45.4073781, -73.7942037], [45.4077744, -73.7935089], [45.4087709, -73.7917584], [45.4104211, -73.7882246], [45.4119739, -73.7845853], [45.4132976, -73.7806899], [45.4145516, -73.7756531], [45.4154313, -73.7707976], [45.4159839, -73.766926], [45.447679, -73.7796663], [45.4523574, -73.7814746], [45.4544612, -73.7822055], [45.4549135, -73.779986], [45.4605822, -73.782028], [45.4621775, -73.7826958], [45.4638859, -73.7834308], [45.465011, -73.7844973], [45.4670694, -73.780113], [45.4672008, -73.7803138], [45.4712452, -73.7843796], [45.4736869, -73.7867718], [45.4752848, -73.7882913], [45.4756823, -73.7886425], [45.4779178, -73.790769], [45.4821223, -73.7949246], [45.4822351, -73.7950422], [45.4831875, -73.7959917], [45.4751764, -73.8127], [45.4784285, -73.8155179], [45.4705788, -73.8310332], [45.4628906, -73.8462189]] + }, { + "name": "Sainte-Anne-de-Bellevue", + "totalTrees": 0, + "borders": [[45.4060432, -73.9614707], [45.4087605, -73.9589205], [45.4090811, -73.9585928], [45.4090853, -73.9585885], [45.4102557, -73.9573008], [45.4092534, -73.9562986], [45.4087932, -73.9558966], [45.408514, -73.9555417], [45.408317, -73.9553578], [45.4077569, -73.9547651], [45.4092898, -73.953456], [45.4103624, -73.9525487], [45.4112962, -73.9517452], [45.4114628, -73.9516364], [45.4123334, -73.9504377], [45.413336, -73.9497449], [45.4141447, -73.9496115], [45.4153698, -73.9498418], [45.4162811, -73.9498892], [45.4168937, -73.9497727], [45.4210484, -73.9533004], [45.4260055, -73.9565532], [45.4265036, -73.9578786], [45.4337659, -73.9504607], [45.4355954, -73.9410539], [45.4361004, -73.9400954], [45.4367605, -73.9405357], [45.4368364, -73.9391976], [45.4378363, -73.9357902], [45.4371987, -73.935195], [45.438947, -73.9313716], [45.4395799, -73.9317753], [45.4411583, -73.9273512], [45.4407021, -73.9270019], [45.4411869, -73.9254266], [45.441574, -73.9242903], [45.4419063, -73.9244327], [45.4426588, -73.9225458], [45.4431081, -73.9227412], [45.4449562, -73.9163708], [45.4449885, -73.9161485], [45.4450104, -73.9159568], [45.4485198, -73.9061145], [45.4467217, -73.9045745], [45.4450986, -73.9040279], [45.4447561, -73.9055041], [45.4421164, -73.9047478], [45.4403037, -73.9042286], [45.4403923, -73.9030476], [45.4382901, -73.9023863], [45.4349312, -73.901783], [45.4341738, -73.9037749], [45.4336596, -73.9049096], [45.4319753, -73.9082072], [45.4294502, -73.9128523], [45.4269554, -73.9175025], [45.4248937, -73.9213725], [45.4232525, -73.9244625], [45.4224142, -73.9259923], [45.4214315, -73.9279121], [45.4208337, -73.9290417], [45.4202968, -73.930374], [45.4200283, -73.9314377], [45.4157817, -73.9319884], [45.4140071, -73.9322827], [45.4051644, -73.9337341], [45.4050336, -73.9337707], [45.4044286, -73.9339435], [45.4005811, -73.934378], [45.4004183, -73.9426742], [45.4004253, -73.9455915], [45.4006614, -73.9464815], [45.4014784, -73.9496971], [45.4029444, -73.9556049], [45.4031202, -73.9562103], [45.4032699, -73.9566333], [45.4033657, -73.956913], [45.4039648, -73.9582781], [45.4060432, -73.9614707]] + }, { + "name": "Senneville", + "totalTrees": 0, + "borders": [[45.4498468, -73.9986882], [45.4481199, -73.9966586], [45.4452634, -73.9945534], [45.4417907, -73.9927935], [45.4391843, -73.9917208], [45.4355747, -73.9909919], [45.4286671, -73.9900239], [45.4211494, -73.9852579], [45.4171996, -73.9799836], [45.4122796, -73.9710318], [45.4079468, -73.9637142], [45.4060432, -73.9614707], [45.4087605, -73.9589205], [45.4090811, -73.9585928], [45.4090853, -73.9585885], [45.4102557, -73.9573008], [45.4092534, -73.9562986], [45.4087932, -73.9558966], [45.408514, -73.9555417], [45.408317, -73.9553578], [45.4077569, -73.9547651], [45.4092898, -73.953456], [45.4103624, -73.9525487], [45.4112962, -73.9517452], [45.4114628, -73.9516364], [45.4123334, -73.9504377], [45.413336, -73.9497449], [45.4141447, -73.9496115], [45.4153698, -73.9498418], [45.4162811, -73.9498892], [45.4168937, -73.9497727], [45.4210484, -73.9533004], [45.4260055, -73.9565532], [45.4265036, -73.9578786], [45.4337659, -73.9504607], [45.4355954, -73.9410539], [45.4361004, -73.9400954], [45.4367605, -73.9405357], [45.4368364, -73.9391976], [45.4378363, -73.9357902], [45.4371987, -73.935195], [45.438947, -73.9313716], [45.4395799, -73.9317753], [45.4411583, -73.9273512], [45.4407021, -73.9270019], [45.4411869, -73.9254266], [45.4492436, -73.9350577], [45.4493694, -73.9351915], [45.4502221, -73.9359757], [45.4506779, -73.9367454], [45.4510571, -73.9370197], [45.461403, -73.9729018], [45.4573788, -73.9773145], [45.4553272, -73.9803483], [45.453242, -73.98418], [45.4518254, -73.9876532], [45.4510314, -73.989465], [45.4497485, -73.9968965], [45.4498468, -73.9986882]] + }, { + "name": "Westmount", + "totalTrees": 0, + "borders": [[45.4952608, -73.6068167], [45.4948539, -73.6051742], [45.4947059, -73.6043248], [45.4949467, -73.6030236], [45.4944726, -73.6029795], [45.4942597, -73.6010279], [45.493584, -73.6009626], [45.4923118, -73.5979794], [45.4921758, -73.5976708], [45.4921532, -73.5976185], [45.4918872, -73.5970037], [45.4916585, -73.5964749], [45.4926173, -73.5956894], [45.4917787, -73.5930818], [45.490426, -73.5888761], [45.4890265, -73.5845967], [45.4889821, -73.5844594], [45.488653, -73.5834427], [45.4883096, -73.5823819], [45.488043, -73.5830638], [45.4868763, -73.5815737], [45.4856634, -73.5806958], [45.4855406, -73.5808501], [45.4848548, -73.5817123], [45.4833416, -73.5839995], [45.4830759, -73.5844038], [45.4827871, -73.5847272], [45.4813316, -73.5861249], [45.4817937, -73.5871645], [45.4795181, -73.5907454], [45.4742737, -73.5985657], [45.4751815, -73.6006444], [45.4753199, -73.6009615], [45.4760134, -73.6025496], [45.477023, -73.6048612], [45.4766533, -73.6053117], [45.4771564, -73.6064251], [45.4776276, -73.6074842], [45.4806385, -73.6142525], [45.4824636, -73.6125082], [45.4834624, -73.6146531], [45.4845775, -73.6170479], [45.4867145, -73.6151419], [45.4882624, -73.6184918], [45.488661, -73.6184569], [45.4891865, -73.6184109], [45.4898158, -73.6178122], [45.4901342, -73.6175093], [45.492146, -73.6155949], [45.4929985, -73.6147838], [45.4918079, -73.6118401], [45.4917278, -73.611642], [45.4940266, -73.6093778], [45.4936107, -73.6083497], [45.494609, -73.60743], [45.4952608, -73.6068167]] + } +] \ No newline at end of file diff --git a/TreePLE-Spring/inputs/species.json b/TreePLE-Spring/inputs/species.json new file mode 100644 index 0000000..2cf0300 --- /dev/null +++ b/TreePLE-Spring/inputs/species.json @@ -0,0 +1,83 @@ +[ + { + "name": "Weeping Willow", + "species": "Salix Babylonica", + "genus": "Salix" + }, { + "name": "Pacific Silver Fir", + "species": "Abies Amabilis", + "genus": "Abies" + }, { + "name": "Monkey-Puzzle", + "species": "Araucaria Araucana", + "genus": "Araucaria" + }, { + "name": "Atlas Cedar", + "species": "Cedrus Atlantica", + "genus": "Cedrus" + }, { + "name": "Lawson's Cypress", + "species": "Chamaecyparis Lawsoniana", + "genus": "Chamaecyparis" + }, { + "name": "Sugi", + "species": "Cryptomeria Japonica", + "genus": "Cryptomeria" + }, { + "name": "Arizona Cypress", + "species": "Cupressus Arizonica", + "genus": "Cupressus" + }, { + "name": "Chinese Juniper", + "species": "Juniperus Chinensis", + "genus": "Juniperus" + }, { + "name": "European Larch", + "species": "Larix Decidua", + "genus": "Larix" + }, { + "name": "Dawn Redwood", + "species": "Metasequoia Glyptostroboides", + "genus": "Metasequoia" + }, { + "name": "Norway Spruce", + "species": "Picea Abies", + "genus": "Picea" + }, { + "name": "Whitebark Pine", + "species": "Pinus Albicaulis", + "genus": "Pinus" + }, { + "name": "Chinese Arborvitae", + "species": "Platycladus Orientalis", + "genus": "Platycladus" + }, { + "name": "Coast Douglas-fir", + "species": "Pseudotsuga Menziesii", + "genus": "Pseudotsuga" + }, { + "name": "Umbrella-pine", + "species": "Sequoia Sempervirens", + "genus": "Sequoia" + }, { + "name": "Giant Sequoia", + "species": "Sequoiadendron Giganteum", + "genus": "Sequoiadendron" + }, { + "name": "Baldcypress", + "species": "Taxodium Distichum", + "genus": "Taxodium" + }, { + "name": "English Yew", + "species": "Taxus Baccata", + "genus": "Taxus" + }, { + "name": "Eastern Arborvitae", + "species": "Thuja Occidentalis", + "genus": "Thuja" + }, { + "name": "Eastern Hemlock", + "species": "Tsuga Canadensis", + "genus": "Tsuga" + } +] diff --git a/TreePLE-Spring/settings.gradle b/TreePLE-Spring/settings.gradle new file mode 100644 index 0000000..f479e10 --- /dev/null +++ b/TreePLE-Spring/settings.gradle @@ -0,0 +1 @@ +rootProject.name='TreePLE-Spring' diff --git a/TreePLE-Spring/src/main/java/TreePLE.ump b/TreePLE-Spring/src/main/java/TreePLE.ump index 3ccbfe2..c6b29cb 100644 --- a/TreePLE-Spring/src/main/java/TreePLE.ump +++ b/TreePLE-Spring/src/main/java/TreePLE.ump @@ -209,4 +209,4 @@ class Forecast public static int getNextForecastId() { return nextForecastId; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/ServletInitializer.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/ServletInitializer.java deleted file mode 100644 index d21e511..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/ServletInitializer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ca.mcgill.ecse321.treeple; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -public class ServletInitializer extends SpringBootServletInitializer { - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(TreePLESpringApplication.class); - } -} \ No newline at end of file diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLEConfig.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLEConfig.java new file mode 100644 index 0000000..ce4beb8 --- /dev/null +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLEConfig.java @@ -0,0 +1,162 @@ +package ca.mcgill.ecse321.treeple; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties +public class TreePLEConfig { + private Spring spring = new Spring(); + private Server server = new Server(); + private Gmap gmap = new Gmap(); + + public static class Spring { + private String profiles; + private Application application = new Application(); + private Datasource datasource = new Datasource(); + + public static class Application { + private String name; + private String version; + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getVersion() { + return this.version; + } + + public void setVersion(String version) { + this.version = version; + } + } + + public static class Datasource { + private String db; + private String url; + private String username; + private String password; + + public String getDb() { + return this.db; + } + + public void setDb(String db) { + this.db = db; + } + + public String getUrl() { + return this.url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUsername() { + return this.username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + } + + public String getProfiles() { + return this.profiles; + } + + public void setProfiles(String profiles) { + this.profiles = profiles; + } + + public Application getApplication() { + return this.application; + } + + public void setApplication(Application application) { + this.application = application; + } + + public Datasource getDatasource() { + return this.datasource; + } + + public void setDatasource(Datasource datasource) { + this.datasource = datasource; + } + } + + public static class Server { + private String host; + private String port; + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getPort() { + return this.port; + } + + public void setPort(String port) { + this.port = port; + } + } + + public static class Gmap { + private List keys = new ArrayList<>(); + + public List getKeys() { + return this.keys; + } + + public void setKeys(List keys) { + this.keys = keys; + } + } + + public Spring getSpring() { + return this.spring; + } + + public void setSpring(Spring spring) { + this.spring = spring; + } + + public Server getServer() { + return this.server; + } + + public void setServer(Server server) { + this.server = server; + } + + public Gmap getGmap() { + return this.gmap; + } + + public void setGmap(Gmap gmap) { + this.gmap = gmap; + } +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLESpringApplication.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLESpringApplication.java index 03b11ba..01fb383 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLESpringApplication.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/TreePLESpringApplication.java @@ -9,31 +9,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; -import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; -import org.springframework.context.event.EventListener; -import org.springframework.core.env.Environment; -import org.springframework.web.servlet.config.annotation.*; -import ca.mcgill.ecse321.treeple.controller.configuration.*; import ca.mcgill.ecse321.treeple.model.*; -import ca.mcgill.ecse321.treeple.sqlite.SQLiteJDBC; +import ca.mcgill.ecse321.treeple.persistence.TreePLEPSQL; @SpringBootApplication -public class TreePLESpringApplication extends SpringBootServletInitializer { +public class TreePLESpringApplication { @Autowired - private Environment environment; - public static Environment env; - - @Autowired - private AndroidProperties androidProperties; - - @Autowired - private WebFrontendProperties webFrontendProperties; - - private SQLiteJDBC sql; + private TreePLEPSQL sql; public static void main(String[] args) { SpringApplication.run(TreePLESpringApplication.class, args); @@ -49,53 +34,17 @@ public ModelMapper modelMapper() { return modelMapper; } - // Enable CORS globally - @Bean - public WebMvcConfigurer corsConfigurer() { - return new WebMvcConfigurerAdapter() { - @Override - public void addCorsMappings(CorsRegistry registry) { - // Allow web client - String frontendUrl = "http://" + webFrontendProperties.getIp() + ":" + webFrontendProperties.getPort(); - // Allow android client - String androidUrl = "http://" + androidProperties.getIp() + ":" + androidProperties.getPort(); - // For debug purposes, allow connecting from localhost as well - registry.addMapping("/**") - .allowedMethods("*") - .allowedHeaders("*") - .allowedOrigins( - frontendUrl, - androidUrl, - "http://ecse321-11.ece.mcgill.ca:8087", - "https://ecse321-11.ece.mcgill.ca:8087", - "http://localhost:8087", - "https://localhost:8087", - "http://127.0.0.1:8087", - "https://127.0.0.1:8087"); - } - }; - } - - @Bean - @EventListener(ApplicationEnvironmentPreparedEvent.class) - public SQLiteJDBC ModelIdCountInitializer() { - sql = new SQLiteJDBC(); - sql.connect(); + @PostConstruct + public void initializeSQL() { Tree.setNextTreeId(sql.getMaxTreeId() + 1); Location.setNextLocationId(sql.getMaxLocationId() + 1); SurveyReport.setNextReportId(sql.getMaxReportId() + 1); Forecast.setNextForecastId(sql.getMaxForecastId() + 1); - return sql; - } - - @PostConstruct - public void initEnv() { - env = environment; } @PreDestroy - public void CloseSQLite() { + public void closeTreePLEPSQL() { if (sql != null) sql.closeConnection(); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/WebMvcConfig.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/WebMvcConfig.java deleted file mode 100644 index fd66b78..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/WebMvcConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package ca.mcgill.ecse321.treeple; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.*; - -@Configuration -public class WebMvcConfig extends WebMvcConfigurerAdapter { - - private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {"classpath:/public/"}; - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - super.addResourceHandlers(registry); - registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); - registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); - } -} \ No newline at end of file diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/ApiError.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/ApiError.java deleted file mode 100644 index 54bcf22..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/ApiError.java +++ /dev/null @@ -1,60 +0,0 @@ -package ca.mcgill.ecse321.treeple.controller; - -import java.time.LocalDateTime; - -import org.springframework.http.HttpStatus; - -import com.fasterxml.jackson.annotation.JsonFormat; - -class ApiError { - - private HttpStatus status; - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") - private LocalDateTime timestamp; - private String message; - private String debugMessage; - - private ApiError() { - timestamp = LocalDateTime.now(); - } - - ApiError(HttpStatus status) { - this(); - this.status = status; - } - - ApiError(HttpStatus status, Throwable ex) { - this(); - this.status = status; - this.message = "Unexpected error"; - this.debugMessage = ex.getLocalizedMessage(); - } - - ApiError(HttpStatus status, String message, Throwable ex) { - this(); - this.status = status; - this.message = message; - this.debugMessage = ex.getLocalizedMessage(); - } - - public HttpStatus getStatus() { - return status; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public String getDebugMessage() { - return debugMessage; - } - - public void setDebugMessage(String debugMessage) { - this.debugMessage = debugMessage; - } - -} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/TreePLERestController.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/TreePLERestController.java index a4f67eb..ec8025e 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/TreePLERestController.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/TreePLERestController.java @@ -11,7 +11,7 @@ import ca.mcgill.ecse321.treeple.model.*; import ca.mcgill.ecse321.treeple.service.TreePLEService; -@CrossOrigin(maxAge = 3600) +@CrossOrigin(origins = "*") @RestController public class TreePLERestController { @@ -23,12 +23,12 @@ public class TreePLERestController { @RequestMapping("/") public String index() { - return "TreePLE application root. Web-based frontend is a TODO. Use the REST API to manage TreePLE objects.\n"; + return "TreePLE application root. Web-based frontend is a TODO. Use the REST API to manage TreePLE objects."; } // ============================== - // DTO CONVERSION API + // DTO CONVERSION // ============================== private TreeDto convertToDto(Tree tree) { @@ -230,6 +230,11 @@ public UserDto login(@RequestBody String jsonBody) throws Exception { return convertToDto(user); } + @PostMapping(value = {"/authenticated/"}) + public Map authenticated(@RequestBody String jsonBody) throws Exception { + return service.authenticated(new JSONObject(jsonBody)); + } + @PostMapping(value = {"/tree/new/"}) public TreeDto createTree(@RequestBody String jsonBody) throws Exception { Tree tree = service.createTree(new JSONObject(jsonBody)); @@ -290,8 +295,8 @@ public SpeciesDto updateSpecies(@RequestBody String jsonBody) throws Exception { } @PatchMapping(value = {"/municipality/update/"}) - public MunicipalityDto updateMunicipality(@RequestBody String jsonBody) throws Exception { - Municipality municipality = service.updateMunicipality(new JSONObject(jsonBody)); + public MunicipalityDto updateMunicipalityBorders(@RequestBody String jsonBody) throws Exception { + Municipality municipality = service.updateMunicipalityBorders(new JSONObject(jsonBody)); return convertToDto(municipality); } @@ -345,4 +350,4 @@ public void resetDatabase(@RequestBody String jsonBody) throws Exception { public void deleteDatabase(@RequestBody String jsonBody) throws Exception { service.deleteDatabase(new JSONObject(jsonBody)); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/AndroidProperties.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/AndroidProperties.java deleted file mode 100644 index f13c00f..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/AndroidProperties.java +++ /dev/null @@ -1,31 +0,0 @@ -package ca.mcgill.ecse321.treeple.controller.configuration; - -import org.springframework.stereotype.Component; -import org.springframework.boot.context.properties.ConfigurationProperties; - -@Component -@ConfigurationProperties(prefix = "client.android") -public class AndroidProperties { - - // The IP address of the Android client - private String ip = "192.168.56.102"; - - // The port on which the Android client listens - private int port = 8086; - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } -} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/WebFrontendProperties.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/WebFrontendProperties.java deleted file mode 100644 index 9b2ae3f..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/controller/configuration/WebFrontendProperties.java +++ /dev/null @@ -1,31 +0,0 @@ -package ca.mcgill.ecse321.treeple.controller.configuration; - -import org.springframework.stereotype.Component; -import org.springframework.boot.context.properties.ConfigurationProperties; - -@Component -@ConfigurationProperties(prefix = "client.web") -public class WebFrontendProperties { - - // The IP address of the web frontend client - private String ip = "192.168.56.50"; - - // The port on which the web frontend listens - private int port = 8087; - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } -} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/dto/ForecastDto.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/dto/ForecastDto.java index 4d4f766..e6e37f0 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/dto/ForecastDto.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/dto/ForecastDto.java @@ -66,4 +66,4 @@ public List getFcTrees() { public void setFcTrees(List fcTrees) { this.fcTrees = fcTrees; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Forecast.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Forecast.java index 3cbff67..d3815ab 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Forecast.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Forecast.java @@ -192,7 +192,7 @@ public boolean removeFcTree(Tree aFcTree) } public boolean addFcTreeAt(Tree aFcTree, int index) - { + { boolean wasAdded = false; if(addFcTree(aFcTree)) { @@ -215,8 +215,8 @@ public boolean addOrMoveFcTreeAt(Tree aFcTree, int index) fcTrees.remove(aFcTree); fcTrees.add(index, aFcTree); wasAdded = true; - } - else + } + else { wasAdded = addFcTreeAt(aFcTree, index); } @@ -265,4 +265,4 @@ public String toString() "energyConserved" + ":" + getEnergyConserved()+ "]" + System.getProperties().getProperty("line.separator") + " " + "fcDate" + "=" + (getFcDate() != null ? !getFcDate().equals(this) ? getFcDate().toString().replaceAll(" "," ") : "this" : "null"); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Location.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Location.java index 69ccace..10e6dcd 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Location.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Location.java @@ -101,4 +101,4 @@ public String toString() "latitude" + ":" + getLatitude()+ "," + "longitude" + ":" + getLongitude()+ "]"; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Municipality.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Municipality.java index 43fc113..188a7a2 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Municipality.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Municipality.java @@ -143,7 +143,7 @@ public boolean removeBorder(Location aBorder) } public boolean addBorderAt(Location aBorder, int index) - { + { boolean wasAdded = false; if(addBorder(aBorder)) { @@ -166,8 +166,8 @@ public boolean addOrMoveBorderAt(Location aBorder, int index) borders.remove(aBorder); borders.add(index, aBorder); wasAdded = true; - } - else + } + else { wasAdded = addBorderAt(aBorder, index); } @@ -203,4 +203,4 @@ public String toString() "name" + ":" + getName()+ "," + "totalTrees" + ":" + getTotalTrees()+ "]"; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Species.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Species.java index 3f10dcc..88ba33f 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Species.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Species.java @@ -117,4 +117,4 @@ public String toString() "species" + ":" + getSpecies()+ "," + "genus" + ":" + getGenus()+ "]"; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/SurveyReport.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/SurveyReport.java index f1bb5f8..f1acd05 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/SurveyReport.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/SurveyReport.java @@ -102,4 +102,4 @@ public String toString() "reportUser" + ":" + getReportUser()+ "]" + System.getProperties().getProperty("line.separator") + " " + "reportDate" + "=" + (getReportDate() != null ? !getReportDate().equals(this) ? getReportDate().toString().replaceAll(" "," ") : "this" : "null"); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Tree.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Tree.java index a15b199..669918b 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Tree.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/Tree.java @@ -278,7 +278,7 @@ public boolean removeReport(SurveyReport aReport) } public boolean addReportAt(SurveyReport aReport, int index) - { + { boolean wasAdded = false; if(addReport(aReport)) { @@ -301,8 +301,8 @@ public boolean addOrMoveReportAt(SurveyReport aReport, int index) reports.remove(aReport); reports.add(index, aReport); wasAdded = true; - } - else + } + else { wasAdded = addReportAt(aReport, index); } @@ -368,4 +368,4 @@ public String toString() " " + "location = "+(getLocation()!=null?Integer.toHexString(System.identityHashCode(getLocation())):"null") + System.getProperties().getProperty("line.separator") + " " + "municipality = "+(getMunicipality()!=null?Integer.toHexString(System.identityHashCode(getMunicipality())):"null"); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/User.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/User.java index 4fc803b..7e45bfe 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/User.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/model/User.java @@ -225,4 +225,4 @@ public String toString() "password" + ":" + getPassword()+ "]" + System.getProperties().getProperty("line.separator") + " " + "role" + "=" + (getRole() != null ? !getRole().equals(this) ? getRole().toString().replaceAll(" "," ") : "this" : "null"); } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/sqlite/SQLiteJDBC.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/persistence/TreePLEPSQL.java similarity index 89% rename from TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/sqlite/SQLiteJDBC.java rename to TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/persistence/TreePLEPSQL.java index ec09df5..b5164de 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/sqlite/SQLiteJDBC.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/persistence/TreePLEPSQL.java @@ -1,39 +1,33 @@ -package ca.mcgill.ecse321.treeple.sqlite; +package ca.mcgill.ecse321.treeple.persistence; import java.sql.*; -import java.io.File; -import java.nio.file.Files; import java.util.ArrayList; -import ca.mcgill.ecse321.treeple.TreePLESpringApplication; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import ca.mcgill.ecse321.treeple.TreePLEConfig; +import ca.mcgill.ecse321.treeple.TreePLEConfig.Spring.Datasource; import ca.mcgill.ecse321.treeple.model.*; import ca.mcgill.ecse321.treeple.model.Tree.*; import ca.mcgill.ecse321.treeple.model.User.*; -public class SQLiteJDBC { - - private static Connection c; - private static String dbPath; +@Repository +public class TreePLEPSQL { - public SQLiteJDBC() { - if (TreePLESpringApplication.env.acceptsProfiles("prod")) { - dbPath = System.getProperty("catalina.base") + "/webapps/treeple.db"; - } else if (TreePLESpringApplication.env.acceptsProfiles("dev")) { - dbPath = "/var/lib/tomcat8/webapps/treeple.db"; - } else { - dbPath = System.getProperty("user.dir") + "/src/main/resources/treeple.db"; - } - } + @Autowired + private TreePLEConfig config; - public SQLiteJDBC(String filename) { - dbPath = System.getProperty("user.dir") + filename; - } + private Connection c; + private Datasource ds; - public String getDbPath() { - return dbPath; + @Autowired + public TreePLEPSQL(TreePLEConfig config) { + this.config = config; + this.ds = config.getSpring().getDatasource(); + this.connect(); } - // ============================== // CONNECTION API // ============================== @@ -41,12 +35,12 @@ public String getDbPath() { // Connect to a database public boolean connect() { try { - Class.forName("org.sqlite.JDBC"); + Class.forName("org.postgresql.Driver"); // Create a connection to the database - String url = String.format("jdbc:sqlite:%s", dbPath); - c = DriverManager.getConnection(url); - System.out.println("Connection to SQLite has been established."); + ds = config.getSpring().getDatasource(); + c = DriverManager.getConnection(ds.getUrl(), ds.getUsername(), ds.getPassword()); + System.out.println("Connection to PostgreSQL has been established."); // Trees DB Table String sqlTrees = "CREATE TABLE IF NOT EXISTS TREES " @@ -58,7 +52,7 @@ public boolean connect() { + " land VARCHAR(50) NOT NULL," + " status VARCHAR(50) NOT NULL," + " ownership VARCHAR(50) NOT NULL," - + " species INT NOT NULL," + + " species VARCHAR(50) NOT NULL," + " location INT NOT NULL," + " municipality VARCHAR(50) NOT NULL," + " reports TEXT NOT NULL)"; @@ -80,8 +74,8 @@ public boolean connect() { // Locations DB Table String sqlLocations = "CREATE TABLE IF NOT EXISTS LOCATIONS " + "(locationId INT PRIMARY KEY NOT NULL," - + " latitude DOUBLE NOT NULL," - + " longitude DOUBLE NOT NULL)"; + + " latitude DOUBLE PRECISION NOT NULL," + + " longitude DOUBLE PRECISION NOT NULL)"; // Municipalities DB Table String sqlMunicipalities = "CREATE TABLE IF NOT EXISTS MUNICIPALITIES " @@ -97,14 +91,14 @@ public boolean connect() { // Forecasts DB Table String sqlForecasts = "CREATE TABLE IF NOT EXISTS FORECASTS " - + "(forecastId INT PRIMARY KEY NOT NULL," - + " fcDate VARCHAR(50) NOT NULL," - + " fcUser VARCHAR(50) NOT NULL," - + " co2Reduced DOUBLE NOT NULL," - + " biodiversity DOUBLE NOT NULL," - + " stormwater DOUBLE NOT NULL," - + " energyConserved DOUBLE NOT NULL," - + " fcTrees TEXT NOT NULL)"; + + "(forecastId INT PRIMARY KEY NOT NULL," + + " fcDate VARCHAR(50) NOT NULL," + + " fcUser VARCHAR(50) NOT NULL," + + " co2Reduced DOUBLE PRECISION NOT NULL," + + " biodiversity DOUBLE PRECISION NOT NULL," + + " stormwater DOUBLE PRECISION NOT NULL," + + " energyConserved DOUBLE PRECISION NOT NULL," + + " fcTrees TEXT NOT NULL)"; Statement stmt = c.createStatement(); stmt.executeUpdate(sqlTrees); @@ -127,7 +121,7 @@ public boolean closeConnection() { try { if (c != null) { c.close(); - System.out.println("Connection to SQLite has been closed."); + System.out.println("Connection to PostgreSQL has been closed."); return true; } } catch (Exception e) { @@ -137,16 +131,14 @@ public boolean closeConnection() { } public boolean resetDB() { - if (deleteDB()) { - return connect(); - } - return false; + return truncateTrees() && truncateUsers() && truncateSpecies() && truncateLocations() && truncateMunicipalities() && truncateSurveyReports() && truncateForecasts(); } public boolean deleteDB() { + String deleteDB = String.format("DROP DATABASE %s;", ds.getDb()); try { - if (closeConnection()) { - return Files.deleteIfExists(new File(dbPath).toPath()); + if (c.createStatement().executeUpdate(deleteDB) >= 0) { + return closeConnection(); } } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); @@ -170,7 +162,7 @@ public boolean insertTree(int treeId, int height, int diameter, String address, treeId, height, diameter, address, datePlanted, land, status, ownership, species.replaceAll("'", "''"), location, municipality.replaceAll("'", "''"), reports); try { - return c.createStatement().executeUpdate(insertTree) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertTree) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -187,7 +179,7 @@ public boolean updateTree(int treeId, int height, int diameter, String land, Str height, diameter, land, status, ownership, species.replaceAll("'", "''"), municipality.replaceAll("'", "''"), reports, treeId); try { - return c.createStatement().executeUpdate(updateTree) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateTree) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -231,7 +223,7 @@ public Tree getTree(int treeId) { return tree; } - // Get all trees of type Species + // Get all Trees of type Species public ArrayList getAllTreesOfSpecies(String species) { ArrayList trees = new ArrayList(); String getTreesOfSpecies = String.format("SELECT * FROM TREES WHERE species = '%s';", species.replaceAll("'", "''")); @@ -310,7 +302,17 @@ public boolean deleteTree(int treeId) { String deleteTree = String.format("DELETE FROM TREES WHERE treeId = %d;", treeId); try { - return c.createStatement().executeUpdate(deleteTree) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteTree) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Trees table + public boolean truncateTrees() { + try { + return c.createStatement().executeUpdate("TRUNCATE TREES;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -357,7 +359,7 @@ public boolean insertUser(String username, String password, String role, String username, password, role, myAddresses, myTrees); try { - return c.createStatement().executeUpdate(insertUser) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertUser) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -373,7 +375,7 @@ public boolean updateUser(String username, String password, String role, String password, role, myAddresses, username); try { - return c.createStatement().executeUpdate(updateUser) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateUser) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -389,7 +391,7 @@ public boolean updateUserPassword(String username, String password) { password, username); try { - return c.createStatement().executeUpdate(updateUser) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateUser) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -405,7 +407,7 @@ public boolean updateUserTrees(String username, String myTrees) { myTrees, username); try { - return c.createStatement().executeUpdate(updateUserTrees) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateUserTrees) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -490,7 +492,17 @@ public boolean deleteUser(String username) { String deleteUser = String.format("DELETE FROM USERS WHERE username = '%s';", username); try { - return c.createStatement().executeUpdate(deleteUser) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteUser) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Users table + public boolean truncateUsers() { + try { + return c.createStatement().executeUpdate("TRUNCATE USERS;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -511,7 +523,7 @@ public boolean insertSpecies(String name, String species, String genus) { name.replaceAll("'", "''"), species, genus); try { - return c.createStatement().executeUpdate(insertSpecies) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertSpecies) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -527,7 +539,7 @@ public boolean updateSpecies(String name, String species, String genus) { species, genus, name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(updateSpecies) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateSpecies) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -586,7 +598,17 @@ public boolean deleteSpecies(String name) { String speciesDelete = String.format("DELETE FROM SPECIES WHERE name = '%s';", name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(speciesDelete) <= 0 ? false : true; + return c.createStatement().executeUpdate(speciesDelete) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Species table + public boolean truncateSpecies() { + try { + return c.createStatement().executeUpdate("TRUNCATE SPECIES;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -607,7 +629,7 @@ public boolean insertLocation(int locationId, double latitude, double longitude) locationId, latitude, longitude); try { - return c.createStatement().executeUpdate(insertLocation) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertLocation) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -623,7 +645,7 @@ public boolean updateLocation(int locationId, double latitude, double longitude) latitude, longitude, locationId); try { - return c.createStatement().executeUpdate(updateLocation) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateLocation) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -690,7 +712,17 @@ public boolean deleteLocation(int locationId) { String deleteLocation = String.format("DELETE FROM LOCATIONS WHERE locationId = %d;", locationId); try { - return c.createStatement().executeUpdate(deleteLocation) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteLocation) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Locations table + public boolean truncateLocations() { + try { + return c.createStatement().executeUpdate("TRUNCATE LOCATIONS;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -711,7 +743,7 @@ public boolean insertMunicipality(String name, int totalTrees, String borders) { name.replaceAll("'", "''"), totalTrees, borders); try { - return c.createStatement().executeUpdate(insertMunicipality) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertMunicipality) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -727,7 +759,7 @@ public boolean updateMunicipalityBorders(String name, String borders) { borders, name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(updateMunicipality) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateMunicipality) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -743,7 +775,7 @@ public boolean updateMunicipalityTotalTrees(String name, int totalTrees) { totalTrees, name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(updateMunicipality) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateMunicipality) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -759,7 +791,7 @@ public boolean updateMunicipalityIncDecTotalTrees(String name, int incDec) { incDec, name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(updateMunicipality) <= 0 ? false : true; + return c.createStatement().executeUpdate(updateMunicipality) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -834,7 +866,17 @@ public boolean deleteMunicipality(String name) { String deleteMunicipality = String.format("DELETE FROM MUNICIPALITIES WHERE name = '%s';", name.replaceAll("'", "''")); try { - return c.createStatement().executeUpdate(deleteMunicipality) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteMunicipality) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Municipalities table + public boolean truncateMunicipalities() { + try { + return c.createStatement().executeUpdate("TRUNCATE MUNICIPALITIES;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -855,7 +897,7 @@ public boolean insertSurveyReport(int reportId, String reportDate, String report reportId, reportDate, reportUser); try { - return c.createStatement().executeUpdate(insertSurveyReport) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertSurveyReport) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -922,7 +964,17 @@ public boolean deleteSurveyReport(int reportId) { String deleteSurveyReport = String.format("DELETE FROM SURVEYREPORTS WHERE reportId = %d;", reportId); try { - return c.createStatement().executeUpdate(deleteSurveyReport) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteSurveyReport) >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } + + // Clear Survey Reports table + public boolean truncateSurveyReports() { + try { + return c.createStatement().executeUpdate("TRUNCATE SURVEYREPORTS;") >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -944,7 +996,7 @@ public boolean insertForecast(int forecastId, String fcDate, String fcUser, doub forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); try { - return c.createStatement().executeUpdate(insertForecast) <= 0 ? false : true; + return c.createStatement().executeUpdate(insertForecast) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -1029,7 +1081,7 @@ public boolean deleteForecast(int forecastId) { String deleteForecast = String.format("DELETE FROM FORECASTS WHERE forecastId = %d;", forecastId); try { - return c.createStatement().executeUpdate(deleteForecast) <= 0 ? false : true; + return c.createStatement().executeUpdate(deleteForecast) >= 0; } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()); } @@ -1057,4 +1109,14 @@ private Forecast createForecast(ResultSet rs) throws Exception { return new Forecast(fcDate, fcUser, stormwater, co2Reduced, biodiversity, energyConserved, forecastId, fcTrees); } -} \ No newline at end of file + + // Clear Forecasts table + public boolean truncateForecasts() { + try { + return c.createStatement().executeUpdate("TRUNCATE FORECASTS;") >= 0; + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + e.getMessage()); + } + return false; + } +} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/InvalidInputException.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/InvalidInputException.java deleted file mode 100644 index 4919c79..0000000 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/InvalidInputException.java +++ /dev/null @@ -1,10 +0,0 @@ -package ca.mcgill.ecse321.treeple.service; - -public class InvalidInputException extends Exception { - - private static final long serialVersionUID = -5633915762703837868L; - - public InvalidInputException(String errorMessage) { - super(errorMessage); - } -} diff --git a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/TreePLEService.java b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/TreePLEService.java index bede7a6..86f2524 100644 --- a/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/TreePLEService.java +++ b/TreePLE-Spring/src/main/java/ca/mcgill/ecse321/treeple/service/TreePLEService.java @@ -13,29 +13,28 @@ import org.apache.http.util.EntityUtils; import org.json.*; import org.mindrot.jbcrypt.BCrypt; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import ca.mcgill.ecse321.treeple.TreePLEConfig; import ca.mcgill.ecse321.treeple.model.*; import ca.mcgill.ecse321.treeple.model.Tree.*; import ca.mcgill.ecse321.treeple.model.User.*; -import ca.mcgill.ecse321.treeple.sqlite.SQLiteJDBC; +import ca.mcgill.ecse321.treeple.persistence.TreePLEPSQL; @Service public class TreePLEService { - private SQLiteJDBC sql; + @Autowired + private TreePLEPSQL sql; + private String gmapsKey; - private final String[] gmapsKeyList = new String[]{ - "AIzaSyDzb0p2lAcypZ2IbhVyhJYu6rTQLPncY5g", - "AIzaSyDeo4TnWCcvE-yZlpmsv9FAEyYogAzzcBk", - "AIzaSyC2kAeJiONkZEJCcFRcO_esNEqchbuub7o" - }; private final String sRoleKey = "i<3tr33s"; private final String dbKey = "ih8tr33s"; - public TreePLEService(SQLiteJDBC sql) { - this.sql = sql; - this.gmapsKey = gmapsKeyList[(new Random()).nextInt(gmapsKeyList.length)]; + @Autowired + public TreePLEService(TreePLEConfig config) { + this.gmapsKey = config.getGmap().getKeys().get(new Random().nextInt(config.getGmap().getKeys().size())); } public boolean setMaxId() { @@ -62,19 +61,36 @@ public User login(JSONObject jsonParams) throws Exception { String password = jsonParams.getString("password"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (password.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Password cannot be empty!"); + throw new IllegalArgumentException("Password cannot be empty!"); User user = null; if ((user = User.getWithUsername(username)) != null || (user = sql.getUser(username)) != null) { if (BCrypt.checkpw(password, user.getPassword())) { return user; } else { - throw new InvalidInputException("Entered password is incorrect!"); + throw new IllegalArgumentException("Entered password is incorrect!"); } } else { - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); + } + } + + // Check if User is a scientist + public Map authenticated(JSONObject jsonParams) throws Exception { + String username = jsonParams.getString("username"); + + if (username.replaceAll("\\s", "").isEmpty()) + throw new IllegalArgumentException("Username cannot be empty!"); + + User user = null; + if ((user = User.getWithUsername(username)) != null || (user = sql.getUser(username)) != null) { + Map authenticated = new HashMap(); + authenticated.put("authenticated", user.getRole() == UserRole.Scientist); + return authenticated; + } else { + throw new IllegalArgumentException("No User with that username exists!"); } } @@ -98,24 +114,23 @@ public Tree createTree(JSONObject jsonParams) throws Exception { if (height < 0) - throw new InvalidInputException("Height cannot be negative!"); + throw new IllegalArgumentException("Height cannot be negative!"); if (diameter < 0) - throw new InvalidInputException("Diameter cannot be negative!"); + throw new IllegalArgumentException("Diameter cannot be negative!"); if (!datePlanted.matches("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$")) - throw new InvalidInputException("Date doesn't match YYYY-(M)M-(D)D format!"); + throw new IllegalArgumentException("Date doesn't match YYYY-(M)M-(D)D format!"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); if (!EnumUtils.isValidEnum(Land.class, land)) - throw new InvalidInputException("That land type doesn't exist!"); + throw new IllegalArgumentException("That land type doesn't exist!"); if (!EnumUtils.isValidEnum(Status.class, status)) - throw new InvalidInputException("That status doesn't exist!"); + throw new IllegalArgumentException("That status doesn't exist!"); if (!EnumUtils.isValidEnum(Ownership.class, ownership)) - throw new InvalidInputException("That ownership doesn't exist!"); + throw new IllegalArgumentException("That ownership doesn't exist!"); String address = ""; try { - String gmapsUrl = String.format("https://maps.googleapis.com/maps/api/geocode/json?latlng=%.8f,%.8f&key=%s", - latitude, longitude, gmapsKey); + String gmapsUrl = String.format("https://maps.googleapis.com/maps/api/geocode/json?latlng=%.8f,%.8f&key=%s", latitude, longitude, gmapsKey); CloseableHttpResponse response = HttpClients.createDefault().execute(new HttpGet(gmapsUrl)); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { @@ -123,10 +138,10 @@ public Tree createTree(JSONObject jsonParams) throws Exception { JSONArray addressInfo = gmapsJSON.getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); address = addressInfo.getJSONObject(addressInfo.length() - 1).getString("long_name").replaceAll("\\s", ""); } else if (statusCode >= 400) { - throw new InvalidInputException("Invalid Google Maps API request!"); + throw new IllegalArgumentException("Invalid Google Maps API request!"); } response.close(); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { throw e; } catch (Exception e) { throw new Exception(e.getMessage()); @@ -136,13 +151,13 @@ public Tree createTree(JSONObject jsonParams) throws Exception { Species speciesObj; Municipality municipalityObj; if ((userObj = sql.getUser(username)) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (userObj.getRole() == UserRole.Resident && !ArrayUtils.contains(userObj.getMyAddresses(), address)) - throw new InvalidInputException("You cannot plant on someone else's property!"); + throw new IllegalArgumentException("You cannot plant on someone else's property!"); if ((speciesObj = sql.getSpecies(species)) == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); if ((municipalityObj = sql.getMunicipality(municipality)) == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); Location locationObj = new Location(latitude, longitude); SurveyReport surveyReportObj = new SurveyReport(Date.valueOf(datePlanted), username); @@ -189,19 +204,19 @@ public User createUser(JSONObject jsonParams) throws Exception { String myTrees = ""; if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (!username.matches("[a-zA-Z0-9]+")) - throw new InvalidInputException("Username must be alphanumeric!"); + throw new IllegalArgumentException("Username must be alphanumeric!"); if (User.hasWithUsername(username)) - throw new InvalidInputException("Username is already taken!"); + throw new IllegalArgumentException("Username is already taken!"); if (password.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Password cannot be empty!"); + throw new IllegalArgumentException("Password cannot be empty!"); if (!EnumUtils.isValidEnum(UserRole.class, role)) - throw new InvalidInputException("That role doesn't exist!"); - if (role.equals("Resident") && myAddresses.length() == 0) - throw new InvalidInputException("Address cannot be empty!"); - if (role.equals("Scientist") && !sRoleKey.equals(scientistKey)) - throw new InvalidInputException("Authorization key for Scientist role is invalid!"); + throw new IllegalArgumentException("That role doesn't exist!"); + if (role.equals(UserRole.Resident.toString()) && myAddresses.length() == 0) + throw new IllegalArgumentException("Address cannot be empty!"); + if (role.equals(UserRole.Scientist.toString()) && !sRoleKey.equals(scientistKey)) + throw new IllegalArgumentException("Authorization key for Scientist role is invalid!"); password = BCrypt.hashpw(password, BCrypt.gensalt()); @@ -229,9 +244,9 @@ public Species createSpecies(JSONObject jsonParams) throws Exception { String genus = jsonParams.optString("genus").trim(); if (name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Species name cannot be empty!"); + throw new IllegalArgumentException("Species name cannot be empty!"); if (Species.hasWithName(name)) - throw new InvalidInputException("Species already exists!"); + throw new IllegalArgumentException("Species already exists!"); Species speciesObj = new Species(name, species, genus); @@ -250,11 +265,11 @@ public Municipality createMunicipality(JSONObject jsonParams) throws Exception { JSONArray borders = jsonParams.getJSONArray("borders"); if (name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Municipality cannot be empty!"); + throw new IllegalArgumentException("Municipality cannot be empty!"); if (Municipality.hasWithName(name)) - throw new InvalidInputException("Municipality already exists!"); + throw new IllegalArgumentException("Municipality already exists!"); if (borders.length() > 0 && borders.length() < 3) - throw new InvalidInputException("Municipality requires minimum 3 borders!"); + throw new IllegalArgumentException("Municipality requires minimum 3 borders!"); Municipality municipality = new Municipality(name, totalTrees); @@ -293,13 +308,13 @@ public Forecast createForecast(JSONObject jsonParams) throws Exception { JSONArray fcTrees = jsonParams.getJSONArray("fcTrees"); if (fcUser.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); if (!fcDate.matches("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$")) - throw new InvalidInputException("Date doesn't match YYYY-(M)M-(D)D format!"); + throw new IllegalArgumentException("Date doesn't match YYYY-(M)M-(D)D format!"); if (fcTrees == null || fcTrees.length() < 1) - throw new InvalidInputException("Forecast requires minimum 1 tree!"); + throw new IllegalArgumentException("Forecast requires minimum 1 tree!"); if (sql.getUser(fcUser) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); ArrayList treeList = new ArrayList(); ArrayList treeIdList = new ArrayList(); @@ -380,11 +395,11 @@ public List getAllForecasts() { // Get a specific Tree public Tree getTreeById(int treeId) throws Exception { if (treeId <= 0) - throw new InvalidInputException("Tree's ID cannot be negative!"); + throw new IllegalArgumentException("Tree's ID cannot be negative!"); Tree tree; if ((tree = sql.getTree(treeId)) == null) - throw new InvalidInputException("No Tree with that ID exists!"); + throw new IllegalArgumentException("No Tree with that ID exists!"); return tree; } @@ -392,14 +407,14 @@ public Tree getTreeById(int treeId) throws Exception { // Get a specific User public User getUserByUsername(String username) throws Exception { if (username == null || username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (User.hasWithUsername(username)) { return User.getWithUsername(username); } else { User user; if ((user = sql.getUser(username)) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); return user; } @@ -408,14 +423,14 @@ public User getUserByUsername(String username) throws Exception { // Get a specific Species public Species getSpeciesByName(String name) throws Exception { if (name == null || name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Species name cannot be empty!"); + throw new IllegalArgumentException("Species name cannot be empty!"); if (Species.hasWithName(name)) { return Species.getWithName(name); } else { Species species; if ((species = sql.getSpecies(name)) == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); return species; } @@ -424,11 +439,11 @@ public Species getSpeciesByName(String name) throws Exception { // Get a specific Location public Location getLocationById(int locationId) throws Exception { if (locationId <= 0) - throw new InvalidInputException("Location's ID cannot be negative!"); + throw new IllegalArgumentException("Location's ID cannot be negative!"); Location location; if ((location = sql.getLocation(locationId)) == null) - throw new InvalidInputException("No Location with that ID exists!"); + throw new IllegalArgumentException("No Location with that ID exists!"); return location; } @@ -436,14 +451,14 @@ public Location getLocationById(int locationId) throws Exception { // Get a specific Municipality public Municipality getMunicipalityByName(String name) throws Exception { if (name == null || name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Municipality name cannot be empty!"); + throw new IllegalArgumentException("Municipality name cannot be empty!"); if (Municipality.hasWithName(name)) { return Municipality.getWithName(name); } else { Municipality municipality; if ((municipality = sql.getMunicipality(name)) == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); return municipality; } @@ -452,11 +467,11 @@ public Municipality getMunicipalityByName(String name) throws Exception { // Get a specific Survey Report public SurveyReport getSurveyReportById(int reportId) throws Exception { if (reportId <= 0) - throw new InvalidInputException("Report's ID cannot be negative!"); + throw new IllegalArgumentException("Report's ID cannot be negative!"); SurveyReport report; if ((report = sql.getSurveyReport(reportId)) == null) - throw new InvalidInputException("No Survey Report with that ID exists!"); + throw new IllegalArgumentException("No Survey Report with that ID exists!"); return report; } @@ -464,11 +479,11 @@ public SurveyReport getSurveyReportById(int reportId) throws Exception { // Get a specific Forecast public Forecast getForecastById(int forecastId) throws Exception { if (forecastId <= 0) - throw new InvalidInputException("Forecast's ID cannot be negative!"); + throw new IllegalArgumentException("Forecast's ID cannot be negative!"); Forecast forecast; if ((forecast = sql.getForecast(forecastId)) == null) - throw new InvalidInputException("No Forecast with that ID exists!"); + throw new IllegalArgumentException("No Forecast with that ID exists!"); return forecast; } @@ -559,9 +574,9 @@ public List getTreesOfUser(String username) throws Exception { // Get trees of a specific species public List getTreesOfSpecies(String name) throws Exception { if (name == null || name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Species name cannot be empty!"); + throw new IllegalArgumentException("Species name cannot be empty!"); if (!Species.hasWithName(name) && sql.getSpecies(name) == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); return Collections.unmodifiableList(sql.getAllTreesOfSpecies(name)); } @@ -569,9 +584,9 @@ public List getTreesOfSpecies(String name) throws Exception { // Get trees of a specific municipality public List getTreesOfMunicipality(String name) throws Exception { if (name == null || name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Municipality name cannot be empty!"); + throw new IllegalArgumentException("Municipality name cannot be empty!"); if (!Municipality.hasWithName(name) && sql.getMunicipality(name) == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); return Collections.unmodifiableList(sql.getAllTreesOfMunicipality(name)); } @@ -579,9 +594,9 @@ public List getTreesOfMunicipality(String name) throws Exception { // Get forecasts created by a specific user public List getForecastsOfUser(String username) throws Exception { if (username == null || username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (!User.hasWithUsername(username) && sql.getUser(username) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); return Collections.unmodifiableList(sql.getAllForecastsOfUser(username)); } @@ -608,34 +623,34 @@ public Tree updateTree(JSONObject jsonParams) throws Exception { String municipality = treeParams.getString("municipality"); if (treeId <= 0) - throw new InvalidInputException("Tree's ID cannot be negative!"); + throw new IllegalArgumentException("Tree's ID cannot be negative!"); if (height < 0) - throw new InvalidInputException("Height cannot be negative!"); + throw new IllegalArgumentException("Height cannot be negative!"); if (diameter < 0) - throw new InvalidInputException("Diameter cannot be negative!"); + throw new IllegalArgumentException("Diameter cannot be negative!"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); if (!EnumUtils.isValidEnum(Land.class, land)) - throw new InvalidInputException("That land type doesn't exist!"); + throw new IllegalArgumentException("That land type doesn't exist!"); if (!EnumUtils.isValidEnum(Status.class, status)) - throw new InvalidInputException("That status doesn't exist!"); + throw new IllegalArgumentException("That status doesn't exist!"); if (!EnumUtils.isValidEnum(Ownership.class, ownership)) - throw new InvalidInputException("That ownership doesn't exist!"); + throw new IllegalArgumentException("That ownership doesn't exist!"); Tree treeObj; User userObj; Species speciesObj; Municipality municipalityObj; if ((treeObj = sql.getTree(treeId)) == null) - throw new InvalidInputException("No Tree with that ID exists!"); + throw new IllegalArgumentException("No Tree with that ID exists!"); if ((userObj = sql.getUser(username)) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (userObj.getRole() == UserRole.Resident && !ArrayUtils.contains(userObj.getMyTrees(), treeId)) - throw new InvalidInputException("You cannot update someone else's tree!"); + throw new IllegalArgumentException("You cannot update someone else's tree!"); if ((speciesObj = sql.getSpecies(species)) == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); if ((municipalityObj = sql.getMunicipality(municipality)) == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); SurveyReport surveyReportObj = new SurveyReport(new Date(Calendar.getInstance().getTimeInMillis()), username); @@ -682,19 +697,19 @@ public User updateUser(JSONObject jsonParams) throws Exception { User user; if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (!username.matches("[a-zA-Z0-9]+")) - throw new InvalidInputException("Username must be alphanumeric!"); + throw new IllegalArgumentException("Username must be alphanumeric!"); if ((user = sql.getUser(username)) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (password.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Password cannot be empty!"); + throw new IllegalArgumentException("Password cannot be empty!"); if (!EnumUtils.isValidEnum(UserRole.class, role)) - throw new InvalidInputException("That role doesn't exist!"); - if (role.equals("Resident") && myAddresses.length() == 0) - throw new InvalidInputException("Address cannot be empty!"); - if (role.equals("Scientist") && !sRoleKey.equals(scientistKey)) - throw new InvalidInputException("Authorization key for Scientist role is invalid!"); + throw new IllegalArgumentException("That role doesn't exist!"); + if (role.equals(UserRole.Resident.toString()) && myAddresses.length() == 0) + throw new IllegalArgumentException("Address cannot be empty!"); + if (role.equals(UserRole.Scientist.toString()) && !sRoleKey.equals(scientistKey)) + throw new IllegalArgumentException("Authorization key for Scientist role is invalid!"); password = BCrypt.hashpw(password, BCrypt.gensalt()); @@ -725,13 +740,13 @@ public User updateUserPassword(JSONObject jsonParams) throws Exception { User user; if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Username cannot be empty!"); + throw new IllegalArgumentException("Username cannot be empty!"); if (!username.matches("[a-zA-Z0-9]+")) - throw new InvalidInputException("Username must be alphanumeric!"); + throw new IllegalArgumentException("Username must be alphanumeric!"); if ((user = sql.getUser(username)) == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (newPass.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("New password cannot be empty!"); + throw new IllegalArgumentException("New password cannot be empty!"); if (BCrypt.checkpw(oldPass, user.getPassword())) { @@ -755,9 +770,9 @@ public Species updateSpecies(JSONObject jsonParams) throws Exception { Species speciesObj; if (name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Species name cannot be empty!"); + throw new IllegalArgumentException("Species name cannot be empty!"); if ((speciesObj = sql.getSpecies(name)) == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); speciesObj.setGenus(genus); speciesObj.setSpecies(species); @@ -771,46 +786,30 @@ public Species updateSpecies(JSONObject jsonParams) throws Exception { } // Update a Municipality - public Municipality updateMunicipality(JSONObject jsonParams) throws Exception { - return null; - } - - /* - public Municipality updateMunicipality(JSONObject jsonParams) throws Exception { + public Municipality updateMunicipalityBorders(JSONObject jsonParams) throws Exception { String name = jsonParams.getString("name").trim(); - int totalTrees = jsonParams.getInt("totalTrees"); JSONArray borders = jsonParams.getJSONArray("borders"); - Municipality municipalityObj; if (name == null || name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Municipality cannot be empty!"); + throw new IllegalArgumentException("Municipality cannot be empty!"); if ((municipalityObj = sql.getMunicipality(name)) == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); if (borders.length() > 0 && borders.length() < 3) - throw new InvalidInputException("Municipality requires minimum 3 borders!"); + throw new IllegalArgumentException("Municipality requires minimum 3 borders!"); ArrayList prevLocations = new ArrayList(municipalityObj.getBorders()); - municipalityObj.getBorders().clear(); + municipalityObj.clearBorders(); - int prevLength = prevLocations.size(); - int nextLocationId = Location.getNextLocationId(); - Location.setNextLocationId(prevLocations.get(0).getLocationId()); - - int iteration = 0; ArrayList locationIdList = new ArrayList<>(); borders.forEach(border -> { JSONArray locationJSON = (JSONArray) border; - Location location = new Location(locationJSON.getdouble(0), locationJSON.getdouble(1)); + Location location = new Location(locationJSON.getDouble(0), locationJSON.getDouble(1)); municipalityObj.addBorder(location); locationIdList.add(location.getLocationId()); - if(iteration == prevLength) { - Location.setNextLocationId(nextLocationId); - } }); - - if (!sql.updateMunicipality(name, totalTrees, locationIdList.toString().replaceAll("(\\[)|(\\])", ""))) { + if (!sql.updateMunicipalityBorders(name, locationIdList.toString().replaceAll("(\\[)|(\\])", ""))) { Location.setNextLocationId(Location.getNextLocationId() - municipalityObj.numberOfBorders()); municipalityObj.delete(); throw new SQLException("SQL Municipality insert query failed!"); @@ -819,14 +818,20 @@ public Municipality updateMunicipality(JSONObject jsonParams) throws Exception { for (Location location : municipalityObj.getBorders()) { if (!sql.insertLocation(location.getLocationId(), location.getLatitude(), location.getLongitude())) { Location.setNextLocationId(Location.getNextLocationId() - municipalityObj.numberOfBorders()); + for (int mlId = municipalityObj.getBorder(0).getLocationId(); mlId < location.getLocationId(); mlId++) { + sql.deleteLocation(mlId); + } municipalityObj.delete(); throw new SQLException("SQL Location insert query failed!"); } } + for (Location location : prevLocations) { + sql.deleteLocation(location.getLocationId()); + } + return municipalityObj; } - */ // ============================== @@ -839,19 +844,19 @@ public Tree deleteTree(JSONObject jsonParams) throws Exception { int treeId = jsonParams.getInt("treeId"); if (treeId <= 0) - throw new InvalidInputException("Tree's ID cannot be negative or zero!"); + throw new IllegalArgumentException("Tree's ID cannot be negative or zero!"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); Tree tree = sql.getTree(treeId); User user = sql.getUser(username); if (tree == null) - throw new InvalidInputException("No Tree with that ID exists!"); + throw new IllegalArgumentException("No Tree with that ID exists!"); if (user == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (UserRole.Resident == user.getRole() && !ArrayUtils.contains(user.getMyTrees(), tree.getTreeId())) - throw new InvalidInputException("This Tree wasn't planted by you!"); + throw new IllegalArgumentException("This Tree wasn't planted by you!"); if (!sql.deleteTree(treeId)) throw new SQLException("SQL Tree delete query failed!"); @@ -859,6 +864,7 @@ public Tree deleteTree(JSONObject jsonParams) throws Exception { Municipality municipality = tree.getMunicipality(); municipality.setTotalTrees(municipality.getTotalTrees() - 1); sql.updateMunicipalityIncDecTotalTrees(municipality.getName(), -1); + sql.deleteLocation(tree.getLocation().getLocationId()); return tree; } @@ -868,12 +874,12 @@ public User deleteUser(JSONObject jsonParams) throws Exception { String username = jsonParams.getString("username"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); User user = sql.getUser(username); if (user == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); user.delete(); if (!sql.deleteUser(username)) @@ -887,12 +893,12 @@ public Species deleteSpecies(JSONObject jsonParams) throws Exception { String name = jsonParams.getString("name"); if (name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Species name cannot be empty!"); + throw new IllegalArgumentException("Species name cannot be empty!"); Species species = sql.getSpecies(name); if (species == null) - throw new InvalidInputException("No Species with that name exists!"); + throw new IllegalArgumentException("No Species with that name exists!"); species.delete(); if (!sql.deleteSpecies(name)) @@ -906,12 +912,12 @@ public Location deleteLocation(JSONObject jsonParams) throws Exception { int locationId = jsonParams.getInt("locationId"); if (locationId <= 0) - throw new InvalidInputException("Location's ID cannot be negative or zero!"); + throw new IllegalArgumentException("Location's ID cannot be negative or zero!"); Location location = sql.getLocation(locationId); if (location == null) - throw new InvalidInputException("No Location with that ID exists!"); + throw new IllegalArgumentException("No Location with that ID exists!"); if (!sql.deleteLocation(locationId)) throw new SQLException("SQL Location delete query failed!"); @@ -924,17 +930,21 @@ public Municipality deleteMunicipality(JSONObject jsonParams) throws Exception { String name = jsonParams.getString("name"); if (name.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("Municipality name cannot be empty!"); + throw new IllegalArgumentException("Municipality name cannot be empty!"); Municipality municipality = sql.getMunicipality(name); if (municipality == null) - throw new InvalidInputException("No Municipality with that name exists!"); + throw new IllegalArgumentException("No Municipality with that name exists!"); municipality.deleteKeepBorders(); if (!sql.deleteMunicipality(name)) throw new SQLException("SQL Municipality delete query failed!"); + for (Location location : municipality.getBorders()) { + sql.deleteLocation(location.getLocationId()); + } + return municipality; } @@ -944,19 +954,19 @@ public Forecast deleteForecast(JSONObject jsonParams) throws Exception { int forecastId = jsonParams.getInt("forecastId"); if (forecastId <= 0) - throw new InvalidInputException("Forecast's ID cannot be negative or zero!"); + throw new IllegalArgumentException("Forecast's ID cannot be negative or zero!"); if (username.replaceAll("\\s", "").isEmpty()) - throw new InvalidInputException("User is not logged in/Username is missing!"); + throw new IllegalArgumentException("User is not logged in/Username is missing!"); Forecast forecast = sql.getForecast(forecastId); User user = sql.getUser(username); if (forecast == null) - throw new InvalidInputException("No Forecast with that ID exists!"); + throw new IllegalArgumentException("No Forecast with that ID exists!"); if (user == null) - throw new InvalidInputException("No User with that username exists!"); + throw new IllegalArgumentException("No User with that username exists!"); if (!forecast.getFcUser().equals(user.getUsername())) - throw new InvalidInputException("This Forecast wasn't created by you!"); + throw new IllegalArgumentException("This Forecast wasn't created by you!"); if (!sql.deleteForecast(forecastId)) throw new SQLException("SQL Forecast delete query failed!"); @@ -974,7 +984,7 @@ public void resetDatabase(JSONObject jsonParams) throws Exception { String dbAccessKey = jsonParams.getString("dbAccessKey"); if (!dbKey.equals(dbAccessKey)) - throw new InvalidInputException("Authorization key for Reset Database is invalid!"); + throw new IllegalArgumentException("Authorization key for Reset Database is invalid!"); if (!User.clearUsers() || !Species.clearSpecies() || !Municipality.clearMunicipalities()) throw new SQLException("Unable to reset SQL database!"); @@ -990,7 +1000,7 @@ public void deleteDatabase(JSONObject jsonParams) throws Exception { String dbAccessKey = jsonParams.getString("dbAccessKey"); if (!dbKey.equals(dbAccessKey)) - throw new InvalidInputException("Authorization key for Reset Database is invalid!"); + throw new IllegalArgumentException("Authorization key for Reset Database is invalid!"); if (!User.clearUsers() || !Species.clearSpecies() || !Municipality.clearMunicipalities()) throw new SQLException("Unable to delete SQL database!"); @@ -1059,7 +1069,7 @@ public double forecastEnergyConserved(List trees) throws Exception { // Returns the amount of stormwater runoff by the tree (in L/yr) public double getStormwaterIntercepted(Tree tree) throws Exception { if (tree == null) - throw new InvalidInputException("Tree cannot be null!"); + throw new IllegalArgumentException("Tree cannot be null!"); double curveNumber = 0; double stormwaterCaptured = 0; @@ -1088,7 +1098,7 @@ public double getStormwaterIntercepted(Tree tree) throws Exception { // Returns the amount of CO2 sequestered by the tree (in kg/yr) public double getCO2Sequestered(Tree tree) throws Exception { if (tree == null) - throw new InvalidInputException("Tree cannot be null!"); + throw new IllegalArgumentException("Tree cannot be null!"); double weight = getWeightOfTree(tree); @@ -1108,7 +1118,7 @@ public double getCO2Sequestered(Tree tree) throws Exception { // Returns the amount of energy conserved by the tree (in kWh/yr) public double getEnergyConserved(Tree tree) throws Exception { if (tree == null) - throw new InvalidInputException("Tree cannot be null!"); + throw new IllegalArgumentException("Tree cannot be null!"); // Average energy consumed per citizen (in kWh/yr) double averageEnergyConsumed = 12332.2; @@ -1160,7 +1170,7 @@ public double energyConservedWorth(double energyConserved) { // Returns the approximate age of the tree using height and diameter (in years) public int getAgeOfTree(Tree tree) throws Exception { if (tree == null) - throw new InvalidInputException("Tree cannot be null!"); + throw new IllegalArgumentException("Tree cannot be null!"); double diameter = cmToInches(tree.getDiameter()); @@ -1174,7 +1184,7 @@ public Tree getFutureTree(Tree tree, Date futureDate) throws Exception { long futureTime = futureDate.getTime(); if (currentTime >= futureTime) - throw new InvalidInputException("Forecast date cannot be before the current date!"); + throw new IllegalArgumentException("Forecast date cannot be before the current date!"); double yearsDiff = (futureTime - currentTime) / (1000*60*60*24*365.25); @@ -1191,7 +1201,7 @@ public Tree getFutureTree(Tree tree, Date futureDate) throws Exception { // Returns the approximate weight of the tree (in kg) public double getWeightOfTree(Tree tree) throws Exception { if (tree == null) - throw new InvalidInputException("Tree cannot be null!"); + throw new IllegalArgumentException("Tree cannot be null!"); double height = cmToFeet(tree.getHeight()); double diameter = cmToInches(tree.getDiameter()); @@ -1255,4 +1265,4 @@ public double poundsToKG(double weight) { public double cubicFeetToLiters(double volume) { return 28.3168 * volume; } -} \ No newline at end of file +} diff --git a/TreePLE-Spring/src/main/resources/application-dev.properties b/TreePLE-Spring/src/main/resources/application-dev.properties deleted file mode 100644 index 2b8b58c..0000000 --- a/TreePLE-Spring/src/main/resources/application-dev.properties +++ /dev/null @@ -1,5 +0,0 @@ -server.port=${port:8088} -client.web.ip=192.168.56.50 -client.web.port=8087 -client.android.ip=192.168.56.102 -client.android.port=8086 \ No newline at end of file diff --git a/TreePLE-Spring/src/main/resources/application-prod.properties b/TreePLE-Spring/src/main/resources/application-prod.properties deleted file mode 100644 index 462fc95..0000000 --- a/TreePLE-Spring/src/main/resources/application-prod.properties +++ /dev/null @@ -1,5 +0,0 @@ -server.port=${port:8080} -client.web.ip=132.206.4.80 -client.web.port=8087 -client.android.ip=132.206.4.80 -client.android.port=8086 \ No newline at end of file diff --git a/TreePLE-Spring/src/main/resources/application-test.properties b/TreePLE-Spring/src/main/resources/application-test.properties deleted file mode 100644 index 2b8b58c..0000000 --- a/TreePLE-Spring/src/main/resources/application-test.properties +++ /dev/null @@ -1,5 +0,0 @@ -server.port=${port:8088} -client.web.ip=192.168.56.50 -client.web.port=8087 -client.android.ip=192.168.56.102 -client.android.port=8086 \ No newline at end of file diff --git a/TreePLE-Spring/src/main/resources/application.properties b/TreePLE-Spring/src/main/resources/application.properties deleted file mode 100644 index b2d2a5a..0000000 --- a/TreePLE-Spring/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.profiles.active=test \ No newline at end of file diff --git a/TreePLE-Spring/src/main/resources/application.yml b/TreePLE-Spring/src/main/resources/application.yml new file mode 100644 index 0000000..3521946 --- /dev/null +++ b/TreePLE-Spring/src/main/resources/application.yml @@ -0,0 +1,53 @@ +spring: + profiles: + active: dev + application: + name: treeple-api + version: 1.0 + +server: + host: localhost + port: ${PORT:8000} + +gmap: + keys: + - AIzaSyDzb0p2lAcypZ2IbhVyhJYu6rTQLPncY5g + - AIzaSyDeo4TnWCcvE-yZlpmsv9FAEyYogAzzcBk + - AIzaSyC2kAeJiONkZEJCcFRcO_esNEqchbuub7o + +--- + +spring: + profiles: dev + datasource: + db: treeple + url: jdbc:postgresql://localhost/treeple + username: postgres + password: postgres + +server: + ssl: + key-alias: treeple + key-store: ssl/treeple.p12 + key-store-type: PKCS12 + key-store-password: treeple + +--- + +spring: + profiles: test + datasource: + db: treeple_test + url: jdbc:postgresql://localhost/treeple_test + username: postgres + password: postgres + +--- + +spring: + profiles: prod + datasource: + db: ${DATABASE_URL} + url: ${JDBC_DATABASE_URL} + username: ${JDBC_DATABASE_USERNAME} + password: ${JDBC_DATABASE_PASSWORD} diff --git a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/AllTests.java b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/AllTests.java deleted file mode 100644 index 67aaf89..0000000 --- a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/AllTests.java +++ /dev/null @@ -1,14 +0,0 @@ -package ca.mcgill.ecse321.treeple; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -import ca.mcgill.ecse321.treeple.controller.TestTreePLERestController; -import ca.mcgill.ecse321.treeple.service.TestTreePLEService; -import ca.mcgill.ecse321.treeple.sqlite.TestSQLiteJDBC; - -@RunWith(Suite.class) -@SuiteClasses({TestTreePLERestController.class, TestTreePLEService.class, TestSQLiteJDBC.class}) -public class AllTests { -} \ No newline at end of file diff --git a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/controller/TestTreePLERestController.java b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/controller/TestTreePLERestController.java index 06a29e7..43227d9 100644 --- a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/controller/TestTreePLERestController.java +++ b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/controller/TestTreePLERestController.java @@ -8,7 +8,7 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; @@ -33,35 +33,36 @@ public class TestTreePLERestController { public void setUp() { mockMvc = MockMvcBuilders.standaloneSetup(mockController).build(); } -// @Test -// public void testGetAllTrees() throws Exception{ -// mockService.createSpecies(testSpecies); -// mockService.createMunicipality(testMunicipality); -// mockService.createUser(testUser); -// for (int i = 0; i < 4; i++) { -// mockService.createTree(testTree); -// } -// -// try { -// List trees = mockController.getAllTrees(); -// -// for(TreeDto treeDto: trees) { -// assertEquals(testTree.getInt("treeId"), treeDto.getTreeId()); -// assertEquals(testTree.getInt("height"), treeDto.getHeight()); -// assertEquals(testTree.getInt("diameter"), treeDto.getDiameter()); -// assertEquals(Date.valueOf(testTree.getString("datePlanted")), treeDto.getDatePlanted()); -// assertEquals(Land.valueOf(testTree.getString("land")), treeDto.getLand()); -// assertEquals(Status.valueOf(testTree.getString("status")), treeDto.getStatus()); -// assertEquals(Ownership.valueOf(testTree.getString("ownership")), treeDto.getOwnership()); -// assertEquals(testTree.getString("species"), treeDto.getSpecies().getName()); -// assertEquals(testTree.getDouble("latitude"), treeDto.getLocation().getLatitude(), 0); -// assertEquals(testTree.getDouble("longitude"), treeDto.getLocation().getLongitude(), 0); -// assertEquals(testTree.getString("municipality"), treeDto.getMunicipality().getName()); -// } -// }catch(Exception e) { -// fail(); -// } -// } + + // @Test + // public void testGetAllTrees() throws Exception{ + // mockService.createSpecies(testSpecies); + // mockService.createMunicipality(testMunicipality); + // mockService.createUser(testUser); + // for (int i = 0; i < 4; i++) { + // mockService.createTree(testTree); + // } + + // try { + // List trees = mockController.getAllTrees(); + + // for(TreeDto treeDto: trees) { + // assertEquals(testTree.getInt("treeId"), treeDto.getTreeId()); + // assertEquals(testTree.getInt("height"), treeDto.getHeight()); + // assertEquals(testTree.getInt("diameter"), treeDto.getDiameter()); + // assertEquals(Date.valueOf(testTree.getString("datePlanted")), treeDto.getDatePlanted()); + // assertEquals(Land.valueOf(testTree.getString("land")), treeDto.getLand()); + // assertEquals(Status.valueOf(testTree.getString("status")), treeDto.getStatus()); + // assertEquals(Ownership.valueOf(testTree.getString("ownership")), treeDto.getOwnership()); + // assertEquals(testTree.getString("species"), treeDto.getSpecies().getName()); + // assertEquals(testTree.getDouble("latitude"), treeDto.getLocation().getLatitude(), 0); + // assertEquals(testTree.getDouble("longitude"), treeDto.getLocation().getLongitude(), 0); + // assertEquals(testTree.getString("municipality"), treeDto.getMunicipality().getName()); + // } + // } catch(Exception e) { + // fail(); + // } + // } @Test public void testGetAllTreesEmptyDB() throws Exception { @@ -71,8 +72,6 @@ public void testGetAllTreesEmptyDB() throws Exception { .andExpect(content().string("[]")); } - - @Test public void testGetAllUsersEmptyDB() throws Exception { mockMvc.perform(get("/users/").contentType(APPLICATION_JSON)) diff --git a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/sqlite/TestSQLiteJDBC.java b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/persistence/TestTreePLEPSQL.java similarity index 91% rename from TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/sqlite/TestSQLiteJDBC.java rename to TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/persistence/TestTreePLEPSQL.java index 441940e..6863a8b 100644 --- a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/sqlite/TestSQLiteJDBC.java +++ b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/persistence/TestTreePLEPSQL.java @@ -1,51 +1,39 @@ -package ca.mcgill.ecse321.treeple.sqlite; +package ca.mcgill.ecse321.treeple.persistence; import static org.junit.Assert.*; -import java.io.File; import java.util.ArrayList; import org.json.JSONObject; import org.junit.*; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; import ca.mcgill.ecse321.treeple.model.*; import ca.mcgill.ecse321.treeple.service.TreePLEService; -public class TestSQLiteJDBC { +@RunWith(SpringRunner.class) +@SpringBootTest +public class TestTreePLEPSQL { - private static SQLiteJDBC sql; - private static File dbFile; - private static final String dbPath = "/output/treeple_test.db"; + @Autowired + private TreePLEPSQL sql; - private static TreePLEService service; + @Autowired + private TreePLEService service; - private static JSONObject defaultUser; - private static JSONObject defaultSpecies; - private static JSONObject defaultLocation; - private static JSONObject defaultMun; + private JSONObject defaultUser; + private JSONObject defaultSpecies; + private JSONObject defaultLocation; + private JSONObject defaultMun; - private static final int numTrees = 5; - private static final int numUsers = 5; - private static final int numSpecies = 5; - private static final int numLocations = 5; - private static final int numMunicipalities = 5; - - @BeforeClass - public static void setUpBeforeClass() { - sql = new SQLiteJDBC(dbPath); - dbFile = (new File(System.getProperty("user.dir") + dbPath)).getAbsoluteFile(); - sql.connect(); - - service = new TreePLEService(sql); - } - - @AfterClass - public static void tearDownAfterClass() { - if (sql != null) { - sql.deleteDB(); - sql.closeConnection(); - } - } + private final int numTrees = 5; + private final int numUsers = 5; + private final int numSpecies = 5; + private final int numLocations = 5; + private final int numMunicipalities = 5; @Before public void setUp() { @@ -83,19 +71,6 @@ public void tearDown() throws Exception { service.resetDatabase(dbAccessKey); } - @Test - public void testResetDB() { - assertEquals(true, sql.resetDB()); - } - - @Test - public void testDeleteDB() { - assertEquals(true, dbFile.exists()); - assertEquals(true, sql.deleteDB()); - assertEquals(false, dbFile.exists()); - assertEquals(true, sql.connect()); - } - // ====================== // USER TESTS // ====================== @@ -1051,29 +1026,23 @@ public void testDeleteTree() { assertEquals(0, sql.getAllTrees().size()); } - - //TODO - // ====================== - // SURVEY REPORT TESTS - // ====================== - - //TODO + // ====================== // FORECASTING TESTS // ====================== - + @Test public void testInsertForecast() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId1 = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId1 = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1102,23 +1071,23 @@ public void testInsertForecast() { success = sql.insertTree(treeId1 + i, height, diameter, address, datePlanted, land, status, ownership, species, location1, municipality, reports); assertEquals(true, success); } - + success = sql.insertForecast(forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); } - + @Test public void testGetAllForecast() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1147,24 +1116,24 @@ public void testGetAllForecast() { success = sql.insertTree(treeId + i, height, diameter, address, datePlanted, land, status, ownership, species, location1, municipality, reports); assertEquals(true, success); } - + success = sql.insertForecast(forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); success = sql.insertForecast(forecastId+1, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); - + int i = 0; for(Forecast forecast: sql.getAllForecasts()) { - assertEquals(forecast.getForecastId(), forecastId + i); - assertEquals(forecast.getFcDate().toString(), fcDate); - assertEquals(forecast.getFcUser(), fcUser); - assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); - assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); - assertEquals(forecast.getStormwater(), stormwater, 0.01); - assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); - int j = 0; - for(Tree tree: forecast.getFcTrees()){ - assertEquals(tree.getTreeId(), treeId + j); + assertEquals(forecast.getForecastId(), forecastId + i); + assertEquals(forecast.getFcDate().toString(), fcDate); + assertEquals(forecast.getFcUser(), fcUser); + assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); + assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); + assertEquals(forecast.getStormwater(), stormwater, 0.01); + assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); + int j = 0; + for(Tree tree: forecast.getFcTrees()){ + assertEquals(tree.getTreeId(), treeId + j); assertEquals(tree.getHeight(), height); assertEquals(tree.getDiameter(), diameter); assertEquals(tree.getAddress(), address); @@ -1176,23 +1145,23 @@ public void testGetAllForecast() { assertEquals(tree.getLocation().getLocationId(), location1); assertEquals(tree.getMunicipality().getName(), municipality); j++; - } - i++; + } + i++; } } - + @Test public void testGetForecast() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1221,31 +1190,31 @@ public void testGetForecast() { success = sql.insertTree(treeId + i, height, diameter, address, datePlanted, land, status, ownership, species, location1, municipality, reports); assertEquals(true, success); } - + success = sql.insertForecast(forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); Forecast forecast = sql.getForecast(forecastId); assertEquals(forecast.getForecastId(), forecastId); - assertEquals(forecast.getFcDate().toString(), fcDate); - assertEquals(forecast.getFcUser(), fcUser); - assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); - assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); - assertEquals(forecast.getStormwater(), stormwater, 0.01); - assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); + assertEquals(forecast.getFcDate().toString(), fcDate); + assertEquals(forecast.getFcUser(), fcUser); + assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); + assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); + assertEquals(forecast.getStormwater(), stormwater, 0.01); + assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); } - + @Test public void testGetForecastMaxId() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1275,23 +1244,23 @@ public void testGetForecastMaxId() { assertEquals(true, success); } for(int i = 0; i < numTrees; i++) { - success = sql.insertForecast(forecastId + i, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); - assertEquals(true, success); + success = sql.insertForecast(forecastId + i, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); + assertEquals(true, success); } assertEquals(numTrees + forecastId - 1, sql.getMaxForecastId()); } @Test public void testGetAllForecastsOfUser() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1320,26 +1289,26 @@ public void testGetAllForecastsOfUser() { success = sql.insertTree(treeId + i, height, diameter, address, datePlanted, land, status, ownership, species, location1, municipality, reports); assertEquals(true, success); } - + success = sql.insertForecast(forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); success = sql.insertForecast(forecastId+1, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); success = sql.insertForecast(forecastId+2, fcDate, "Gareth", co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); - + int i = 0; for(Forecast forecast: sql.getAllForecastsOfUser(defaultUser.getString("username"))) { - assertEquals(forecast.getForecastId(), forecastId + i); - assertEquals(forecast.getFcDate().toString(), fcDate); - assertEquals(forecast.getFcUser(), fcUser); - assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); - assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); - assertEquals(forecast.getStormwater(), stormwater, 0.01); - assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); - int j = 0; - for(Tree tree: forecast.getFcTrees()){ - assertEquals(tree.getTreeId(), treeId + j); + assertEquals(forecast.getForecastId(), forecastId + i); + assertEquals(forecast.getFcDate().toString(), fcDate); + assertEquals(forecast.getFcUser(), fcUser); + assertEquals(forecast.getCo2Reduced(), co2Reduced, 0.01); + assertEquals(forecast.getEnergyConserved(), energyConserved, 0.01); + assertEquals(forecast.getStormwater(), stormwater, 0.01); + assertEquals(forecast.getBiodiversity(), biodiversity, 0.01); + int j = 0; + for(Tree tree: forecast.getFcTrees()){ + assertEquals(tree.getTreeId(), treeId + j); assertEquals(tree.getHeight(), height); assertEquals(tree.getDiameter(), diameter); assertEquals(tree.getAddress(), address); @@ -1351,24 +1320,24 @@ public void testGetAllForecastsOfUser() { assertEquals(tree.getLocation().getLocationId(), location1); assertEquals(tree.getMunicipality().getName(), municipality); j++; - } - i++; + } + i++; } assertEquals(i, 2); } - + @Test public void testDeleteForecast() { - int forecastId = 1; - String fcDate = "2001-12-22"; - String fcUser = defaultUser.getString("username"); - double co2Reduced = 1.0; - double stormwater = 2.0; - double energyConserved = 3.0; - double biodiversity = 0.5; - String fcTrees = "1,2,3,4"; - - int treeId = 1; + int forecastId = 1; + String fcDate = "2001-12-22"; + String fcUser = defaultUser.getString("username"); + double co2Reduced = 1.0; + double stormwater = 2.0; + double energyConserved = 3.0; + double biodiversity = 0.5; + String fcTrees = "1,2,3,4"; + + int treeId = 1; int height = 10; int diameter = 20; String address = defaultUser.getString("addresses"); @@ -1397,13 +1366,13 @@ public void testDeleteForecast() { success = sql.insertTree(treeId + i, height, diameter, address, datePlanted, land, status, ownership, species, location1, municipality, reports); assertEquals(true, success); } - + success = sql.insertForecast(forecastId, fcDate, fcUser, co2Reduced, biodiversity, stormwater, energyConserved, fcTrees); assertEquals(true, success); - + success = sql.deleteForecast(forecastId); assertEquals(true, success); - + assertEquals(0, sql.getAllForecasts().size()); } } diff --git a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/service/TestTreePLEService.java b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/service/TestTreePLEService.java index 0d18b73..3d60517 100644 --- a/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/service/TestTreePLEService.java +++ b/TreePLE-Spring/src/test/java/ca/mcgill/ecse321/treeple/service/TestTreePLEService.java @@ -8,18 +8,26 @@ import org.json.*; import org.junit.*; +import org.junit.runner.RunWith; import org.mindrot.jbcrypt.BCrypt; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; import ca.mcgill.ecse321.treeple.model.*; import ca.mcgill.ecse321.treeple.model.Tree.*; import ca.mcgill.ecse321.treeple.model.User.*; -import ca.mcgill.ecse321.treeple.sqlite.SQLiteJDBC; +import ca.mcgill.ecse321.treeple.persistence.TreePLEPSQL; +@RunWith(SpringRunner.class) +@SpringBootTest public class TestTreePLEService { - private static SQLiteJDBC sql; - private static TreePLEService service; - private static final String dbPath = "/output/treeple_test.db"; + @Autowired + private TreePLEPSQL sql; + + @Autowired + private TreePLEService service; private static JSONObject testTree; private static JSONObject testUser; @@ -29,10 +37,6 @@ public class TestTreePLEService { @BeforeClass public static void setUpBeforeClass() { - sql = new SQLiteJDBC(dbPath); - sql.connect(); - service = new TreePLEService(sql); - testTree = buildTestTree(); testUser = buildTestUser(); testSpecies = buildTestSpecies(); @@ -40,12 +44,6 @@ public static void setUpBeforeClass() { testMunicipality = buildTestMunicipality(); } - @AfterClass - public static void tearDownAfterClass() { - sql.deleteDB(); - sql.closeConnection(); - } - @After public void tearDown() throws Exception { JSONObject dbAccessKey = new JSONObject(); @@ -231,7 +229,7 @@ public void testCreateUserBadRole() throws Exception { try { service.createUser(user); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("That role doesn't exist!", e.getMessage()); } } @@ -247,7 +245,7 @@ public void testCreateUserResidentialWithEmptyAddress() throws Exception { try { service.createUser(user); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Address cannot be empty!", e.getMessage()); } } @@ -413,7 +411,7 @@ public void testCreateMunicipalityAlreadyExists() throws Exception { - @Test(expected = InvalidInputException.class) + @Test(expected = IllegalArgumentException.class) public void testCreateMunicipalityTwoBorders() throws Exception { JSONObject municipality = new JSONObject(); municipality.put("name", "Saint-Lazare"); @@ -755,7 +753,7 @@ public void testCreateTreeWrongDateFormat() throws Exception { tree.getJSONObject("tree").put("datePlanted", "18-03-2020"); service.createTree(tree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Date doesn't match YYYY-(M)M-(D)D format!", e.getMessage()); } } @@ -767,7 +765,7 @@ public void testCreateTreeEmptyUser() throws Exception { tree.put("user", " "); service.createTree(tree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("User is not logged in/Username is missing!", e.getMessage()); } } @@ -780,7 +778,7 @@ public void testCreateTreeInvalidLocation() throws Exception { tree.getJSONObject("tree").put("longitude", "-181"); service.createTree(tree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Invalid Google Maps API request!", e.getMessage()); } } @@ -789,7 +787,7 @@ public void testCreateTreeInvalidLocation() throws Exception { public void testCreateTreeUserNonExistant() throws Exception { try { service.createTree(testTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No User with that username exists!", e.getMessage()); } } @@ -800,7 +798,7 @@ public void testCreateTreeSpeciesNonExistant() throws Exception { try { service.createTree(testTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Species with that name exists!", e.getMessage()); } } @@ -812,7 +810,7 @@ public void testCreateTreeMunicipalityNonExistant() throws Exception { try { service.createTree(testTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Municipality with that name exists!", e.getMessage()); } } @@ -844,7 +842,7 @@ public void testGetUserByUsernameNull() throws Exception { try { service.getUserByUsername(username); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Username cannot be empty!", e.getMessage()); } } @@ -855,12 +853,12 @@ public void testGetUserByUsernameEmpty() throws Exception { try { service.getUserByUsername(username); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Username cannot be empty!", e.getMessage()); } } - @Test(expected = InvalidInputException.class) + @Test(expected = IllegalArgumentException.class) public void testGetUserByUsernameNonExistant() throws Exception { service.getUserByUsername("Filip"); } @@ -896,7 +894,7 @@ public void testGetMunicipalityByNameEmpty() throws Exception { try { service.getMunicipalityByName(name); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Municipality name cannot be empty!", e.getMessage()); } } @@ -907,12 +905,12 @@ public void testGetMunicipalityByNameNull() throws Exception { try { service.getMunicipalityByName(name); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Municipality name cannot be empty!", e.getMessage()); } } - @Test(expected = InvalidInputException.class) + @Test(expected = IllegalArgumentException.class) public void testGetMunicipalityByNameNonExistant() throws Exception { service.getMunicipalityByName("Laval"); } @@ -952,12 +950,12 @@ public void testGetTreeById() throws Exception { public void testGetTreeByIdNegativeId() throws Exception { try { service.getTreeById(-1); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Tree's ID cannot be negative!", e.getMessage()); } } - @Test(expected = InvalidInputException.class) + @Test(expected = IllegalArgumentException.class) public void testGetTreeByIdNonExistantTree() throws Exception { service.getTreeById(100); } @@ -1945,7 +1943,7 @@ public void testUpdateUserBadRole() throws Exception { try { service.updateUser(user); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("That role doesn't exist!", e.getMessage()); } } @@ -1962,7 +1960,7 @@ public void testUpdateUserResidentialWithEmptyAddress() throws Exception { try { service.updateUser(user); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Address cannot be empty!", e.getMessage()); } } @@ -2097,7 +2095,7 @@ public void testUpdateMunicipalityEmptyBorders() { } } - @Test(expected = InvalidInputException.class) + @Test(expected = IllegalArgumentException.class) public void testUpdateMunicipalityTwoBorders() throws Exception { JSONObject municipality = new JSONObject(); municipality.put("name", "Saint-Lazare"); @@ -2133,7 +2131,7 @@ public void testDeleteUser() throws Exception { assertEquals(false, User.hasWithUsername(testUser.getString("username"))); try { service.getUserByUsername(testUser.getString("username")); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No User with that username exists!", e.getMessage()); } } catch (Exception e) { @@ -2148,7 +2146,7 @@ public void testDeleteUserEmpty() throws Exception { try { service.deleteUser(deleteUser); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals ("User is not logged in/Username is missing!", e.getMessage()); } } @@ -2168,7 +2166,7 @@ public void testDeleteUserNonExistant() throws Exception { try { service.deleteUser(deleteUser); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No User with that username exists!", e.getMessage()); } } @@ -2194,7 +2192,7 @@ public void testDeleteSpecies() throws Exception { assertEquals(false, Species.hasWithName(testSpecies.getString("name"))); try { service.getSpeciesByName(testSpecies.getString("name")); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Species with that name exists!", e.getMessage()); } } catch (Exception e) { @@ -2209,7 +2207,7 @@ public void testDeleteSpeciesEmpty() throws Exception { try { service.deleteSpecies(deleteSpecies); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Species name cannot be empty!", e.getMessage()); } } @@ -2229,7 +2227,7 @@ public void testDeleteSpeciesNonExistant() throws Exception { try { service.deleteSpecies(deleteSpecies); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Species with that name exists!", e.getMessage()); } } @@ -2265,7 +2263,7 @@ public void testDeleteLocationNegativeId() throws Exception { try { service.deleteLocation(deleteLocation); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Location's ID cannot be negative or zero!", e.getMessage()); } } @@ -2277,7 +2275,7 @@ public void testDeleteLocationNonExistant() throws Exception { try { service.deleteLocation(deleteLocation); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Location with that ID exists!", e.getMessage()); } } @@ -2309,7 +2307,7 @@ public void testDeleteMunicipality() throws Exception { } try { service.getMunicipalityByName(testMunicipality.getString("name")); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Municipality with that name exists!", e.getMessage()); } } catch (Exception e) { @@ -2324,7 +2322,7 @@ public void testDeleteMunicipalityEmpty() throws Exception { try { service.deleteMunicipality(deleteMunicipality); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("Municipality name cannot be empty!", e.getMessage()); } } @@ -2344,7 +2342,7 @@ public void testDeleteMunicipalityNonExistant() throws Exception { try { service.deleteMunicipality(deleteMunicipality); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Municipality with that name exists!", e.getMessage()); } } @@ -2379,7 +2377,7 @@ public void testDeleteTree() throws Exception { assertEquals(treeObj.getDouble("latitude"), tree.getLocation().getLatitude(), 0); assertEquals(treeObj.getDouble("longitude"), tree.getLocation().getLongitude(), 0); assertEquals(treeObj.getString("municipality"), tree.getMunicipality().getName()); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { fail(); } } @@ -2398,7 +2396,7 @@ public void testDeleteTreeNegativeTreeID() throws Exception { try { service.deleteTree(deleteTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { error = e.getMessage(); } assertEquals("Tree's ID cannot be negative or zero!", error); @@ -2418,7 +2416,7 @@ public void testDeleteTreeUserNameEmpty() throws Exception { try { service.deleteTree(deleteTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { error = e.getMessage(); } assertEquals("User is not logged in/Username is missing!", error); @@ -2431,7 +2429,7 @@ public void testDeleteTreeNonExistantTree() throws Exception { try { service.deleteTree(deleteTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No Tree with that ID exists!", e.getMessage()); } } @@ -2449,7 +2447,7 @@ public void testDeleteTreeNonExistantUser() throws Exception { try { service.deleteTree(deleteTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("No User with that username exists!", e.getMessage()); } } @@ -2471,7 +2469,7 @@ public void testDeleteTreeUserDoesntOwnTree() throws Exception { try { service.deleteTree(deleteTree); - } catch (InvalidInputException e) { + } catch (IllegalArgumentException e) { assertEquals("This Tree wasn't planted by you!", e.getMessage()); } } diff --git a/TreePLE-Spring/ssl/treeple.p12 b/TreePLE-Spring/ssl/treeple.p12 new file mode 100644 index 0000000..ee0ad34 Binary files /dev/null and b/TreePLE-Spring/ssl/treeple.p12 differ diff --git a/TreePLE-Spring/testinputs.json b/TreePLE-Spring/testinputs.json deleted file mode 100644 index 04ee88c..0000000 --- a/TreePLE-Spring/testinputs.json +++ /dev/null @@ -1,457 +0,0 @@ -// ============================== -// TREE -// ============================== -{ - "user": "Fetish", - "tree": { - "height": 532, - "diameter": 92, - "datePlanted": "2018-02-26", - "land": "Residential", - "status": "Planted", - "ownership": "Public", - "species": "Arizona Cypress", - "latitude": 45.428065, - "longitude": -74.166964, - "municipality": "Saint-Lazare" - } -} -{ - "user": "Abbas", - "tree": { - "height": 360, - "diameter": 40, - "datePlanted": "2018-04-01", - "land": "Residential", - "status": "Planted", - "ownership": "Private", - "species": "Sugi", - "latitude": 45.515883, - "longitude": -73.685552, - "municipality": "Saint-Laurent" - } -} -{ - "user": "Admin", - "tree": { - "height": 190, - "diameter": 20, - "datePlanted": "2018-03-16", - "land": "Residential", - "status": "Planted", - "ownership": "Private", - "species": "Weeping Willow", - "latitude": 45.56883, - "longitude": -73.685952, - "municipality": "Saint-Laurent" - } -} - - -// ============================== -// SPECIES -// ============================== - -{ - "name": "Weeping Willow", - "species": "Salix Babylonica", - "genus": "Salix" -} -{ - "name": "Pacific Silver Fir", - "species": "Abies Amabilis", - "genus": "Abies" -} -{ - "name": "Monkey-Puzzle", - "species": "Araucaria Araucana", - "genus": "Araucaria" -} -{ - "name": "Atlas Cedar", - "species": "Cedrus Atlantica", - "genus": "Cedrus" -} -{ - "name": "Lawson's Cypress", - "species": "Chamaecyparis Lawsoniana", - "genus": "Chamaecyparis" -} -{ - "name": "Sugi", - "species": "Cryptomeria Japonica", - "genus": "Cryptomeria" -} -{ - "name": "Arizona Cypress", - "species": "Cupressus Arizonica", - "genus": "Cupressus" -} -{ - "name": "Chinese Juniper", - "species": "Juniperus Chinensis", - "genus": "Juniperus" -} -{ - "name": "European Larch", - "species": "Larix Decidua", - "genus": "Larix" -} -{ - "name": "Dawn Redwood", - "species": "Metasequoia Glyptostroboides", - "genus": "Metasequoia" -} -{ - "name": "Norway Spruce", - "species": "Picea Abies", - "genus": "Picea" -} -{ - "name": "Whitebark Pine", - "species": "Pinus Albicaulis", - "genus": "Pinus" -} -{ - "name": "Chinese Arborvitae", - "species": "Platycladus Orientalis", - "genus": "Platycladus" -} -{ - "name": "Coast Douglas-fir", - "species": "Pseudotsuga Menziesii", - "genus": "Pseudotsuga" -} -{ - "name": "Umbrella-pine", - "species": "Sequoia Sempervirens", - "genus": "Sequoia" -} -{ - "name": "Giant Sequoia", - "species": "Sequoiadendron Giganteum", - "genus": "Sequoiadendron" -} -{ - "name": "Baldcypress", - "species": "Taxodium Distichum", - "genus": "Taxodium" -} -{ - "name": "English Yew", - "species": "Taxus Baccata", - "genus": "Taxus" -} -{ - "name": "Eastern Arborvitae", - "species": "Thuja Occidentalis", - "genus": "Thuja" -} -{ - "name": "Eastern Hemlock", - "species": "Tsuga Canadensis", - "genus": "Tsuga" -} - -// ============================== -// MUNICIPALITY -// ============================== - -{ - "name": "Saint-Lazare", - "totalTrees": 0, - "borders": [ - [45.397067, -74.152067], - [45.411974, -74.152188], - [45.408184, -74.122178], - [45.391692, -74.129016] - ] -} -{ - "name": "Saint-Laurent", - "totalTrees": 0, - "borders": [ - [45.497470, -73.772830], - [45.481864, -73.773715], - [45.460268, -73.750029], - [45.481208, -73.723422], - [45.459034, -73.683652], - [45.526536, -73.651208], - [45.522407, -73.730198] - ] -} -{ - "name": "Anjou", - "totalTrees": 0, - "borders": [ - [45.633923, -73.568635], - [45.611286, -73.603240], - [45.590152, -73.549146], - [45.619365, -73.536400] - ] -} -{ - "name": "Lachine", - "totalTrees": 0, - "borders": [ - [45.438173, -73.719923], - [45.430644, -73.669111], - [45.448410, -73.628856], - [45.473352, -73.707899], - [45.460982, -73.724679] - ] -} -{ - "name": "Lasalle", - "totalTrees": 0, - "borders": [ - [45.432099, -73.665395], - [45.421166, -73.665781], - [45.413575, -73.604155], - [45.428877, -73.555060], - [45.439959, -73.611880], - [45.449594, -73.604670], - [45.457662, -73.613768] - ] -} -{ - "name": "Outremont", - "totalTrees": 0, - "borders": [ - [45.527897, -73.617541], - [45.516351, -73.626639], - [45.503720, -73.595912], - [45.515148, -73.590762] - ] -} -{ - "name": "Kirkland", - "totalTrees": 0, - "borders": [ - [45.470829, -73.854712], - [45.446507, -73.905524], - [45.435305, -73.900718], - [45.445784, -73.832396] - ] -} -{ - "name": "Westmount", - "totalTrees": 0, - "borders": [ - [45.485728, -73.580596], - [45.495531, -73.606828], - [45.488949, -73.618464], - [45.480451, -73.614177], - [45.473920, -73.597080] - ] -} -{ - "name": "Dorval", - "totalTrees": 0, - "borders": [ - [45.481754, -73.794631], - [45.467203, -73.780341], - [45.465140, -73.784653], - [45.439724, -73.774982], - [45.438658, -73.719694], - [45.460975, -73.724674], - [45.473275, -73.707857], - [45.482233, -73.723447], - [45.461481, -73.750080], - [45.481981, -73.773820], - [45.490576, -73.764412], - [45.494575, -73.767872] - ] -} -{ - "name": "Ahuntsic-Cartierville", - "totalTrees": 0, - "borders": [ - [45.584525, -73.653688], - [45.510892, -73.760127], - [45.504816, -73.754033], - [45.515764, -73.728026], - [45.520996, -73.735150], - [45.524063, -73.731116], - [45.521657, -73.727425], - [45.527009, -73.720816], - [45.522439, -73.707942], - [45.528993, -73.686484], - [45.533202, -73.673095], - [45.527550, -73.651465], - [45.555684, -73.622798], - [45.564698, -73.644942], - [45.575994, -73.635329] - ] -} -{ - "name": "Notre-Dame-de-Grace", - "totalTrees": 0, - "borders": [ - [45.459954, -73.658421], - [45.449907, -73.631959], - [45.475107, -73.594088], - [45.487192, -73.617879], - [45.503698, -73.594574], - [45.517479, -73.628075], - [45.502507, -73.645797], - [45.505060, -73.659635], - [45.495361, -73.656479], - [45.489830, -73.673715], - [45.479703, -73.656115], - [45.488809, -73.650652], - [45.479022, -73.628561] - ] -} -{ - "name": "Le Sud-Ouest", - "totalTrees": 0, - "borders": [ - [45.440210, -73.612764], - [45.437921, -73.599203], - [45.474406, -73.571737], - [45.468989, -73.555258], - [45.479943, -73.526934], - [45.491858, -73.530023], - [45.498325, -73.561523], - [45.490384, -73.567489], - [45.493452, -73.573239], - [45.451079, -73.635638], - [45.448610, -73.628857], - [45.457642, -73.613580], - [45.454812, -73.607142] - ] -} -{ - "name": "Hochelaga-Maisonneuve", - "totalTrees": 0, - "borders": [ - [45.611224, -73.505991], - [45.617228, -73.542727], - [45.591767, -73.550623], - [45.597533, -73.569850], - [45.581916, -73.568820], - [45.574467, -73.549593], - [45.540812, -73.558177], - [45.531914, -73.541010] - ] -} -{ - "name": "Montreal-Nord", - "totalTrees": 0, - "borders": [ - [45.577824, -73.636377], - [45.613378, -73.602044], - [45.634747, -73.623674], - [45.587195, -73.659036] - ] -} -{ - "name": "Pointe-aux-Trembles", - "totalTrees": 0, - "borders": [ - [45.615363, -73.599840], - [45.649213, -73.544908], - [45.634091, -73.488260], - [45.703187, -73.474870], - [45.698392, -73.521219], - [45.631450, -73.618723] - ] -} -{ - "name": "Rosemont", - "totalTrees": 0, - "borders": [ - [45.584035, -73.572622], - [45.531148, -73.622061], - [45.528743, -73.599058], - [45.542691, -73.579832], - [45.541489, -73.556829], - [45.575144, -73.548933] - ] -} -{ - "name": "Saint-Leonard", - "totalTrees": 0, - "borders": [ - [45.612616, -73.604489], - [45.584510, -73.629208], - [45.566967, -73.588009], - [45.598445, -73.571873] - ] -} -{ - "name": "Ville-Marie", - "totalTrees": 0, - "borders": [ - [45.495538, -73.605551], - [45.485791, -73.581862], - [45.494215, -73.569502], - [45.490605, -73.539633], - [45.532708, -73.540663], - [45.540764, -73.559203], - [45.505164, -73.573622], - [45.517915, -73.587699] - ] -} -{ - "name": "Villeray", - "totalTrees": 0, - "borders": [ - [45.586621, -73.627080], - [45.565954, -73.644933], - [45.555859, -73.623303], - [45.532295, -73.650083], - [45.524117, -73.620557], - [45.568118, -73.587598] - ] -} - - - -// ============================== -// USER -// ============================== - -{ - "username": "Abbas", - "password": "memegod", - "role": "Resident", - "scientistKey": "", - "myAddresses": ["H4L3N1"] -} -{ - "username": "Fetish", - "password": "meme123", - "role": "Resident", - "scientistKey": "", - "myAddresses": ["J7T"] -} -{ - "username": "Gareth", - "password": "gingerboi", - "role": "Scientist", - "scientistKey": "i<3tr33s", - "myAddresses": ["H4A2X8"] -} -{ - "username": "Filip", - "password": "filipino", - "role": "Scientist", - "scientistKey": "i<3tr33s", - "myAddresses": ["J5A1R4"] -} -{ - "username": "Yunus", - "password": "turkishboi", - "role": "Scientist", - "scientistKey": "i<3tr33s", - "myAddresses": ["J5A1R4"] -} -{ - "username": "Admin", - "password": "guccigang", - "role": "Scientist", - "scientistKey": "i<3tr33s", - "myAddresses": [""] -} \ No newline at end of file diff --git a/TreePLE-Web/.babelrc b/TreePLE-Web/.babelrc new file mode 100644 index 0000000..88c7ab8 --- /dev/null +++ b/TreePLE-Web/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + "@babel/env", + "@babel/react" + ], + "plugins": [ + "@babel/plugin-proposal-function-bind", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-class-properties", + ] + } diff --git a/TreePLE-Web/.eslintrc b/TreePLE-Web/.eslintrc new file mode 100644 index 0000000..4ecea92 --- /dev/null +++ b/TreePLE-Web/.eslintrc @@ -0,0 +1,206 @@ +{ + // https://eslint.org/docs/user-guide/configuring#specifying-parser-options + "parser": "babel-eslint", + + // https://github.com/yannickcr/eslint-plugin-react#configuration + "settings": { + "react": { + "pragma": "React", + "version": "^16.4.1" + } + }, + + // "parser": "esprima", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + + // https://eslint.org/docs/user-guide/configuring#specifying-environments + "env": { + "browser": false, // browser global variables + "node": false, // Node.js global variables and Node.js scoping + "commonjs": false, // CommonJS global variables and CommonJS scoping (use this for browser-only code that uses Browserify/WebPack) + "shared-node-browser": false, // Globals common to both Node and Browser + "es6": true, // enable all ECMAScript 6 features except for modules (this automatically sets the ecmaVersion parser option to 6) + "jquery": false, // jQuery globals + }, + + // https://eslint.org/docs/user-guide/configuring#configuring-plugins + "plugins": [ + "react" + ], + + // https://eslint.org/docs/user-guide/configuring#configuring-rules + // https://eslint.org/docs/rules/ + "rules": { + + ////////// Possible Errors ////////// + + "no-console": 1, // disallow the use of console + "no-constant-condition": 1, // disallow constant expressions in conditions + "no-debugger": 1, // disallow the use of debugger + "no-dupe-args": 1, // disallow duplicate arguments in function definitions + "no-dupe-keys": 1, // disallow duplicate keys in object literals + "no-duplicate-case": 1, // disallow duplicate case labels + "no-empty": 1, // disallow empty block statements + "no-extra-boolean-cast": 1, // disallow unnecessary boolean casts + "no-extra-parens": [1, // disallow unnecessary parentheses + "all", { + "returnAssign": false, + "nestedBinaryExpressions": false, + "ignoreJSX": "all", + } + ], + "no-func-assign": 1, // disallow reassigning function declarations + "no-inner-declarations": 1, // disallow variable or function declarations in nested blocks + "no-irregular-whitespace": 1, // disallow irregular whitespace outside of strings and comments + "no-obj-calls": 1, // disallow calling global object properties as functions + "no-sparse-arrays": 1, // disallow sparse arrays + "no-template-curly-in-string": 1, // disallow template literal placeholder syntax in regular strings + "no-unreachable": 1, // disallow unreachable code after return, throw, continue, and break statements + "no-unsafe-negation": 1, // disallow negating the left operand of relational operators + "use-isnan": 1, // require calls to isNaN() when checking for NaN + "valid-jsdoc": 0, // enforce valid JSDoc comments + "valid-typeof": 1, // enforce comparing typeof expressions against valid strings + + ////////// Best Practices ////////// + + "array-callback-return": 1, // enforce return statements in callbacks of array methods + "curly": 0, // enforce consistent brace style for all control statements + "dot-notation": 1, // enforce dot notation whenever possible + "eqeqeq": 1, // require the use of === and !== + "no-empty-pattern": 1, // disallow empty destructuring patterns + "no-fallthrough": 1, // disallow fallthrough of case statements + "no-floating-decimal": 1, // disallow leading or trailing decimal points in numeric literals + "no-lone-blocks": 1, // disallow unnecessary nested blocks + "no-multi-spaces": [1, { // disallow multiple spaces + "ignoreEOLComments": true + }], + "no-multi-str": 1, // disallow multiline strings + "no-octal": 1, // disallow octal literals + "no-redeclare": 1, // disallow variable redeclaration + "no-self-assign": 1, // disallow assignments where both sides are exactly the same + "no-self-compare": 1, // disallow comparisons where both sides are exactly the same + "no-useless-concat": 1, // disallow unnecessary concatenation of literals or template literals + "no-useless-escape": 1, // disallow unnecessary escape characters + "no-useless-return": 0, // disallow redundant return statements + + ////////// Variables ////////// + + "no-shadow": 1, // disallow variable declarations from shadowing variables declared in the outer scope + "no-undef-init": 1, // disallow initializing variables to undefined + "no-unused-vars": 1, // disallow unused variables + + ////////// Node.js and CommonJS ////////// + + "global-require": 1, // require require() calls to be placed at top-level module scope + + ////////// Stylistic Issues ////////// + + "array-bracket-newline": [1, // enforce linebreaks after opening and before closing array brackets + "consistent" + ], + "array-bracket-spacing": 1, // enforce consistent spacing inside array brackets + "brace-style": [1, // enforce consistent brace style for blocks + "1tbs", {"allowSingleLine": true} + ], + "camelcase": 1, // enforce camelcase naming convention + "capitalized-comments": 1, // enforce or disallow capitalization of the first letter of a comment + "comma-dangle": 1, // require or disallow trailing commas + "comma-spacing": 1, // enforce consistent spacing before and after commas + "comma-style": 1, // enforce consistent comma style + "computed-property-spacing": 1, // enforce consistent spacing inside computed property brackets + "eol-last": 1, // require or disallow newline at the end of files + "func-call-spacing": 1, // require or disallow spacing between function identifiers and their invocations + "func-style": 0, // enforce the consistent use of either function declarations or expressions + "indent": [1, // enforce consistent indentation + 2, {"SwitchCase": 1} + ], + "jsx-quotes": [1, // enforce the consistent use of either double or single quotes in JSX attributes + "prefer-single" + ], + "key-spacing": 1, // enforce consistent spacing between keys and values in object literal properties + "keyword-spacing": 1, // enforce consistent spacing before and after keywords + "linebreak-style": 1, // enforce consistent linebreak style + "new-cap": 1, // require constructor names to begin with a capital letter + "new-parens": 1, // require parentheses when invoking a constructor with no arguments + "no-lonely-if": 1, // disallow if statements as the only statement in else blocks + "no-mixed-operators": 0, // disallow mixed binary operators + "no-mixed-spaces-and-tabs": 1, // disallow mixed spaces and tabs for indentation + "no-multiple-empty-lines": [1, { // disallow multiple empty lines + "max": 3, + "maxEOF": 1 + }], + "no-trailing-spaces": 1, // disallow trailing whitespace at the end of lines + "no-unneeded-ternary": 1, // disallow ternary operators when simpler alternatives exist + "no-whitespace-before-property": 1, // disallow whitespace before properties + "object-curly-newline": 1, // enforce consistent line breaks inside braces + "object-curly-spacing": 1, // enforce consistent spacing inside braces + "padded-blocks": [1, // require or disallow padding within blocks + "never" + ], + "quotes": [1, // enforce the consistent use of either backticks, double, or single quotes + "single" + ], + "require-jsdoc": 0, // require JSDoc comments + "semi": 1, // require or disallow semicolons instead of ASI + "space-before-blocks": 1, // enforce consistent spacing before blocks + "space-before-function-paren": [1, // enforce consistent spacing before function definition opening parenthesis + "never" + ], + "space-in-parens": 1, // enforce consistent spacing inside parentheses + "space-infix-ops": 0, // require spacing around infix operators + "space-unary-ops": 1, // enforce consistent spacing before or after unary operators + "spaced-comment": 1, // enforce consistent spacing after the // or /* in a comment + + ////////// ECMAScript 6 ////////// + + "arrow-body-style": 1, // require braces around arrow function bodies + "arrow-parens": 1, // require parentheses around arrow function arguments + "arrow-spacing": 1, // enforce consistent spacing before and after the arrow in arrow functions + "constructor-super": 1, // require super() calls in constructors + "no-const-assign": 1, // disallow reassigning const variables + "no-dupe-class-members": 1, // disallow duplicate class members + "no-duplicate-imports": 1, // disallow duplicate module imports + "no-var": 1, // require let or const instead of var + "rest-spread-spacing": 1, // enforce spacing between rest and spread operators and their expressions + "template-curly-spacing": 1, // require or disallow spacing around embedded expressions of template strings + + ////////// React ////////// + + "react/jsx-uses-react": 1, // prevent React to be incorrectly marked as unused + "react/jsx-uses-vars": 1, // prevent variables used in JSX to be incorrectly marked as unused + "react/no-access-state-in-setstate": 1, // prevent using this.state within a this.setState + "react/no-direct-mutation-state": 1, // prevent direct mutation of this.state + "react/no-typos": 1, // prevents common typos + "react/no-unused-prop-types": 1, // prevent definitions of unused prop types + "react/no-unused-state": 1, // prevent definitions of unused state + "react/prop-types": 1, // prevent missing props validation in a React component definition + "react/jsx-closing-bracket-location": 1, // validate closing bracket location in JSX + "react/jsx-curly-spacing": 1, // enforce or disallow spaces inside of curly braces in JSX attributes and expressions + "react/jsx-equals-spacing": 1, // enforce or disallow spaces around equal signs in JSX attributes + "react/jsx-first-prop-new-line": [1, // configure the position of the first property + "multiline" + ], + "react/jsx-no-duplicate-props": 1, // prevent duplicate properties in JSX + "react/jsx-pascal-case": 1, // enforce PascalCase for user-defined JSX components + "react/jsx-props-no-multi-spaces": 1, // disallow multiple spaces between inline JSX props + "react/jsx-tag-spacing": [1, { // validate whitespace in and around the JSX opening and closing brackets + "beforeSelfClosing": "never", + "beforeClosing": "never" + }], + "react/jsx-wrap-multilines": [1, { // prevent missing parentheses around multiline JSX + "declaration": "parens-new-line", + "assignment": "parens-new-line", + "return": "parens-new-line", + "arrow": "parens-new-line", + "condition": "parens-new-line", + "logical": "parens-new-line", + "prop": "parens-new-line" + }] + } +} diff --git a/TreePLE-Web/.eslintrc.json b/TreePLE-Web/.eslintrc.json deleted file mode 100644 index b4a12db..0000000 --- a/TreePLE-Web/.eslintrc.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true - }, - "extends": "eslint:recommended", - "parserOptions": { - "ecmaFeatures": { - "experimentalObjectRestSpread": true, - "jsx": true - }, - "sourceType": "module" - }, - "plugins": [ - "react" - ], - "rules": { - "indent": [ - "error", - 2 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "single" - ], - "semi": [ - "error", - "always" - ] - } -} diff --git a/TreePLE-Web/.gitignore b/TreePLE-Web/.gitignore index d6d5931..20bc89f 100644 --- a/TreePLE-Web/.gitignore +++ b/TreePLE-Web/.gitignore @@ -1,6 +1,5 @@ # Logs logs -*.log npm-debug.log* yarn-debug.log* yarn-error.log* diff --git a/TreePLE-Web/deployment/build.sh b/TreePLE-Web/deployment/build.sh deleted file mode 100644 index 3baa61d..0000000 --- a/TreePLE-Web/deployment/build.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -exitStatus () { - if [ $1 -ne 0 ]; then - exit $1 - fi -} - -echo "npm --prefix $1/TreePLE-Web install --unsafe-perm" -npm --prefix $1/TreePLE-Web install --unsafe-perm -exitStatus $? - -echo "npm run --prefix $1/TreePLE-Web build" -npm run --prefix $1/TreePLE-Web build -exitStatus $? \ No newline at end of file diff --git a/TreePLE-Web/deployment/deploy.sh b/TreePLE-Web/deployment/deploy.sh deleted file mode 100644 index 23a8a7b..0000000 --- a/TreePLE-Web/deployment/deploy.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -exitStatus () { - if [ $1 -ne 0 ]; then - exit $1 - fi -} - -echo "systemctl stop httpd" -systemctl stop httpd -exitStatus $? - -echo "cp -f $1/TreePLE-Web/dist/bundle.js /var/www/html/" -cp -f $1/TreePLE-Web/dist/bundle.js /var/www/html/ -exitStatus $? - -echo "cp -f $1/TreePLE-Web/dist/bundle.js.map /var/www/html/" -cp -f $1/TreePLE-Web/dist/bundle.js.map /var/www/html/ -exitStatus $? - -echo "cp -f $1/TreePLE-Web/index.html /var/www/html/" -cp -f $1/TreePLE-Web/index.html /var/www/html/ -exitStatus $? - -echo "systemctl start httpd" -systemctl start httpd -exitStatus $? - diff --git a/TreePLE-Web/src/images/favicon.ico b/TreePLE-Web/favicon.ico similarity index 100% rename from TreePLE-Web/src/images/favicon.ico rename to TreePLE-Web/favicon.ico diff --git a/TreePLE-Web/index.html b/TreePLE-Web/index.html index 9a5074a..9a85dc8 100644 --- a/TreePLE-Web/index.html +++ b/TreePLE-Web/index.html @@ -1,12 +1,26 @@ - - + + + + + + TreePLE +
    - - \ No newline at end of file + + + + + + diff --git a/TreePLE-Web/package-lock.json b/TreePLE-Web/package-lock.json index 7c2e4f5..e6c2848 100644 --- a/TreePLE-Web/package-lock.json +++ b/TreePLE-Web/package-lock.json @@ -4,1525 +4,1670 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/google-maps": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/google-maps/-/google-maps-3.2.0.tgz", - "integrity": "sha1-gEo66aySZbTg0VCLW5uJSGeXT4I=", + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, "requires": { - "@types/googlemaps": "3.30.8" + "@babel/highlight": "^7.0.0" } }, - "@types/googlemaps": { - "version": "3.30.8", - "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.30.8.tgz", - "integrity": "sha512-VbV2KHWCqU4ei+qZmmFJOLepCQH5iT7OPpbrnpJxGbNgHsNg+fdNE0smUm+h3STcfcnZPTWTY3yRCNYIleDGYw==" + "@babel/core": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz", + "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.3.4", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.3.4", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } }, - "@types/markerclustererplus": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/@types/markerclustererplus/-/markerclustererplus-2.1.33.tgz", - "integrity": "sha512-ZDxsLUp8BmK9MVZZeQVDDzVrEXgRL0021AQcfXqfreFhdfZ9+PS0P6o4nZBvoIVYTmGSBemdCdI6mL6hf9yWvg==", + "@babel/generator": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz", + "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==", + "dev": true, "requires": { - "@types/google-maps": "3.2.0" + "@babel/types": "^7.3.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" } }, - "@types/react": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.3.8.tgz", - "integrity": "sha512-2jiXVXqx/zxbKT9Dn10EVtD8Uwgna//3xpmDAMHnLKCwumpHvPziTqucAfzMCpFuFn3/xM28A3edzC6ykrm1Ug==", + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, "requires": { - "csstype": "2.1.1" + "@babel/types": "^7.0.0" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", "dev": true, "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" } }, - "acorn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", - "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==" + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "@babel/helper-create-class-features-plugin": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz", + "integrity": "sha512-uFpzw6L2omjibjxa8VGZsJUPL5wJH0zzGKpoz0ccBkzIa6C8kWNUbiBmQ0rgOKWlHJ6qzmfa6lTiGchiV8SC+g==", + "dev": true, "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.0.0" } }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", "dev": true, "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" } }, - "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=" + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "@babel/types": "^7.0.0" } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.2.2", + "@babel/types": "^7.2.2", + "lodash": "^4.17.10" + } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", "dev": true }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "dev": true, "requires": { - "micromatch": "3.1.9", - "normalize-path": "2.1.1" + "lodash": "^4.17.10" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "@babel/helper-replace-supers": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz", + "integrity": "sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.5" + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.3.4", + "@babel/types": "^7.3.4" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "@babel/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "dev": true, + "requires": { + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.3.0" + } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "@babel/parser": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz", + "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/plugin-proposal-class-properties": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz", + "integrity": "sha512-lUf8D3HLs4yYlAo8zjuneLvfxN7qfKv1Yzbj5vjqaqMJxgJA3Ipwp4VUJ+OrOdz53Wbww6ahwB8UhB2HQyLotA==", "dev": true, "requires": { - "array-uniq": "1.0.3" + "@babel/helper-create-class-features-plugin": "^7.3.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "@babel/plugin-proposal-function-bind": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.2.0.tgz", + "integrity": "sha512-qOFJ/eX1Is78sywwTxDcsntLOdb5ZlHVVqUz5xznq8ldAfOVIyZzp1JE2rzHnaksZIhrqMrwIpQL/qcEprnVbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-function-bind": "^7.2.0" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz", + "integrity": "sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", + "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.2.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, "requires": { - "util": "0.10.3" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true + "@babel/plugin-syntax-function-bind": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.2.0.tgz", + "integrity": "sha512-/WzU1lLU2l0wDfB42Wkg6tahrmtBbiD8C4H6EGSX0M4GAjzN6JiOpq/Uh8G6GSoR6lPMvhjM0MNiV6znj6y/zg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, "requires": { - "lodash": "4.17.5" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "@babel/plugin-transform-async-to-generator": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz", + "integrity": "sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } }, - "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "@babel/plugin-transform-block-scoping": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz", + "integrity": "sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.11" } }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "1.4.1", - "is-buffer": "1.1.6" - } - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.14.1", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.5", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" - }, - "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "@babel/plugin-transform-classes": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz", + "integrity": "sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.5", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.3.4", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" } }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "@babel/plugin-transform-destructuring": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", + "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "@babel/plugin-transform-dotall-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", + "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", + "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "@babel/plugin-transform-for-of": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", + "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "@babel/plugin-transform-modules-amd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", + "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", + "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz", + "integrity": "sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", + "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "regexp-tree": "^0.1.0" } }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "@babel/plugin-transform-new-target": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", + "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" } }, - "babel-loader": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.3.tgz", - "integrity": "sha512-PeN29YvOynPMvNk7QCzsHqxpmfXwKAC+uxkiSNFQsmXBBVltzEkVWmv/Ip3tx7yk149dQUwk497bTXNu+DZjLA==", + "@babel/plugin-transform-parameters": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz", + "integrity": "sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-do-expressions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", - "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-function-bind": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", - "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "@babel/plugin-transform-regenerator": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz", + "integrity": "sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "regenerator-transform": "^0.13.4" } }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-do-expressions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", - "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" } }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + } } }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "@babel/preset-env": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.3.4", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" } }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "@babel/register": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", + "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + }, + "dependencies": { + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", + "dev": true + } } }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, + "@babel/runtime": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", + "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "regenerator-runtime": "^0.12.0" } }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" } }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "@babel/traverse": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz", + "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.3.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.3.4", + "@babel/types": "^7.3.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "@babel/types": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz", + "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" } }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, + "@semantic-ui-react/event-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-2.0.0.tgz", + "integrity": "sha512-OLw7l+6sXFp7qJQGIpEktqhkQFOKsM8hto4RSkAkqs1NG/rG2Jb7ct8so7x4qaP3UNJEPUfnrFGuCCz3laLIBQ==", "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "exenv": "^1.2.2", + "prop-types": "^15.6.2" } }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, + "@types/google-maps": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/google-maps/-/google-maps-3.2.0.tgz", + "integrity": "sha1-gEo66aySZbTg0VCLW5uJSGeXT4I=", "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "@types/googlemaps": "*" } }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "@types/googlemaps": { + "version": "3.30.18", + "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.30.18.tgz", + "integrity": "sha512-rXYs277SHf7ceAR7RSoGh/fkYvy2eBl5mvmMlUEcPMMkwCP9XkFdwrtDZ4OGeEawOfnwauu/yoi0eTpfGp4MPg==" }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, + "@types/markerclustererplus": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/@types/markerclustererplus/-/markerclustererplus-2.1.33.tgz", + "integrity": "sha512-ZDxsLUp8BmK9MVZZeQVDDzVrEXgRL0021AQcfXqfreFhdfZ9+PS0P6o4nZBvoIVYTmGSBemdCdI6mL6hf9yWvg==", "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "@types/google-maps": "*" } }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } + "@types/prop-types": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz", + "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==" }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, + "@types/react": { + "version": "16.8.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.8.tgz", + "integrity": "sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==", "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@types/prop-types": "*", + "csstype": "^2.2.0" } }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "@webassemblyjs/wast-printer": "1.8.5" } }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - } - } + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" } }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" - } + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, - "babel-plugin-transform-function-bind": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", - "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" + "@xtuc/ieee754": "^1.2.0" } }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "@xtuc/long": "4.2.2" } }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" - } + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" - } + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, - "babel-preset-stage-0": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", - "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true, - "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" - } + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.5", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } } } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.5" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.3", - "lodash": "4.17.5" + "sprintf-js": "~1.0.2" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.5", - "to-fast-properties": "1.0.3" + "lodash": "^4.17.11" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, + "babel-eslint": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "babel-loader": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", + "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { - "is-descriptor": "1.0.2" + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true }, "batch": { "version": "0.6.1", @@ -1531,24 +1676,25 @@ "dev": true }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", + "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "dev": true }, "block-stream": { "version": "0.0.9", @@ -1556,42 +1702,61 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", "dev": true }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" }, "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -1602,12 +1767,20 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } } }, "boolbase": { @@ -1616,173 +1789,148 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "5.0.3" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - } } }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.1", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.2.tgz", + "integrity": "sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==", "dev": true, "requires": { - "caniuse-db": "1.0.30000813", - "electron-to-chromium": "1.3.36" + "caniuse-lite": "^1.0.30000939", + "electron-to-chromium": "^1.3.113", + "node-releases": "^1.1.8" } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8", - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-indexof": { @@ -1794,17 +1942,14 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true }, "bytes": { "version": "3.0.0", @@ -1818,58 +1963,42 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", "dev": true }, "camel-case": { @@ -1878,14 +2007,15 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", + "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "dev": true }, "camelcase-keys": { "version": "2.1.0", @@ -1893,8 +2023,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -1910,22 +2040,10 @@ "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - } - }, - "caniuse-db": { - "version": "1.0.30000813", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000813.tgz", - "integrity": "sha1-4KHGA/iICteHsqNWUrJzPzKl4po=", + "caniuse-lite": { + "version": "1.0.30000946", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000946.tgz", + "integrity": "sha512-ZVXtMoZ3Mfq69Ikv587Av+5lwGVJsG98QKUucVmtFBf0tl1kOCfLQ5o6Z2zBNis4Mx3iuH77WxEUpdP6t7f2CQ==", "dev": true }, "caseless": { @@ -1934,26 +2052,15 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "change-emitter": { @@ -1962,144 +2069,108 @@ "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.1", - "fsevents": "1.1.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" } }, "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "tslib": "^1.9.0" + } }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "chalk": "1.1.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-webpack-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-1.0.1.tgz", + "integrity": "sha512-gvwfMsqu3HBgTVvaBa1H3AZKO03CHpr5uP92SPIktP3827EovAitwW+1xoqXyTxCuXnLYpMHG5ytS4AoukHDWA==", "dev": true, "requires": { - "source-map": "0.5.7" + "rimraf": "^2.6.1" } }, "cli-cursor": { @@ -2108,7 +2179,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -2118,19 +2189,57 @@ "dev": true }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-deep": { @@ -2139,27 +2248,10 @@ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" } }, "co": { @@ -2168,44 +2260,26 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.3", - "color-convert": "1.9.1", - "color-string": "0.3.0" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -2217,45 +2291,19 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.1" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true }, "commondir": { @@ -2267,49 +2315,68 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "compressible": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", - "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": ">= 1.38.0 < 2" } }, "compression": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.13", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "compression-webpack-plugin": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-1.1.11.tgz", - "integrity": "sha512-ZVWKrTQhtOP7rDx3M/koXTnRm/iwcYbuCdV+i4lZfAIe32Mov7vUVM0+8Vpz4q0xH+TBUZxq+rM8nhtkDH50YQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-1.1.12.tgz", + "integrity": "sha512-UpBXSHbrCSdSZieAffqXlAQpLO2fikVVRYibrWlbHYzKpOw1Y4jwkVZ/+S91GzWuJvXSbc8SBy/e8fQJh8uEMQ==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "neo-async": "2.5.0", - "serialize-javascript": "1.4.0", - "webpack-sources": "1.1.0" + "cacache": "^10.0.1", + "find-cache-dir": "^1.0.0", + "neo-async": "^2.5.0", + "serialize-javascript": "^1.4.0", + "webpack-sources": "^1.0.1" } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -2317,24 +2384,25 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { @@ -2346,7 +2414,8 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "content-disposition": { "version": "0.5.2", @@ -2361,10 +2430,13 @@ "dev": true }, "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "cookie": { "version": "0.3.1", @@ -2384,18 +2456,57 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + } + } }, "core-js": { "version": "1.2.7", @@ -2405,137 +2516,119 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } } } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" - } - }, - "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "boom": "2.10.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, "css-loader": { - "version": "0.28.10", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz", - "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", + "dev": true, + "requires": { + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^2.0.0", + "postcss-value-parser": "^3.3.0", + "schema-utils": "^1.0.0" } }, "css-select": { @@ -2544,89 +2637,28 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "nth-check": "~1.0.1" } }, "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true }, "csstype": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.1.1.tgz", - "integrity": "sha512-YsNVkaQtmsauSmlwqr/3EhJamZIObOcqfOgOmPuQxEXhsSvt/1/4M+bqN9xpsSEJqT2TWfTs2mPWrmwp0iQX6g==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz", + "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==" }, "currently-unhandled": { "version": "0.4.1", @@ -2634,7 +2666,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cyclist": { @@ -2643,53 +2675,146 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz", + "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==" + }, + "d3-format": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", + "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==" + }, + "d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==" + }, + "d3-interpolate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", + "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", + "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==" + }, + "d3-sankey": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz", + "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=", + "requires": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + } + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-scale-chromatic": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz", + "integrity": "sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-shape": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.4.tgz", + "integrity": "sha512-izaz4fOpOnY3CD17hkZWNxbaN70sIGagLR/5jb6RS96Y+6VqX+q1BQf1av6QSBRdfULi3Gb8Js4CzG4+KAPjMg==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz", + "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==" + }, + "d3-time-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", + "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", "requires": { - "es5-ext": "0.10.39" + "d3-time": "1" } }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "assert-plus": "^1.0.0" } }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "deep-equal": { "version": "1.0.1", @@ -2703,43 +2828,78 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "object-keys": "^1.0.12" } }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -2764,9 +2924,10 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -2775,29 +2936,47 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true }, "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } } }, "dns-equal": { @@ -2812,8 +2991,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.1" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -2822,71 +3001,56 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } + "utila": "~0.4" } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true }, "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2895,30 +3059,30 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -2928,29 +3092,37 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.36", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz", - "integrity": "sha1-Dqv3Gp6+qQE/scw1o5DgaGJPJ+g=", + "version": "1.3.115", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.115.tgz", + "integrity": "sha512-mN2qeapQWdi2B9uddxTZ4nl80y46hbyKY5Wt9Yjih+QZFQLdaujEDK4qJky35WhyxMzHF3ZY41Lgjd2BPDuBhg==", "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -2963,7 +3135,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -2972,117 +3144,67 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.39", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", - "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "es6-templates": { @@ -3091,19 +3213,8 @@ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", "dev": true, "requires": { - "recast": "0.11.23", - "through": "2.3.8" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "recast": "~0.11.12", + "through": "~2.3.6" } }, "escape-html": { @@ -3118,168 +3229,95 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.3.2", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz", + "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.2", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ms": "^2.1.1" } }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } } } }, "eslint-plugin-react": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", - "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", - "dev": true, - "requires": { - "doctrine": "2.1.0", - "has": "1.0.1", - "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.1" + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } } }, "eslint-scope": { @@ -3288,10 +3326,16 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -3299,19 +3343,20 @@ "dev": true }, "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "5.5.0", - "acorn-jsx": "3.0.1" + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { @@ -3320,21 +3365,23 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, "esutils": { "version": "2.0.2", @@ -3348,312 +3395,270 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.39" - } - }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.0" + "original": "^1.0.0" } }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" } }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "ms": "2.0.0" } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "is-descriptor": "^0.1.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "isarray": "1.0.0" + "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", - "body-parser": "1.18.2", + "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3664,10 +3669,45 @@ "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", "dev": true, "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.1.0" + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } } }, "extsprintf": { @@ -3677,9 +3717,9 @@ "dev": true }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -3693,9 +3733,9 @@ "dev": true }, "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "faye-websocket": { @@ -3704,104 +3744,110 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" } }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^2.0.1" } }, "file-loader": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" - } - } + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "find-cache-dir": { @@ -3810,122 +3856,93 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.2.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "is-extglob": "^2.1.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true } } }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + "debug": "^3.2.6" } }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3933,14 +3950,14 @@ "dev": true }, "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, "forwarded": { @@ -3953,8 +3970,9 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -3969,26 +3987,20 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.5" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3998,454 +4010,262 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, "optional": true, "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true, + "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true, + "optional": true }, "aproba": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, + "dev": true, "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, + "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", + "version": "1.0.0", "bundled": true, - "requires": { - "hoek": "2.16.3" - } + "dev": true, + "optional": true }, "brace-expansion": { - "version": "1.1.7", + "version": "1.1.11", "bundled": true, + "dev": true, + "optional": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", + "chownr": { + "version": "1.1.1", "bundled": true, + "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } + "dev": true, + "optional": true }, "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", + "version": "0.0.1", "bundled": true, + "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", + "console-control-strings": { + "version": "1.1.0", "bundled": true, + "dev": true, "optional": true }, - "detect-libc": { + "core-util-is": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", + "debug": { + "version": "2.6.9", "bundled": true, + "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "ms": "2.0.0" } }, - "extend": { - "version": "3.0.1", + "deep-extend": { + "version": "0.6.0", "bundled": true, + "dev": true, "optional": true }, - "extsprintf": { - "version": "1.0.2", - "bundled": true + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true }, - "forever-agent": { - "version": "0.6.1", + "detect-libc": { + "version": "1.0.3", "bundled": true, + "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", + "fs-minipass": { + "version": "1.2.5", "bundled": true, + "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "dev": true, + "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, + "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", + "version": "7.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "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" } }, "has-unicode": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", + "iconv-lite": { + "version": "0.4.24", "bundled": true, + "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": ">= 2.1.2 < 3" } }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", + "ignore-walk": { + "version": "3.0.1", "bundled": true, + "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true, + "optional": true }, "ini": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, + "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, + "optional": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, "isarray": { "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", "bundled": true, + "dev": true, "optional": true }, - "jodid25519": { - "version": "1.0.2", + "minimatch": { + "version": "3.0.4", "bundled": true, + "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "brace-expansion": "^1.1.7" } }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", + "minimist": { + "version": "0.0.8", "bundled": true, + "dev": true, "optional": true }, - "json-stable-stringify": { - "version": "1.0.1", + "minipass": { + "version": "2.3.5", "bundled": true, + "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", + "minizlib": { + "version": "1.2.1", "bundled": true, + "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" + "minipass": "^2.2.1" } }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, "mkdirp": { "version": "0.5.1", "bundled": true, + "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4453,336 +4273,301 @@ "ms": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.39", + "version": "0.10.3", "bundled": true, + "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { "version": "4.0.1", "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { - "version": "4.1.0", + "version": "4.1.2", "bundled": true, + "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", "bundled": true, + "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, + "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, + "dev": true, + "optional": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "osenv": { - "version": "0.1.4", + "version": "0.1.5", "bundled": true, + "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", "bundled": true, + "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", + "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "rc": { - "version": "1.2.1", + "version": "1.2.8", "bundled": true, + "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", "bundled": true, + "dev": true, "optional": true } } }, "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", + "version": "2.3.6", "bundled": true, + "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.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.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", + "version": "2.6.3", "bundled": true, + "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.0.1", - "bundled": true + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true }, "semver": { - "version": "5.3.0", + "version": "5.6.0", "bundled": true, + "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, + "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, + "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, + "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, + "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, + "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", "bundled": true, + "dev": true, "optional": true }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, + "tar": { + "version": "4.4.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.15.tgz", + "integrity": "sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA==", + "dev": true, "optional": true, "requires": { - "extsprintf": "1.0.2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } } }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true } } }, @@ -4792,10 +4577,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "function-bind": { @@ -4816,57 +4601,72 @@ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" } } } }, "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "globule": "1.2.0" + "globule": "^1.0.0" } }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "get-node-dimensions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", + "integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==" }, "get-stdin": { "version": "4.0.1", @@ -4875,14 +4675,31 @@ "dev": true }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", @@ -4890,90 +4707,72 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "assert-plus": "^1.0.0" } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "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-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, "globby": { @@ -4982,11 +4781,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -4998,14 +4797,14 @@ } }, "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.5", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "google-maps-infobox": { @@ -5014,51 +4813,40 @@ "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -5067,13 +4855,27 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, "has-unicode": { @@ -5086,101 +4888,96 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "5.0.3", - "sntp": "1.0.9" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz", - "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==", - "dev": true - }, "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", + "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, "hpack.js": { "version": "2.1.6", @@ -5188,18 +4985,12 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.5", - "wbuf": "1.7.2" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, "html-entities": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", @@ -5212,50 +5003,26 @@ "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", "dev": true, "requires": { - "es6-templates": "0.2.3", - "fastparse": "1.1.1", - "html-minifier": "3.5.14", - "loader-utils": "1.1.0", - "object-assign": "4.1.1" + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" } }, "html-minifier": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.14.tgz", - "integrity": "sha512-sZjw6zhQgyUnIlIPU+W80XpRjWjdxHtNcxjfyOskOsCTDKytcfLY04wsQY/83Yqb4ndoiD2FtauiL7Yg6uUQFQ==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.15.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.20" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.3.20", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.20.tgz", - "integrity": "sha512-WpLkWCf9sGvGZnIvBV0PNID9BATQNT/IXKAmqegfKzIPcTmTV3FP8NQpoogQkt/Y402x2sOFdaHUmqFY9IZp+g==", - "dev": true, - "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" - } - } + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "html-webpack-plugin": { @@ -5264,73 +5031,65 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.14", - "loader-utils": "0.2.17", - "lodash": "4.17.5", - "pretty-error": "2.1.1", - "tapable": "1.0.0", - "toposort": "1.0.6", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "loader-utils": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } - }, - "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", - "dev": true } } }, "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -5341,180 +5100,70 @@ "dev": true }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", "dev": true }, "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.5", - "micromatch": "2.3.11" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - } + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "icss-replace-symbols": { "version": "1.1.0", @@ -5523,72 +5172,19 @@ "dev": true }, "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz", + "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==", "dev": true, "requires": { - "postcss": "6.0.19" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", - "dev": true, - "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "postcss": "^7.0.14" } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true }, "iferr": { "version": "0.1.5", @@ -5597,9 +5193,9 @@ "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "image-size": { @@ -5609,14 +5205,104 @@ "dev": true, "optional": true }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -5637,7 +5323,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexes-of": { @@ -5649,7 +5335,8 @@ "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true }, "inflight": { "version": "1.0.6", @@ -5657,115 +5344,97 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.3.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.5", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "ansi-regex": "^4.1.0" } } } }, "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.2.0.tgz", + "integrity": "sha512-ZY8Rk+hlvFeuMmG5uH1MXhhdeMntmIaxaInvAmzMq/SHV8rv4Kh+6GiQNNDQd0wZFrcO+FiTBo8lui/osKOyJw==", "dev": true, "requires": { - "meow": "3.7.0" + "default-gateway": "^4.0.1", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + } } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true }, "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "ip": { "version": "1.1.5", @@ -5773,44 +5442,51 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", "dev": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -5818,32 +5494,29 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -5854,19 +5527,21 @@ "dev": true }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -5876,30 +5551,17 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.0.2", @@ -5907,64 +5569,41 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "is-extglob": "^2.1.1" } }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { - "kind-of": "3.2.2" - } - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "requires": { - "is-number": "4.0.0" + "kind-of": "^3.0.2" }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -5975,12 +5614,12 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5989,82 +5628,47 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "has-symbols": "^1.0.0" } }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -6080,7 +5684,8 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "is-wsl": { "version": "1.1.0", @@ -6089,28 +5694,30 @@ "dev": true }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -6119,69 +5726,61 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" - }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -6202,21 +5801,13 @@ "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } }, "jsprim": { "version": "1.4.1", @@ -6228,14 +5819,6 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "jsx-ast-utils": { @@ -6244,69 +5827,70 @@ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", "dev": true, "requires": { - "array-includes": "3.0.3" + "array-includes": "^3.0.3" } }, + "keyboard-key": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/keyboard-key/-/keyboard-key-1.0.4.tgz", + "integrity": "sha512-my04dE6BCwPpwoe4KYKfPxWiwgDYQOHrVmtzn1CfzmoEsGG/ef4oZGaXCzi1+iFhG7CN5JkOuxmei5OABY8/ag==" + }, "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "dev": true, - "requires": { - "errno": "0.1.7", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, "less-loader": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.6.tgz", - "integrity": "sha512-WPFY3NMJGJna8kIxtgSu6AVG7K6uRPdfE2J7vpQqFWMN/RkOosV09rOVUt3wghNClWH2Pg7YumD1dHiv1Thfug==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "3.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - } + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" } }, "levn": { @@ -6315,56 +5899,73 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "lodash.assign": { "version": "4.2.0", @@ -6372,24 +5973,12 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", @@ -6402,29 +5991,18 @@ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, "loglevel": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", "dev": true }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -6433,8 +6011,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -6444,33 +6022,44 @@ "dev": true }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pify": "^3.0.0" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, - "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "pify": "3.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-obj": { "version": "1.0.1", @@ -6482,8 +6071,9 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "marker-clusterer-plus": { @@ -6492,34 +6082,19 @@ "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=" }, "markerwithlabel": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.1.tgz", - "integrity": "sha512-UnfHImP2rVpUHDa18/08DvOaMB1NjSkeE/wkiI7DgvflzcK3rKwb2DHU4u9tSEHfjf2piR/E7I9zGvUZRHivqg==" - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", + "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -6529,20 +6104,32 @@ "dev": true }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", + "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "dev": true, "requires": { - "mimic-fn": "1.2.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", + "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "dev": true + } } }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.5" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { @@ -6551,103 +6138,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, "merge-descriptors": { @@ -6663,89 +6163,89 @@ "dev": true }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, "mississippi": { "version": "2.0.0", @@ -6753,33 +6253,35 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.5.4", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6790,8 +6292,8 @@ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "dependencies": { "for-in": { @@ -6806,8 +6308,17 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "move-concurrently": { @@ -6816,18 +6327,18 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "multicast-dns": { "version": "6.2.3", @@ -6835,8 +6346,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -6852,34 +6363,28 @@ "dev": true }, "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "dev": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.1", - "to-regex": "3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "natural-compare": { @@ -6895,9 +6400,40 @@ "dev": true }, "neo-async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", - "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nivo": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/nivo/-/nivo-0.31.0.tgz", + "integrity": "sha512-W6rjAcyTEqfrLkqHo2WuCHXHZXy+0R9XlSjpU5+F/zdBt+QFZTSPs/e45dE16PqVY9Gx7w4bxa9OkD0hasWOKg==", + "requires": { + "d3-chord": "^1.0.4", + "d3-color": "^1.0.3", + "d3-format": "^1.2.0", + "d3-hierarchy": "^1.1.5", + "d3-interpolate": "^1.1.5", + "d3-sankey": "^0.7.1", + "d3-scale": "^1.0.6", + "d3-scale-chromatic": "^1.1.1", + "d3-shape": "^1.2.0", + "d3-time": "^1.0.7", + "d3-time-format": "^2.0.5", + "d3-voronoi": "^1.1.2", + "lodash": "^4.17.4", + "prop-types": "^15.5.10", + "react-measure": "^2.0.2", + "react-motion": "^0.5.1", + "recompose": "^0.25.0" + } }, "no-case": { "version": "2.3.2", @@ -6905,7 +6441,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-fetch": { @@ -6913,35 +6449,34 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", - "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", "dev": true }, "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "dependencies": { "semver": { @@ -6953,128 +6488,134 @@ } }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.5", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.11.0", "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.10.tgz", + "integrity": "sha512-KbUPCpfoBvb3oBkej9+nrU0/7xPlVhmhhUJ1PZqwIP5/1dJkRWKWD3OONjo6M2J7tSCBtDCumLwwqeI+DWWaLQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.9.2", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" }, "dependencies": { - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.14.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "ansi-regex": "^2.0.0" } }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } @@ -7085,52 +6626,34 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -7139,36 +6662,31 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -7180,101 +6698,83 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" + "is-descriptor": "^0.1.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "is-buffer": "^1.1.5" } } } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", "dev": true }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { @@ -7287,9 +6787,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -7298,7 +6798,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -7307,16 +6807,16 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "opn": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", - "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "optionator": { @@ -7325,47 +6825,28 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "original": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } + "url-parse": "^1.4.3" } }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true }, "os-homedir": { "version": "1.0.2", @@ -7374,13 +6855,12 @@ "dev": true }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -7395,40 +6875,44 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "dev": true }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -7440,12 +6924,14 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true }, "parallel-transform": { "version": "1.1.0", @@ -7453,681 +6939,245 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.2" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" - } - }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, - "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, - "requires": { - "postcss": "5.2.18" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "postcss": "5.2.18" + "no-case": "^2.2.0" } }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", "dev": true, "requires": { - "postcss": "5.2.18" + "callsites": "^3.0.0" } }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { - "postcss": "5.2.18" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "error-ex": "^1.2.0" } }, - "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" - } + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" - } + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true }, - "postcss-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.1.tgz", - "integrity": "sha512-f0J/DWE/hyO9/LH0WHpXkny/ZZ238sSaG3p1SRBtVZnFWUtD7GXIEgHoBg8cnAeRbmEvUxHQptY46zWfwNYj/w==", + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.19", - "postcss-load-config": "1.2.0", - "schema-utils": "0.4.5" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", - "dev": true, - "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" - } - }, - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "postcss": "5.2.18" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" - } + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "pinkie": "^2.0.0" } }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "node-modules-regexp": "^1.0.0" } }, - "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "postcss": "6.0.19" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", - "dev": true, - "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "find-up": "^2.1.0" } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "ms": "2.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", - "dev": true, - "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" - } - }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8135,61 +7185,57 @@ "dev": true }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.19" + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^0.4.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "chalk": "2.3.2", - "source-map": "0.6.1", - "supports-color": "5.3.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "source-map": { @@ -8197,156 +7243,80 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } - }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^7.0.5" } }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "postcss-modules-local-by-default": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^3.3.1" } }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "postcss-modules-scope": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", + "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" } }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "postcss-modules-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "icss-replace-symbols": "^1.1.0", + "postcss": "^7.0.6" } }, "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, - "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" - } - }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "private": { @@ -8358,17 +7328,19 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise": { @@ -8376,7 +7348,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -8386,45 +7358,55 @@ "dev": true }, "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" } }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -8433,100 +7415,82 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true }, "querystringify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "performance-now": "^2.1.0" }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" } } }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -8536,46 +7500,56 @@ "dev": true }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dev": true, "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "react": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", - "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz", + "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==", "requires": { - "create-react-class": "15.6.3", - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.4" } }, "react-day-picker": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-7.1.6.tgz", - "integrity": "sha1-t+mcLEpmGS9qCyBazKrZ5hyAye8=", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-7.3.0.tgz", + "integrity": "sha512-t2kz0Zy4P5U4qwU5YhsBq2QGmypP8L/u+89TSnuD0h4dYKSEDQArFPWfin9gv8erV1ciR1Wzr485TMaYnI7FTw==", "requires": { - "prop-types": "15.6.1" + "prop-types": "^15.6.2" } }, "react-dom": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", - "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz", + "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.4" } }, "react-google-maps": { @@ -8583,68 +7557,124 @@ "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", "integrity": "sha512-8z5nX9DxIcBCXuEiurmRT1VXVwnzx0C6+3Es6lxB2/OyY2SLax2/LcDu6Aldxnl3HegefTL7NJzGeaKAJ61pOA==", "requires": { - "babel-runtime": "6.26.0", - "can-use-dom": "0.1.0", - "google-maps-infobox": "2.0.0", - "invariant": "2.2.3", - "lodash": "4.17.5", - "marker-clusterer-plus": "2.1.4", - "markerwithlabel": "2.0.1", - "prop-types": "15.6.1", - "recompose": "0.26.0", - "scriptjs": "2.5.8", - "warning": "3.0.0" + "babel-runtime": "^6.11.6", + "can-use-dom": "^0.1.0", + "google-maps-infobox": "^2.0.0", + "invariant": "^2.2.1", + "lodash": "^4.16.2", + "marker-clusterer-plus": "^2.1.4", + "markerwithlabel": "^2.0.1", + "prop-types": "^15.5.8", + "recompose": "^0.26.0", + "scriptjs": "^2.5.8", + "warning": "^3.0.0" + }, + "dependencies": { + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" + } + } } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "react-is": { + "version": "16.8.4", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", + "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==" + }, + "react-measure": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/react-measure/-/react-measure-2.2.4.tgz", + "integrity": "sha512-gpZA4J8sKy1TzTfnOXiiTu01GV8B5OyfF9k7Owt38T6Xxlll19PBE13HKTtauEmDdJO5u4o3XcTiGqCw5wpfjw==", "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "@babel/runtime": "^7.2.0", + "get-node-dimensions": "^1.2.1", + "prop-types": "^15.6.2", + "resize-observer-polyfill": "^1.5.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "react-motion": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", + "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "performance-now": "^0.2.0", + "prop-types": "^15.5.8", + "raf": "^3.1.0" } }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } } } }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.5", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "recast": { @@ -8654,9 +7684,9 @@ "dev": true, "requires": { "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" }, "dependencies": { "esprima": { @@ -8668,14 +7698,14 @@ } }, "recompose": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", - "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.25.1.tgz", + "integrity": "sha512-EwFAv6UBrHbLIsIKHUZJ+BKdjTmyEsIrRlGO3R7PKu0S7hkgNznVDRvb+1upQUntURtBvxhYnTVQ3AcWOlsmWA==", "requires": { - "change-emitter": "0.1.6", - "fbjs": "0.8.16", - "hoist-non-react-statics": "2.5.0", - "symbol-observable": "1.2.0" + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" } }, "redent": { @@ -8684,100 +7714,96 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - } + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "regenerate-unicode-properties": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", "dev": true, "requires": { - "balanced-match": "0.4.2" + "regenerate": "^1.4.0" } }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "private": "^0.1.6" } }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, + "regexp-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", + "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", + "dev": true + }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } } }, "relateurl": { @@ -8789,38 +7815,50 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" }, "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } } } }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -8828,72 +7866,62 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "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.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -8901,25 +7929,58 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "restore-cursor": { "version": "2.0.0", @@ -8927,39 +7988,33 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "0.1.4" - } + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.1.3" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -8968,7 +8023,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -8977,201 +8032,48 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { - "rx-lite": "4.0.8" + "tslib": "^1.9.0" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.5", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" } }, "sass-loader": { @@ -9180,46 +8082,37 @@ "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", "dev": true, "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "neo-async": "2.5.0", - "pify": "3.0.0" + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "scheduler": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz", + "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } }, "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "5.5.2" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - } + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "scriptjs": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.8.tgz", - "integrity": "sha1-0MQ5VcLmutM7bk7fe1O4llqnyl8=" + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", + "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" }, "scss-tokenizer": { "version": "0.2.3", @@ -9227,8 +8120,8 @@ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, "requires": { - "js-base64": "2.4.3", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { "source-map": { @@ -9237,7 +8130,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -9249,72 +8142,76 @@ "dev": true }, "selfsigned": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", - "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", "dev": true, "requires": { - "node-forge": "0.7.1" - } - }, - "semantic-ui-css": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.3.0.tgz", - "integrity": "sha512-f76LAKVyIJGBPJlEP3q2NHrnJVMoiBUw5gLyeWhsXyboK7gKlzAbdK1ytr8/jV++GfmpyC3hFrMCdSNBfFF+ag==", - "requires": { - "jquery": "3.3.1" + "node-forge": "0.7.5" } }, "semantic-ui-react": { - "version": "0.78.3", - "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-0.78.3.tgz", - "integrity": "sha512-JRmuqjyigCehHfzrS2ir5nGoytZWCifU8G2T++G/CMdahUJBME7S6E9rU7WW9Qg2Fqn2aJIxfn6Ry/rlOTJDOw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-0.82.5.tgz", + "integrity": "sha512-Vi7gvo9EbRyNckYd6a/RaY5zk02SFCrRbU9ukdM/OOK8CH7sjIB4f78TkHTUar20Zsw2w6UnFzYWemSvIYfsOQ==", "requires": { - "babel-runtime": "6.26.0", - "classnames": "2.2.5", - "fbjs": "0.8.16", - "lodash": "4.17.5", - "prop-types": "15.6.1" + "@babel/runtime": "^7.0.0", + "@semantic-ui-react/event-stack": "^2.0.0", + "classnames": "^2.2.6", + "keyboard-key": "^1.0.2", + "lodash": "^4.17.10", + "prop-types": "^15.6.2", + "shallowequal": "^1.1.0" } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, "serve-index": { @@ -9323,62 +8220,69 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.18", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "requires": { - "to-object-path": "0.3.0" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9395,12 +8299,13 @@ "dev": true }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "sha512": { @@ -9414,9 +8319,9 @@ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" }, "dependencies": { "kind-of": { @@ -9427,23 +8332,31 @@ } } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "slash": { "version": "1.0.0", @@ -9452,103 +8365,64 @@ "dev": true }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" } }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-extendable": "^0.1.0" } }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -9556,18 +8430,49 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -9576,17 +8481,20 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "5.0.3" + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "sockjs": { @@ -9595,22 +8503,22 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.2.1" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.2.0" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "faye-websocket": { @@ -9619,119 +8527,159 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { - "source-map": "0.5.7" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.1", - "select-hose": "2.0.0", - "spdy-transport": "2.0.20" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.5", - "safe-buffer": "5.1.1", - "wbuf": "1.7.2" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "readable-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", + "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -9741,27 +8689,20 @@ "dev": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "ssri": { @@ -9770,123 +8711,76 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.1" } }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true }, "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.1" } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -9895,72 +8789,48 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^3.0.0" } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-indent": { "version": "1.0.1", @@ -9968,7 +8838,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -9983,29 +8853,52 @@ "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "has-flag": "^3.0.0" } }, "symbol-observable": { @@ -10014,90 +8907,278 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.2", - "lodash": "4.17.5", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz", + "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + }, + "dependencies": { + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + } + } + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "dev": true, + "requires": { + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.16.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "p-try": "^2.0.0" } }, - "has-flag": { + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "has-flag": "3.0.0" + "figgy-pudding": "^3.5.1" } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10111,33 +9192,28 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "thunky": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", - "dev": true - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -10146,61 +9222,85 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", - "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "dev": true }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } } }, "trim-newlines": { @@ -10216,33 +9316,25 @@ "dev": true }, "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, "requires": { - "glob": "6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.1.2" } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true }, "tunnel-agent": { "version": "0.6.0", @@ -10250,15 +9342,14 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -10266,7 +9357,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -10276,7 +9367,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -10286,77 +9377,87 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" + "version": "0.7.19", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", + "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -10367,37 +9468,22 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true, - "requires": { - "macaddress": "0.2.8" - } - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -10410,25 +9496,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -10438,19 +9527,16 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true } } }, "upath": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", - "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true }, "upper-case": { "version": "1.1.3", @@ -10458,15 +9544,25 @@ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", "dev": true }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -10475,161 +9571,60 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true } } }, "url-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz", - "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mime": "2.2.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" }, "dependencies": { "mime": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", - "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true - }, - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" - } } } }, "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "dev": true, "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, - "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "requires": { - "set-getter": "0.1.0" - } - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } + "inherits": "2.0.3" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "util.promisify": { "version": "1.0.0", @@ -10637,8 +9632,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -10654,27 +9649,25 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } + "v8-compile-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -10683,35 +9676,22 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "extsprintf": "^1.2.0" } }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, "requires": { "indexof": "0.0.1" } @@ -10721,321 +9701,484 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, "requires": { - "chokidar": "2.0.2", - "graceful-fs": "4.1.11", - "neo-async": "2.5.0" + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "4.29.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", + "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } } }, - "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "webpack-cli": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", + "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", "dev": true, "requires": { - "minimalistic-assert": "1.0.0" - } - }, - "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", - "requires": { - "acorn": "5.5.0", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.2.0", - "ajv-keywords": "3.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.5.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "findup-sync": "^2.0.0", + "global-modules": "^1.0.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.4" }, "dependencies": { - "ajv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.0.tgz", - "integrity": "sha1-r6wpW7qgFSRJ5SJ0LkVHwa6TKNI=", + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "locate-path": "^3.0.0" } }, - "has-flag": { + "invert-kv": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, "requires": { - "has-flag": "2.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz", + "integrity": "sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" + "memory-fs": "^0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + } } }, "webpack-dev-server": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", - "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", + "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", "dev": true, "requires": { "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.2", - "compression": "1.7.2", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.2", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "1.0.0", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.2.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.2", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^4.1.1", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "semver": "^5.6.0", + "serve-index": "^1.7.2", "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.3.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.5.1", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "xregexp": "4.0.0" } }, - "has-flag": { + "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "locate-path": "^3.0.0" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "invert-kv": "^2.0.0" } }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "p-try": "^2.0.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "p-limit": "^2.0.0" } }, - "strip-bom": { + "p-try": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^4.1.0" } } } }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -11045,8 +10188,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.10", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -11056,78 +10199,92 @@ "dev": true }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true }, "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "^1.0.2 || 2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "ansi-regex": "^2.0.0" } } } @@ -11139,90 +10296,122 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true } } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true } } } diff --git a/TreePLE-Web/package.json b/TreePLE-Web/package.json index d070bc1..2e29a81 100644 --- a/TreePLE-Web/package.json +++ b/TreePLE-Web/package.json @@ -3,72 +3,73 @@ "version": "1.0.0", "description": "Webpage for TreePLE application", "main": "index.jsx", + "engines": { + "npm": "6.4.1", + "node": "10.15.1" + }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "./node_modules/.bin/webpack-dev-server --config ./webpack/webpack.dev.config.js", - "prod": "./node_modules/.bin/webpack-dev-server --config ./webpack/webpack.prod.config.js", - "build": "./node_modules/.bin/webpack --config ./webpack/webpack.prod.config.js", - "lint": "./node_modules/.bin/eslint ./src/**/*.js*; exit 0" + "dev": "./node_modules/.bin/webpack-dev-server --config ./webpack/webpack.config.dev.js", + "prod": "./node_modules/.bin/webpack-dev-server --config ./webpack/webpack.config.prod.js", + "build": "./node_modules/.bin/webpack --config ./webpack/webpack.config.prod.js", + "start": "node server.jsx", + "lint": "./node_modules/.bin/eslint ./src/**/*.js* ./webpack/**/*.js*" }, + "author": "Abbas Yadollahi", "repository": { "type": "git", - "url": "git+https://github.mcgill.ca/ECSE321-2018-Winter/Project-11.git" + "url": "git+https://github.com/theGirrafish/TreePLE.git" }, - "author": "Abbas Yadollahi", - "license": "ISC", "bugs": { - "url": "https://github.mcgill.ca/ECSE321-2018-Winter/Project-11/issues" - }, - "homepage": "https://github.mcgill.ca/ECSE321-2018-Winter/Project-11#readme", - "babel": { - "presets": [ - "es2015", - "react", - "stage-0" - ], - "plugins": [ - "transform-object-rest-spread" - ] + "url": "https://github.com/theGirrafish/TreePLE/issues" }, + "homepage": "https://github.com/theGirrafish/TreePLE#readme", "dependencies": { "@types/googlemaps": "^3.30.8", "@types/markerclustererplus": "^2.1.33", - "@types/react": "^16.3.8", + "@types/react": "^16.8.5", "ajv": "^6.2.1", "axios": "^0.18.0", - "react": "^15.6.2", + "lodash": "^4.17.10", + "nivo": "^0.31.0", + "react": "^16.8.3", "react-day-picker": "^7.1.6", - "react-dom": "^15.6.2", + "react-dom": "^16.8.3", "react-google-maps": "^9.4.5", - "semantic-ui-css": "^2.3.0", - "semantic-ui-react": "^0.78.3", - "sha512": "0.0.1", - "webpack": "^3.5.5" + "semantic-ui-react": "^0.82.0", + "sha512": "0.0.1" }, "devDependencies": { - "babel-cli": "^6.26.0", - "babel-core": "^6.26.0", - "babel-loader": "^7.1.2", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-preset-es2015": "^6.24.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "babel-register": "^6.26.0", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-class-properties": "^7.3.4", + "@babel/plugin-proposal-function-bind": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/polyfill": "^7.2.5", + "@babel/preset-env": "^7.3.4", + "@babel/preset-react": "^7.0.0", + "@babel/register": "^7.0.0", + "babel-eslint": "^10.0.1", + "babel-loader": "^8.0.5", + "clean-webpack-plugin": "^1.0.1", "compression-webpack-plugin": "^1.1.11", - "css-loader": "^0.28.10", - "eslint": "^4.19.1", - "eslint-plugin-react": "^7.7.0", + "css-loader": "^2.1.0", + "copy-webpack-plugin": "^4.6.0", + "eslint": "^5.14.1", + "eslint-plugin-react": "^7.12.4", + "express": "^4.16.4", "extract-text-webpack-plugin": "^3.0.2", - "file-loader": "^1.1.11", + "file-loader": "^3.0.1", "html-loader": "^0.5.5", "html-webpack-plugin": "^3.2.0", - "less": "^2.7.2", + "less": "^3.9.0", "less-loader": "^4.0.6", - "node-sass": "^4.7.2", + "node-sass": "^4.11.0", "postcss-loader": "^2.1.1", "sass-loader": "^6.0.7", "style-loader": "^0.18.2", "url-loader": "^1.0.1", - "webpack-dev-server": "^2.7.1" + "webpack": "^4.29.5", + "webpack-cli": "^3.2.3", + "webpack-dev-server": "^3.2.1", + "webpack-merge": "^4.2.1" } } diff --git a/TreePLE-Web/server.jsx b/TreePLE-Web/server.jsx new file mode 100644 index 0000000..8c49df7 --- /dev/null +++ b/TreePLE-Web/server.jsx @@ -0,0 +1,10 @@ +var express = require('express'); + +var app = express(); + +app.use(express.static('dist')); +app.set('port', process.env.PORT || 5000); + +var server = app.listen(app.get('port'), () => { + console.log('Listening on port ', server.address().port); +}); diff --git a/TreePLE-Web/src/images/blackTree.svg b/TreePLE-Web/src/assets/images/blackTree.svg similarity index 100% rename from TreePLE-Web/src/images/blackTree.svg rename to TreePLE-Web/src/assets/images/blackTree.svg diff --git a/TreePLE-Web/src/images/blueTree.svg b/TreePLE-Web/src/assets/images/blueTree.svg similarity index 100% rename from TreePLE-Web/src/images/blueTree.svg rename to TreePLE-Web/src/assets/images/blueTree.svg diff --git a/TreePLE-Web/src/images/greenTree.svg b/TreePLE-Web/src/assets/images/greenTree.svg similarity index 100% rename from TreePLE-Web/src/images/greenTree.svg rename to TreePLE-Web/src/assets/images/greenTree.svg diff --git a/TreePLE-Web/src/images/orangeTree.svg b/TreePLE-Web/src/assets/images/orangeTree.svg similarity index 100% rename from TreePLE-Web/src/images/orangeTree.svg rename to TreePLE-Web/src/assets/images/orangeTree.svg diff --git a/TreePLE-Web/src/images/redTree.svg b/TreePLE-Web/src/assets/images/redTree.svg similarity index 100% rename from TreePLE-Web/src/images/redTree.svg rename to TreePLE-Web/src/assets/images/redTree.svg diff --git a/TreePLE-Web/src/images/treeple_logo.png b/TreePLE-Web/src/assets/images/treeple_logo.png similarity index 100% rename from TreePLE-Web/src/images/treeple_logo.png rename to TreePLE-Web/src/assets/images/treeple_logo.png diff --git a/TreePLE-Web/src/images/yellowTree.svg b/TreePLE-Web/src/assets/images/yellowTree.svg similarity index 100% rename from TreePLE-Web/src/images/yellowTree.svg rename to TreePLE-Web/src/assets/images/yellowTree.svg diff --git a/TreePLE-Spring/.metadata/.lock b/TreePLE-Web/src/assets/static/.keep similarity index 100% rename from TreePLE-Spring/.metadata/.lock rename to TreePLE-Web/src/assets/static/.keep diff --git a/TreePLE-Web/src/components/CreateForecastModal.jsx b/TreePLE-Web/src/components/CreateForecastModal.jsx index d2b47ee..ddf8f5d 100644 --- a/TreePLE-Web/src/components/CreateForecastModal.jsx +++ b/TreePLE-Web/src/components/CreateForecastModal.jsx @@ -5,9 +5,9 @@ import {Button, Divider, Dropdown, Form, Grid, Header, Icon, List, Message, Moda import {GoogleMap, InfoWindow, Marker, withScriptjs, withGoogleMap} from 'react-google-maps'; import {DrawingManager} from 'react-google-maps/lib/components/drawing/DrawingManager'; import DayPickerInput from 'react-day-picker/DayPickerInput'; -import {getAllTrees, getAllSpecies, getAllMunicipalities, getUserTrees, createForecast} from "./Requests"; +import {getAllTrees, getAllSpecies, getAllMunicipalities, getUserTrees, createForecast} from './Requests'; import {getLatLng, getError, getSelectable, getTreeMarker, getTreeAge, formatDate} from './Utils'; -import {gmapsKey, mtlCenter, huDates, flags, landSelectable, statusSelectable, ownershipSelectable} from '../constants'; +import {gmapsKey, mtlCenter, huDates, flags, landSelectable, statusSelectable} from '../constants'; class CreateForecastModal extends PureComponent { @@ -80,31 +80,34 @@ class CreateForecastModal extends PureComponent { }; createForecast(fcParams) - .then(({data}) => { - this.props.onForecast(); + .then(() => { + this.props.onClose(true); }) .catch(({response: {data}}) => { this.setState({error: data.message}); - }) + }); } onRemoveTree = (treeIdx) => { - let fcTrees = this.state.fcTrees.slice(); - fcTrees.splice(treeIdx, 1); - this.setState({fcTrees: fcTrees}); + this.setState((prevState) => { + const fcTrees = prevState.fcTrees.slice(); + fcTrees.splice(treeIdx, 1); + return {fcTrees: fcTrees}; + }); } onTreeClick = ({treeId}) => { - let fcTrees = this.state.fcTrees.slice(); - if (!fcTrees.includes(treeId)) { - fcTrees.push(treeId); - this.setState({fcTrees: fcTrees}); + if (!this.state.fcTrees.includes(treeId)) { + this.setState((prevState) => { + const fcTrees = prevState.fcTrees.slice(); + fcTrees.push(treeId); + return {fcTrees: fcTrees}; + }); } } onTreeRightClick = (tree) => { - const hover = tree == null ? null : tree.treeId == this.state.hover ? null : tree.treeId; - this.setState({hover: hover}); + this.setState((prevState) => ({hover: tree === null ? null : tree.treeId === prevState.hover ? null : tree.treeId})); } onAreaComplete = (area) => { @@ -115,14 +118,10 @@ class CreateForecastModal extends PureComponent { if (fcTrees.includes(treeId)) { return; - } else { - if ('latLngs' in area) { - if (google.maps.geometry.poly.containsLocation(latLng, area)) { - fcTrees.push(treeId); - } - } else if (area.getBounds().contains(latLng)) { - fcTrees.push(treeId) - } + } else if ('latLngs' in area && google.maps.geometry.poly.containsLocation(latLng, area)) { + fcTrees.push(treeId); + } else if ('getBounds' in area && area.getBounds().contains(latLng)) { + fcTrees.push(treeId); } }); area.setMap(null); @@ -135,8 +134,8 @@ class CreateForecastModal extends PureComponent { onMaxHeightFilter = (e, {value}) => this.onFilterChange({...this.state.filters, height: {...this.state.filters.height, max: value}}); onMinDiameterFilter = (e, {value}) => this.onFilterChange({...this.state.filters, diameter: {...this.state.filters.diameter, min: value}}); onMaxDiameterFilter = (e, {value}) => this.onFilterChange({...this.state.filters, diameter: {...this.state.filters.diameter, max: value}}); - onMinDateFilter = (day, {selected}) => this.onFilterChange({...this.state.filters, date: {...this.state.filters.date, min: day}}); - onMaxDateFilter = (day, {selected}) => this.onFilterChange({...this.state.filters, date: {...this.state.filters.date, max: day}}); + onMinDateFilter = (day) => this.onFilterChange({...this.state.filters, date: {...this.state.filters.date, min: day}}); + onMaxDateFilter = (day) => this.onFilterChange({...this.state.filters, date: {...this.state.filters.date, max: day}}); onSpeciesFilter = (e, {value}) => this.onFilterChange({...this.state.filters, species: value}); onMunicipalityFilter = (e, {value}) => this.onFilterChange({...this.state.filters, municipality: value}); onStatusFilter = (e, {value}) => this.onFilterChange({...this.state.filters, status: value}); @@ -147,7 +146,7 @@ class CreateForecastModal extends PureComponent { let filteredTrees = []; let trees = filters.myTrees ? this.state.myTrees : this.state.allTrees; - trees.forEach(tree => { + trees.forEach((tree) => { if ((!filters.age.min || getTreeAge(tree) > filters.age.min) && (!filters.age.max || getTreeAge(tree) < filters.age.max) && (!filters.height.min || tree.height > filters.height.min) && @@ -156,10 +155,10 @@ class CreateForecastModal extends PureComponent { (!filters.diameter.max || tree.diameter < filters.diameter.max) && (!filters.date.min || new Date(tree.datePlanted) > filters.date.min) && (!filters.date.max || new Date(tree.datePlanted) < filters.date.max) && - (!filters.species || tree.species.name == filters.species) && - (!filters.municipality || tree.municipality.name == filters.municipality) && - (!filters.status || tree.status == filters.status) && - (!filters.land || tree.land == filters.land)) { + (!filters.species || tree.species.name === filters.species) && + (!filters.municipality || tree.municipality.name === filters.municipality) && + (!filters.status || tree.status === filters.status) && + (!filters.land || tree.land === filters.land)) { filteredTrees.push(tree); } }); @@ -171,7 +170,7 @@ class CreateForecastModal extends PureComponent { } onResetFilter = () => { - this.setState(prevState => ({ + this.setState((prevState) => ({ mapTrees: prevState.allTrees, filters: { age: {min: '', max: ''}, @@ -188,10 +187,10 @@ class CreateForecastModal extends PureComponent { })); } - onDateChange = (day, {selected}) => this.setState({fcDate: day}); + onDateChange = (day) => this.setState({fcDate: day}); onFlagChange = (e, {value}) => this.setState({language: value}); - onShowTrees = () => this.setState(prevState => ({showTrees: !prevState.showTrees})); - onShowFilters = () => this.setState(prevState => ({showFilters: !prevState.showFilters})); + onShowTrees = () => this.setState((prevState) => ({showTrees: !prevState.showTrees})); + onShowFilters = () => this.setState((prevState) => ({showFilters: !prevState.showFilters})); render() { const {mapTrees, fcTrees, filters} = this.state; @@ -201,9 +200,9 @@ class CreateForecastModal extends PureComponent { const dayPickerProps = { locale: this.state.language, - weekdaysShort: this.state.language == 'hu' ? huDates.weekShort : undefined, - weekdaysLong: this.state.language == 'hu' ? huDates.weekLong : undefined, - months: this.state.language == 'hu' ? huDates.months : undefined + weekdaysShort: this.state.language === 'hu' ? huDates.weekShort : undefined, + weekdaysLong: this.state.language === 'hu' ? huDates.weekLong : undefined, + months: this.state.language === 'hu' ? huDates.months : undefined }; return ( @@ -235,7 +234,7 @@ class CreateForecastModal extends PureComponent { {this.state.showTrees ? ( - {treeIter.map(i => ( + {treeIter.map((i) => ( - - + @@ -330,7 +328,7 @@ const GMap = compose( googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, loadingElement:
    , containerElement:
    , - mapElement:
    , + mapElement:
    }), withScriptjs, withGoogleMap @@ -354,19 +352,19 @@ const GMap = compose( onPolygonComplete={onAreaComplete} onRectangleComplete={onAreaComplete} /> - {trees.map(tree => ( + {trees.map((tree) => ( onTreeClick(tree)} onRightClick={() => onTreeRightClick(tree)} > - {(hover && hover == tree.treeId) ? ( + {hover && hover === tree.treeId ? ( onTreeRightClick(null)}> @@ -381,8 +379,7 @@ const GMap = compose( }); CreateForecastModal.propTypes = { - onForecast: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired -} +}; export default CreateForecastModal; diff --git a/TreePLE-Web/src/components/CreateMunicipalityModal.jsx b/TreePLE-Web/src/components/CreateMunicipalityModal.jsx index e69de29..d366c0f 100644 --- a/TreePLE-Web/src/components/CreateMunicipalityModal.jsx +++ b/TreePLE-Web/src/components/CreateMunicipalityModal.jsx @@ -0,0 +1,190 @@ +import React, {PureComponent} from 'react'; +import PropTypes from 'prop-types'; +import {compose, withProps} from 'recompose'; +import {Button, Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; +import {GoogleMap, Polygon, withScriptjs, withGoogleMap} from 'react-google-maps'; +import {DrawingManager} from 'react-google-maps/lib/components/drawing/DrawingManager'; +import {getAllMunicipalities, createMunicipality} from './Requests'; +import {getLatLngBorders, getError} from './Utils'; +import {gmapsKey, mtlCenter} from '../constants'; + + +class CreateMunicipalityModal extends PureComponent { + constructor(props) { + super(props); + this.state = { + user: localStorage.getItem('username'), + municipalities: [], + area: null, + mapMunicipality: null, + name: '', + borders: [], + error: '' + }; + } + + componentWillMount() { + getAllMunicipalities() + .then(({data}) => { + let municipalities = data.map((municipality) => ({ + name: municipality.name, + totalTrees: municipality.totalTrees, + borders: getLatLngBorders(municipality.borders) + })); + + this.setState({municipalities: municipalities}); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); + } + + onCreateMunicipality = () => { + const municipalityParams = { + name: this.state.name, + totalTrees: 0, + borders: this.state.borders + }; + + createMunicipality(municipalityParams) + .then(() => { + this.props.onClose(true); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); + } + + onNameChange = (e, {value}) => this.setState({name: value}); + + onMunicipalityClick = (municipality) => this.setState((prevState) => ({mapMunicipality: prevState.mapMunicipality !== municipality ? municipality : null})); + + onAreaComplete = (area) => this.setState({area: area, borders: area.getPath().b.map((location) => [location.lat(), location.lng()])}); + + onResetClick = () => { + if (this.state.area) { + this.state.area.setMap(null); + } + + this.setState({ + area: null, + borders: [] + }); + } + + render() { + const errors = getError(this.state.error); + + return ( + + + +
    + + Create Municipality +
    +
    + + + +
    + + +
    +
    + +
    + + Tree Map + +
    + + + + {this.state.mapMunicipality ? ( +
    + + +
    + + +
    + + + + + + {this.state.mapMunicipality.name} + {this.state.mapMunicipality.totalTrees} + + +
    + ) : null} + +
    +
    +
    + ); + } +} + +const GMap = compose( + withProps({ + googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, + loadingElement:
    , + containerElement:
    , + mapElement:
    + }), + withScriptjs, + withGoogleMap +)(({municipalities, onMunicipalityClick, onAreaComplete, onResetClick}) => { + const OT = google.maps.drawing.OverlayType; + const areaOptions = {fillColor: '#8BDFB9'}; + + return ( + + + {municipalities.map((municipality) => ( + onMunicipalityClick(municipality)} + onRightClick={onResetClick} + /> + ))} + + ); +}); + +CreateMunicipalityModal.propTypes = { + onClose: PropTypes.func.isRequired +}; + +export default CreateMunicipalityModal; diff --git a/TreePLE-Web/src/components/CreateSpeciesModal.jsx b/TreePLE-Web/src/components/CreateSpeciesModal.jsx index e69de29..2700649 100644 --- a/TreePLE-Web/src/components/CreateSpeciesModal.jsx +++ b/TreePLE-Web/src/components/CreateSpeciesModal.jsx @@ -0,0 +1,87 @@ +import React, {PureComponent} from 'react'; +import PropTypes from 'prop-types'; +import {Button, Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; +import {createSpecies} from './Requests'; +import {getError} from './Utils'; + +class CreateSpeciesModal extends PureComponent { + constructor(props) { + super(props); + this.state = { + user: localStorage.getItem('username'), + name: '', + species: '', + genus: '', + error: '' + }; + } + + onCreateSpecies = () => { + const speciesParams = { + name: this.state.name, + species: this.state.species, + genus: this.state.genus + }; + + createSpecies(speciesParams) + .then(() => { + this.props.onClose(); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); + } + + onNameChange = (e, {value}) => this.setState({name: value}); + onSpeciesChange = (e, {value}) => this.setState({species: value}); + onGenusChange = (e, {value}) => this.setState({genus: value}); + + render() { + const errors = getError(this.state.error); + + return ( + + + +
    + + Create Species +
    +
    + +
    + + + + + + + +
    + + {this.state.error ? ( + + {this.state.error} + + ) : null} + +
    +
    +
    + ); + } +} + +CreateSpeciesModal.propTypes = { + onClose: PropTypes.func.isRequired +}; + +export default CreateSpeciesModal; diff --git a/TreePLE-Web/src/components/CreateTreeModal.jsx b/TreePLE-Web/src/components/CreateTreeModal.jsx index 49d7804..a4985a7 100644 --- a/TreePLE-Web/src/components/CreateTreeModal.jsx +++ b/TreePLE-Web/src/components/CreateTreeModal.jsx @@ -4,7 +4,7 @@ import {compose, withProps} from 'recompose'; import {Button, Divider, Dropdown, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; import {GoogleMap, Marker, withScriptjs, withGoogleMap} from 'react-google-maps'; import DayPickerInput from 'react-day-picker/DayPickerInput'; -import {createTree, getAllSpecies, getAllMunicipalities} from "./Requests"; +import {createTree, getAllSpecies, getAllMunicipalities} from './Requests'; import {getSelectable, getError, getTreeMarker, formatDate} from './Utils'; import {gmapsKey, huDates, landSelectable, statusSelectable, ownershipSelectable, flags} from '../constants'; @@ -59,25 +59,25 @@ class CreateTreeModal extends PureComponent { }; createTree(treeParams) - .then(({data}) => { + .then(() => { this.props.onClose({}, true); }) .catch(({response: {data}}) => { - this.setState({error: data.message}) + this.setState({error: data.message}); }); } - onHeightChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, height: value}})); - onDiameterChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, diameter: value}})); - onDateChange = (day, {selected}) => this.setState(prevState => ({tree: {...prevState.tree, datePlanted: day}})); + onHeightChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, height: value}})); + onDiameterChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, diameter: value}})); + onDateChange = (day) => this.setState((prevState) => ({tree: {...prevState.tree, datePlanted: day}})); onFlagChange = (e, {value}) => this.setState({language: value}); - onSpeciesChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, species: value}})); - onStatusChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, status: value}})); - onMunicipalityChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, municipality: value}})); - onOwnershipChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, ownership: value}})); - onLandChange = (e, {value}) => this.setState(prevState => ({tree: {...prevState.tree, land: value}})); + onSpeciesChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, species: value}})); + onStatusChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, status: value}})); + onMunicipalityChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, municipality: value}})); + onOwnershipChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, ownership: value}})); + onLandChange = (e, {value}) => this.setState((prevState) => ({tree: {...prevState.tree, land: value}})); - onTreeDrag = ({latLng}) => this.setState(prevState => ({tree: {...prevState.tree, latitude: latLng.lat(), longitude: latLng.lng()}})); + onTreeDrag = ({latLng}) => this.setState((prevState) => ({tree: {...prevState.tree, latitude: latLng.lat(), longitude: latLng.lng()}})); onTreeDragEnd = ({latLng}) => this.setState({location: latLng}); render() { @@ -86,9 +86,9 @@ class CreateTreeModal extends PureComponent { const dayPickerProps = { locale: this.state.language, - weekdaysShort: this.state.language == 'hu' ? huDates.weekShort : undefined, - weekdaysLong: this.state.language == 'hu' ? huDates.weekLong : undefined, - months: this.state.language == 'hu' ? huDates.months : undefined + weekdaysShort: this.state.language === 'hu' ? huDates.weekShort : undefined, + weekdaysLong: this.state.language === 'hu' ? huDates.weekLong : undefined, + months: this.state.language === 'hu' ? huDates.months : undefined }; return ( @@ -120,8 +120,8 @@ class CreateTreeModal extends PureComponent { - - + + @@ -138,7 +138,7 @@ class CreateTreeModal extends PureComponent { - + @@ -153,31 +153,29 @@ const GMap = compose( googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, loadingElement:
    , containerElement:
    , - mapElement:
    , + mapElement:
    }), withScriptjs, withGoogleMap -)(({location, onDrag, onDragEnd}) => { - return ( - - - - ); -}); +)(({location, onDrag, onDragEnd}) => ( + + + +)); CreateTreeModal.propTypes = { location: PropTypes.object.isRequired, onClose: PropTypes.func.isRequired -} +}; -export default CreateTreeModal; \ No newline at end of file +export default CreateTreeModal; diff --git a/TreePLE-Web/src/components/HelpModal.jsx b/TreePLE-Web/src/components/HelpModal.jsx index dd1bff9..dcc4375 100644 --- a/TreePLE-Web/src/components/HelpModal.jsx +++ b/TreePLE-Web/src/components/HelpModal.jsx @@ -1,6 +1,6 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; -import {Button, Divider, Grid, Header, Icon, Message, Modal, Statistic, Container} from 'semantic-ui-react'; +import {Button, Divider, Grid, Header, Icon, Modal} from 'semantic-ui-react'; import {iconDef, colorDef} from '../constants'; class HelpModal extends PureComponent { @@ -43,7 +43,7 @@ class HelpModal extends PureComponent { - {iconIter.map(i => ( + {iconIter.map((i) => ( @@ -78,7 +78,7 @@ class HelpModal extends PureComponent { - {colorIter.map(i => ( + {colorIter.map((i) => ( {colorDef[2*i].color.toUpperCase()} @@ -112,6 +112,6 @@ class HelpModal extends PureComponent { HelpModal.propTypes = { onClose: PropTypes.func.isRequired -} +}; export default HelpModal; diff --git a/TreePLE-Web/src/components/IconMenu.jsx b/TreePLE-Web/src/components/IconMenu.jsx deleted file mode 100644 index 78c9751..0000000 --- a/TreePLE-Web/src/components/IconMenu.jsx +++ /dev/null @@ -1,116 +0,0 @@ -import React, {PureComponent} from 'react'; -import PropTypes from 'prop-types'; -import {Sidebar, Segment, Button, Menu} from 'semantic-ui-react'; -import SignInModal from './SignInModal'; -import SignUpModal from './SignUpModal'; -import TreeMap from './TreeMap'; -import MyForecastsModal from './MyForecastsModal'; -import CreateForecastModal from './CreateForecastModal'; -import HelpModal from './HelpModal'; - -class IconMenu extends PureComponent { - constructor(props) { - super(props); - this.state = { - user: localStorage.getItem('username'), - showMenu: false, - showSignIn: false, - showSignUp: false, - showMyForecasts: false, - showCreateForecast: false, - showHelp: false - }; - } - - componentWillReceiveProps(nextProps) { - if (this.props.show !== nextProps.show) { - this.setState({showMenu: nextProps.show}); - } - } - - toggleSignIn = () => this.setState(prevState => ({showSignIn: !prevState.showSignIn, user: localStorage.getItem('username')})); - toggleSignUp = () => this.setState(prevState => ({showSignUp: !prevState.showSignUp, user: localStorage.getItem('username')})); - toggleRegister = () => this.setState(prevState => ({showSignIn: !prevState.showSignIn, showSignUp: !prevState.showSignUp})); - - toggleMyForecasts = () => this.setState(prevState => ({showMyForecasts: !prevState.showMyForecasts})); - toggleCreateForecast = () => this.setState(prevState => ({showCreateForecast: !prevState.showCreateForecast})); - toggleForecast = () => this.setState(prevState => ({showMyForecasts: !prevState.showMyForecasts, showCreateForecast: !prevState.showCreateForecast})); - - toggleHelp = () => this.setState(prevState => ({showHelp: !prevState.showHelp})); - - onLogOut = () => { - localStorage.clear(); - this.setState({user: localStorage.getItem('username')}); - } - - render() { - return ( -
    - - - {!this.state.user ? ( -
    - - - - - - -
    - ) : ( -
    - - - - - - -
    - )} - - - -
    - - - - - -
    - - {this.state.showSignIn ? ( - - ) : null} - {this.state.showSignUp ? ( - - ) : null} - {this.state.showMyForecasts ? ( - - ) : null} - {this.state.showCreateForecast ? ( - - ) : null} - {this.state.showHelp ? ( - - ) : null} -
    - ) - } -} - -IconMenu.propTypes = { - show: PropTypes.bool.isRequired, - onSustainabilityChange: PropTypes.func.isRequired -} - -export default IconMenu; \ No newline at end of file diff --git a/TreePLE-Web/src/components/MunicipalityModal.jsx b/TreePLE-Web/src/components/MunicipalityModal.jsx index d84d574..5915ad2 100644 --- a/TreePLE-Web/src/components/MunicipalityModal.jsx +++ b/TreePLE-Web/src/components/MunicipalityModal.jsx @@ -3,40 +3,65 @@ import PropTypes from 'prop-types'; import {compose, withProps} from 'recompose'; import {GoogleMap, Polygon, withScriptjs, withGoogleMap} from 'react-google-maps'; import {Button, Divider, Header, Icon, Grid, Modal} from 'semantic-ui-react'; +import {getAllMunicipalities, updateMunicipality} from './Requests'; import {getLatLngBorders, getMapBounds} from './Utils'; -import {gmapsKey} from '../constants'; +import {gmapsKey, mtlCenter} from '../constants'; class MunicipalityModal extends PureComponent { constructor(props) { super(props); this.state = { user: localStorage.getItem('username'), + municipalities: [], + borders: [], update: false, - showBorders: true, + showBorders: false, error: '' - } + }; } - onToggleEdit = () => this.setState(prevState => ({update: !prevState.update})); + componentWillMount() { + getAllMunicipalities() + .then(({data}) => { + let municipalities = data.map((municipality) => ({ + name: municipality.name, + totalTrees: municipality.totalTrees, + borders: getLatLngBorders(municipality.borders) + })).filter((municipality) => municipality.name !== this.props.municipality.name); - onShowBorders = () => { - this.setState({showBorders: !this.state.showBorders}) + this.setState({municipalities: municipalities}); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); } + onToggleEdit = () => this.setState((prevState) => ({update: !prevState.update})); + + onShowBorders = () => this.setState((prevState) => ({showBorders: !prevState.showBorders})); + + onEdit = (polygon) => this.setState({borders: polygon.getPaths().b[0].b}); + onUpdateMunicipality = () => { - this.setState({update: !this.state.update}) - } + const municipalityParams = { + name: this.props.municipality.name, + borders: this.state.borders.map((location) => [location.lat(), location.lng()]) + }; - onGMapLoaded = () => { - let viewport = getMapBounds(this.props.municipality.borders); - this.refs.map.fitBounds(viewport); + updateMunicipality(municipalityParams) + .then(() => { + this.props.onClose(null, true); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); } render() { const {municipality} = this.props; return ( - +
    @@ -62,7 +87,7 @@ class MunicipalityModal extends PureComponent {
    - Borders + Borders
    {this.state.showBorders ? ( @@ -80,21 +105,19 @@ class MunicipalityModal extends PureComponent { - {municipality.borders.map(({id, lat, lng}) => { - return ( - - {id} - {lat} - {lng} - - ); - })} + {municipality.borders.map(({id, lat, lng}) => ( + + {id} + {lat} + {lng} + + ))}
    ) : null}
    )} - + @@ -126,15 +149,41 @@ class MunicipalityModal extends PureComponent { const GMap = compose( withProps({ googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, - loadingElement:
    , - containerElement:
    , - mapElement:
    , + loadingElement:
    , + containerElement:
    , + mapElement:
    }), withScriptjs, withGoogleMap -)(({municipality}) => { - return ( - +)(({municipality, municipalities, update, onEdit}) => { + let gmap; + let polygon; + let init = true; + + const onGMapLoaded = () => { + if (init) { + let viewport = getMapBounds(municipality.borders); + gmap.fitBounds(viewport); + init = false; + } + }; + + return update ? ( + gmap = ref} zoom={13} center={mtlCenter} options={{scrollwheel: true}}> + polygon = ref} + key={'#EDIT#' + municipality.name} + paths={municipality.borders} + options={{fillColor: '#8BDFB9'}} + onMouseUp={() => onEdit(polygon)} + /> + {municipalities.map((muni) => ( + + ))} + + ) : ( + gmap = ref} zoom={13} center={mtlCenter} options={{scrollwheel: true}} onIdle={onGMapLoaded}> ); @@ -143,6 +192,6 @@ const GMap = compose( MunicipalityModal.propTypes = { municipality: PropTypes.object.isRequired, onClose: PropTypes.func.isRequired -} +}; -export default MunicipalityModal; \ No newline at end of file +export default MunicipalityModal; diff --git a/TreePLE-Web/src/components/MyForecastsModal.jsx b/TreePLE-Web/src/components/MyForecastsModal.jsx index 08c89d5..02a6304 100644 --- a/TreePLE-Web/src/components/MyForecastsModal.jsx +++ b/TreePLE-Web/src/components/MyForecastsModal.jsx @@ -1,34 +1,42 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import {Button, Divider, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; -import {getUserForecasts, deleteForecast} from "./Requests"; +import CreateForecastModal from './CreateForecastModal'; +import {getUserForecasts, deleteForecast} from './Requests'; class MyForecastsModal extends PureComponent { constructor(props) { super(props); this.state = { - user: '', + user: localStorage.getItem('username'), forecasts: [], + createFcModal: false, + analysisModal: false, error: '' }; } componentWillMount() { - const user = localStorage.getItem('username'); + this.loadForecasts(); + } + + loadForecasts = () => { + const user = this.state.user; getUserForecasts(user) - .then(({data}) => { - this.setState({ - user: user, - forecasts: data - }); - }) - .catch(({response: {data}}) => { - this.setState({error: data.message}) - }); + .then(({data}) => this.setState({forecasts: data})) + .catch(({response: {data}}) => this.setState({error: data.message})); + } + + onToggleCreate = (success) => { + if (success) { + this.loadForecasts(); + } + + this.setState((prevState) => ({createFcModal: !prevState.createFcModal})); } - onAnalysisForecast = (forecastId) => { + onToggleAnalysis = (fcId) => { } onDeleteForecast = (fcId) => { @@ -38,24 +46,12 @@ class MyForecastsModal extends PureComponent { }; deleteForecast(fcParams) - .then(({data}) => { - let forecasts = this.state.forecasts.slice(); - - forecasts.some(({forecastId}, idx) => { - if (fcId == forecastId) { - forecasts.splice(idx, 1); - this.setState({forecasts: forecasts}); - return true; - } - }) - }) - .catch(({response: {data}}) => { - this.setState({error: data.message}) - }); + .then(() => this.loadForecasts()) + .catch(({response: {data}}) => this.setState({error: data.message})); } render() { - return ( + return !this.state.createFcModal ? ( @@ -91,8 +87,8 @@ class MyForecastsModal extends PureComponent { - {this.state.forecasts.length !== 0 ? ( - + {!this.state.error && this.state.forecasts.length !== 0 ? ( + {this.state.forecasts.map(({forecastId, fcDate, biodiversity, stormwater, co2Reduced, energyConserved}) => ( {forecastId} @@ -102,42 +98,41 @@ class MyForecastsModal extends PureComponent { {co2Reduced.toFixed(2)} {energyConserved.toFixed(2)} - + + ) : ( + ); } } MyForecastsModal.propTypes = { - onForecast: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired -} +}; -export default MyForecastsModal; \ No newline at end of file +export default MyForecastsModal; diff --git a/TreePLE-Web/src/components/MyTreesModal.jsx b/TreePLE-Web/src/components/MyTreesModal.jsx index e69de29..fce1411 100644 --- a/TreePLE-Web/src/components/MyTreesModal.jsx +++ b/TreePLE-Web/src/components/MyTreesModal.jsx @@ -0,0 +1,182 @@ +import React, {PureComponent} from 'react'; +import PropTypes from 'prop-types'; +import {Button, Divider, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; +import TreeModal from './TreeModal'; +import {getTree, getUserTrees, updateTree} from './Requests'; +import {statuses} from '../constants'; + +class MyTreesModal extends PureComponent { + constructor(props) { + super(props); + this.state = { + user: localStorage.getItem('username'), + trees: [], + tree: null, + treeModal: false, + analysisModal: false, + refreshMap: false, + error: '' + }; + } + + componentWillMount() { + this.loadTrees(); + } + + loadTrees = () => { + const user = this.state.user; + + getUserTrees(user) + .then(({data}) => this.setState({trees: data})) + .catch(({response: {data}}) => this.setState({error: data.message})); + } + + onToggleView = (treeId, success) => { + if (success) { + this.loadTrees(); + this.setState({refreshMap: true}); + } + + if (treeId) { + getTree(treeId) + .then(({data}) => { + this.setState((prevState) => ({ + tree: data, + treeModal: !prevState.treeModal + })); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); + } else { + this.setState((prevState) => ({ + tree: null, + treeModal: !prevState.treeModal + })); + } + } + + onToggleAnalysis = (trees) => { + } + + onCutdownTree = (treeId) => { + getTree(treeId) + .then(({data}) => { + const cutTree = { + treeId: data.treeId, + height: data.height, + diameter: data.diameter, + land: data.land, + status: statuses.cutdown.enum, + ownership: data.ownership, + species: data.species.name, + municipality: data.municipality.name + }; + + const treeParams = { + user: this.state.user, + tree: cutTree + }; + + return treeParams; + }) + .then((treeParams) => { + updateTree(treeParams) + .then(({data}) => this.setState((prevState) => ({trees: prevState.trees.map((tree) => tree.treeId === treeId ? data : tree)}))) + .catch(({response: {data}}) => this.setState({error: data.message})); + }) + .catch(({response: {data}}) => { + this.setState({error: data.message}); + }); + } + + render() { + return !this.state.treeModal ? ( + + + +
    + + My Trees +
    +
    + + + + Tree ID + + + Height
    (cm)
    +
    + + Diameter
    (cm)
    +
    + + Species + + + Status + + + Municipality + + + Date Planted + + + Actions + +
    + + + + {!this.state.error && this.state.trees.length !== 0 ? ( + + {this.state.trees.map(({treeId, height, diameter, species, status, municipality, datePlanted}) => ( + + {treeId} + {height} + {diameter} + {species.name} + {status} + {municipality.name} + {datePlanted} + + + + + +
    +
    +
    + ) : ( + + ); + } +} + +MyTreesModal.propTypes = { + onClose: PropTypes.func.isRequired +}; + +export default MyTreesModal; diff --git a/TreePLE-Web/src/components/NavigationBar.jsx b/TreePLE-Web/src/components/NavigationBar.jsx index f0f759d..d872f94 100644 --- a/TreePLE-Web/src/components/NavigationBar.jsx +++ b/TreePLE-Web/src/components/NavigationBar.jsx @@ -1,8 +1,8 @@ import React, {PureComponent} from 'react'; import {Icon, Image, Statistic, Table} from 'semantic-ui-react'; -import IconMenu from './IconMenu'; +import SideBar from './SideBar'; import {getTreePLESustainability} from './Requests'; -import Logo from "../images/treeple_logo.png"; +import Logo from '../assets/images/treeple_logo.png'; class NavigationBar extends PureComponent { constructor(props) { @@ -32,21 +32,21 @@ class NavigationBar extends PureComponent { }); }) .catch(({response: {data}}) => { - this.setState({error: data.message}) + this.setState({error: data.message}); }); } - toggleSidebar = () => this.setState({showSidebar: !this.state.showSidebar}); + toggleSidebar = () => this.setState((prevState) => ({showSidebar: !prevState.showSidebar})); onSustainabilityChange = (sustainability) => this.setState({sustainability: sustainability}); render() { const {sustainability} = this.state; - const stormwater = !!sustainability.stormwater ? sustainability.stormwater : {factor: '--', worth: '--'}; - const co2Reduced = !!sustainability.co2Reduced ? sustainability.co2Reduced : {factor: '--', worth: '--'}; - const biodiversity = !!sustainability.biodiversity ? sustainability.biodiversity : {factor: '--'}; - const energyConserved = !!sustainability.energyConserved ? sustainability.energyConserved : {factor: '--', worth: '--'}; + const stormwater = sustainability.stormwater ? sustainability.stormwater : {factor: '--', worth: '--'}; + const co2Reduced = sustainability.co2Reduced ? sustainability.co2Reduced : {factor: '--', worth: '--'}; + const biodiversity = sustainability.biodiversity ? sustainability.biodiversity : {factor: '--'}; + const energyConserved = sustainability.energyConserved ? sustainability.energyConserved : {factor: '--', worth: '--'}; return (
    @@ -100,10 +100,10 @@ class NavigationBar extends PureComponent { - +
    ); } } -export default NavigationBar; \ No newline at end of file +export default NavigationBar; diff --git a/TreePLE-Web/src/components/Requests.jsx b/TreePLE-Web/src/components/Requests.jsx index 1aa753c..594fd70 100644 --- a/TreePLE-Web/src/components/Requests.jsx +++ b/TreePLE-Web/src/components/Requests.jsx @@ -1,13 +1,12 @@ import axios from 'axios'; -const backendUrl = 'http://' + serverHost + ':' + serverPort + '/'; -const frontendUrl = 'http://' + serverHost + ':8087/'; - +const webURL = `https://${webHost}${process.env.NODE_ENV === 'development' ? ':' + webPort : ''}/`; +const apiURL = `https://${apiHost}${process.env.NODE_ENV === 'development' ? ':' + apiPort : ''}/`; const AXIOS = axios.create({ - baseURL: backendUrl, + baseURL: apiURL, headers: { - 'Access-Control-Allow-Origin': frontendUrl, + 'Access-Control-Allow-Origin': webURL, 'Access-Control-Allow-Methods': 'GET, POST, PATCH', 'Access-Control-Allow-Headers': 'Origin, Content-Type, Authorization' }, @@ -20,32 +19,32 @@ const AXIOS = axios.create({ // ============================== function getAllTrees() { - const url = `/trees/`; + const url = '/trees/'; return getRequest(url); } function getAllUsers() { - const url = `/users/`; + const url = '/users/'; return getRequest(url); } function getAllSpecies() { - const url = `/species/`; + const url = '/species/'; return getRequest(url); } function getAllLocations() { - const url = `/locations/`; + const url = '/locations/'; return getRequest(url); } function getAllMunicipalities() { - const url = `/municipalities/`; + const url = '/municipalities/'; return getRequest(url); } function getAllForecasts() { - const url = `/forecasts/`; + const url = '/forecasts/'; return getRequest(url); } @@ -54,7 +53,12 @@ function getAllForecasts() { // ============================== function login(params) { - const url = `/login/`; + const url = '/login/'; + return postRequestWithParams(url, params); +} + +function authenticated(params) { + const url = '/authenticated/'; return postRequestWithParams(url, params); } @@ -79,12 +83,12 @@ function getUserForecasts(username) { } function getSustainability(params) { - const url = `/sustainability/`; + const url = '/sustainability/'; return postRequestWithParams(url, params); } function getTreePLESustainability() { - const url = `/sustainability/treeple/`; + const url = '/sustainability/treeple/'; return getRequest(url); } @@ -104,22 +108,32 @@ function getMunicipalitySustainability(municipality) { // ============================== function createTree(params) { - const url = `/tree/new/`; + const url = '/tree/new/'; return postRequestWithParams(url, params); } function createUser(params) { - const url = `/user/new/`; + const url = '/user/new/'; + return postRequestWithParams(url, params); +} + +function createSpecies(params) { + const url = '/species/new/'; + return postRequestWithParams(url, params); +} + +function createMunicipality(params) { + const url = '/municipality/new/'; return postRequestWithParams(url, params); } function createForecast(params) { - const url = `/forecast/new/`; + const url = '/forecast/new/'; return postRequestWithParams(url, params); } function deleteForecast(params) { - const url = `/forecast/delete/`; + const url = '/forecast/delete/'; return postRequestWithParams(url, params); } @@ -129,7 +143,17 @@ function deleteForecast(params) { // ============================== function updateTree(params) { - const url = `/tree/update/`; + const url = '/tree/update/'; + return patchRequestWithParams(url, params); +} + +function updateUser(params) { + const url = '/user/update/'; + return patchRequestWithParams(url, params); +} + +function updateMunicipality(params) { + const url = '/municipality/update/'; return patchRequestWithParams(url, params); } @@ -142,10 +166,6 @@ function getRequest(url) { return AXIOS.get(url); } -function postRequest(url) { - return AXIOS.post(url); -} - function postRequestWithParams(url, params) { return AXIOS.post(url, params); } @@ -156,11 +176,11 @@ function patchRequestWithParams(url, params) { export { getAllTrees, getTree, createTree, updateTree, - getAllUsers, getUser, getUserTrees, getUserForecasts, createUser, - getAllSpecies, + getAllUsers, getUser, getUserTrees, getUserForecasts, createUser, updateUser, + getAllSpecies, createSpecies, getAllLocations, - getAllMunicipalities, + getAllMunicipalities, createMunicipality, updateMunicipality, getAllForecasts, createForecast, deleteForecast, getSustainability, getTreePLESustainability, getTreeSustainability, getMunicipalitySustainability, - login + login, authenticated }; diff --git a/TreePLE-Web/src/components/SideBar.jsx b/TreePLE-Web/src/components/SideBar.jsx new file mode 100644 index 0000000..b36e9fb --- /dev/null +++ b/TreePLE-Web/src/components/SideBar.jsx @@ -0,0 +1,192 @@ +import React, {PureComponent} from 'react'; +import PropTypes from 'prop-types'; +import {Sidebar, Segment, Button, Menu} from 'semantic-ui-react'; +import TreeMap from './TreeMap'; +import SignInModal from './SignInModal'; +import SignUpModal from './SignUpModal'; +import MyTreesModal from './MyTreesModal'; +import MyForecastsModal from './MyForecastsModal'; +import CreateSpeciesModal from './CreateSpeciesModal'; +import CreateMunicipalityModal from './CreateMunicipalityModal'; +import HelpModal from './HelpModal'; +import {authenticated} from './Requests'; + +class SideBar extends PureComponent { + constructor(props) { + super(props); + this.state = { + user: localStorage.getItem('username'), + scientist: '', + showMenu: false, + showSignIn: false, + showSignUp: false, + showMyTrees: false, + showMyForecasts: false, + showCreateSpecies: false, + showCreateMunicipality: false, + showHelp: false, + refreshMap: false, + error: '' + }; + } + + componentWillMount() { + this.authenticatedUser(localStorage.getItem('username')); + } + + componentWillReceiveProps(nextProps) { + if (this.props.show !== nextProps.show) { + this.setState({showMenu: nextProps.show}); + } + } + + componentDidUpdate(nextProps, nextState) { + if (nextState.refreshMap === true) { + this.setState({refreshMap: false}); + } + } + + authenticatedUser = (username) => { + if (username) { + const user = {username: username}; + authenticated(user) + .then(({data}) => { + this.setState({scientist: data.authenticated}); + }) + .catch(({response: {data}}) => { + this.setState({ + error: data.message, + scientist: false + }); + }); + } else { + this.setState({scientist: false}); + } + } + + toggleSignIn = () => { + const user = localStorage.getItem('username'); + this.authenticatedUser(user); + this.setState((prevState) => ({showSignIn: !prevState.showSignIn, user: user})); + } + toggleSignUp = () => { + const user = localStorage.getItem('username'); + this.authenticatedUser(user); + this.setState((prevState) => ({showSignUp: !prevState.showSignUp, user: user})); + } + toggleRegister = () => this.setState((prevState) => ({showSignIn: !prevState.showSignIn, showSignUp: !prevState.showSignUp})); + + toggleMyTrees = (refreshMap) => this.setState((prevState) => ({showMyTrees: !prevState.showMyTrees, refreshMap: refreshMap})); + + toggleMyForecasts = () => this.setState((prevState) => ({showMyForecasts: !prevState.showMyForecasts})); + + toggleCreateSpecies = () => this.setState((prevState) => ({showCreateSpecies: !prevState.showCreateSpecies})); + + toggleCreateMunicipality = (refreshMap) => this.setState((prevState) => ({showCreateMunicipality: !prevState.showCreateMunicipality, refreshMap: refreshMap})); + + toggleHelp = () => this.setState((prevState) => ({showHelp: !prevState.showHelp})); + + onLogOut = () => { + localStorage.clear(); + this.setState({ + user: localStorage.getItem('username'), + scientist: false + }); + } + + render() { + return ( +
    + + + {!this.state.user ? ( +
    + + + + + + +
    + ) : ( +
    + + + + + + + {this.state.scientist ? ( + + + + ) : null} + {this.state.scientist ? ( + + + + ) : null} + + + +
    + )} + + + +
    + + + + + +
    + + {this.state.showSignIn ? ( + + ) : null} + {this.state.showSignUp ? ( + + ) : null} + {this.state.showMyTrees ? ( + + ) : null} + {this.state.showMyForecasts ? ( + + ) : null} + {this.state.showCreateSpecies ? ( + + ) : null} + {this.state.showCreateMunicipality ? ( + + ) : null} + {this.state.showHelp ? ( + + ) : null} +
    + ); + } +} + +SideBar.propTypes = { + show: PropTypes.bool.isRequired, + onSustainabilityChange: PropTypes.func.isRequired +}; + +export default SideBar; diff --git a/TreePLE-Web/src/components/SignInModal.jsx b/TreePLE-Web/src/components/SignInModal.jsx index d5cff91..ee1e157 100644 --- a/TreePLE-Web/src/components/SignInModal.jsx +++ b/TreePLE-Web/src/components/SignInModal.jsx @@ -1,7 +1,7 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import sha512 from 'sha512'; -import {Button, Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; +import {Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; import {login} from './Requests'; import {getError} from './Utils'; @@ -77,6 +77,6 @@ class SignInModal extends PureComponent { SignInModal.propTypes = { onRegister: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired -} +}; export default SignInModal; diff --git a/TreePLE-Web/src/components/SignUpModal.jsx b/TreePLE-Web/src/components/SignUpModal.jsx index bb18010..1119a11 100644 --- a/TreePLE-Web/src/components/SignUpModal.jsx +++ b/TreePLE-Web/src/components/SignUpModal.jsx @@ -1,7 +1,7 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import sha512 from 'sha512'; -import {Button, Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; +import {Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; import {createUser} from './Requests'; import {getError} from './Utils'; import {roleSelectable} from '../constants'; @@ -28,7 +28,7 @@ class SignUpModal extends PureComponent { onPostalChange = (e, {value}) => this.setState({postalCode: value}); onSignUp = () => { - if (this.state.password1 == this.state.password2) { + if (this.state.password1 === this.state.password2) { const signupParams = { username: this.state.username, password: sha512(this.state.password1).toString('hex'), @@ -54,7 +54,7 @@ class SignUpModal extends PureComponent { const errors = getError(this.state.error); return ( - +
    @@ -68,7 +68,7 @@ class SignUpModal extends PureComponent { - {this.state.role == 'Scientist' ? ( + {this.state.role === 'Scientist' ? ( ) : null} @@ -99,6 +99,6 @@ class SignUpModal extends PureComponent { SignUpModal.propTypes = { onRegister: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired -} +}; export default SignUpModal; diff --git a/TreePLE-Web/src/components/TreeMap.jsx b/TreePLE-Web/src/components/TreeMap.jsx index d88562a..928ddf3 100644 --- a/TreePLE-Web/src/components/TreeMap.jsx +++ b/TreePLE-Web/src/components/TreeMap.jsx @@ -14,7 +14,6 @@ export class TreeMap extends PureComponent { constructor(props) { super(props); this.state = { - zoom: 14, center: {}, trees: [], municipalities: [], @@ -22,7 +21,8 @@ export class TreeMap extends PureComponent { createTreeModal: null, treeHover: null, treeInfo: false, - municipalityModal: null + municipalityModal: null, + error: '' }; } @@ -31,10 +31,16 @@ export class TreeMap extends PureComponent { this.loadMap(); } + componentWillReceiveProps(nextProps) { + if (nextProps.refreshMap === true) { + this.loadMap(); + } + } + getUserLocation = () => { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( - position => { + (position) => { this.setState({ center: { lat: position.coords.latitude, @@ -42,7 +48,7 @@ export class TreeMap extends PureComponent { } }); }, - error => { + () => { this.setState({center: mtlCenter}); alert('Unable to find your location.'); }, { @@ -71,7 +77,7 @@ export class TreeMap extends PureComponent { loadMunicipalities = () => { getAllMunicipalities() .then(({data}) => { - let municipalities = data.map(municipality => ({ + let municipalities = data.map((municipality) => ({ name: municipality.name, totalTrees: municipality.totalTrees, borders: getLatLngBorders(municipality.borders) @@ -86,24 +92,22 @@ export class TreeMap extends PureComponent { onMapClick = (e, success) => { if (success) { - this.loadTrees() + this.loadTrees(); } this.setState({createTreeModal: 'latLng' in e ? e.latLng : null}); } onMunicipalityClick = (municipality) => { getMunicipalitySustainability(municipality.name) - .then(({data}) => { - return { - stormwater: data.stormwater, - co2Reduced: data.co2Reduced, - biodiversity: data.biodiversity, - energyConserved: data.energyConserved - }; - }) - .then(sustainability => { + .then(({data}) => ({ + stormwater: data.stormwater, + co2Reduced: data.co2Reduced, + biodiversity: data.biodiversity, + energyConserved: data.energyConserved + })) + .then((sustainability) => { let viewport = getMapBounds(municipality.borders); - this.refs.map.fitBounds(viewport); + this.refs.gmap.fitBounds(viewport); this.props.onSustainabilityChange(sustainability); }) .catch(({response: {data}}) => { @@ -111,7 +115,12 @@ export class TreeMap extends PureComponent { }); } - onMunicipalityDblClick = (municipality) => this.setState({municipalityModal: municipality}); + onMunicipalityDblClick = (municipality, success) => { + if (success) { + this.loadMap(); + } + this.setState({municipalityModal: municipality}); + } onTreeHover = (tree) => { if (!this.state.treeInfo) { @@ -120,33 +129,31 @@ export class TreeMap extends PureComponent { } onTreeClick = (tree) => { - this.setState(prevState => ({ + this.setState((prevState) => ({ treeHover: tree, - treeInfo: tree == prevState.treeHover ? !prevState.treeInfo : tree !== null ? prevState.treeInfo : false + treeInfo: tree === prevState.treeHover ? !prevState.treeInfo : tree !== null ? prevState.treeInfo : false })); if (tree !== null) { getTreeSustainability(tree.treeId) - .then(({data}) => { - return { - stormwater: data.stormwater, - co2Reduced: data.co2Reduced, - biodiversity: data.biodiversity, - energyConserved: data.energyConserved - }; - }) - .then(sustainability => { + .then(({data}) => ({ + stormwater: data.stormwater, + co2Reduced: data.co2Reduced, + biodiversity: data.biodiversity, + energyConserved: data.energyConserved + })) + .then((sustainability) => { this.props.onSustainabilityChange(sustainability); }) .catch(({response: {data}}) => { this.setState({error: data.message}); - }) + }); } } onTreeDblClick = (tree, success) => { if (success) { - this.loadTrees() + this.loadTrees(); } this.setState({ treeHover: null, @@ -185,49 +192,49 @@ export class TreeMap extends PureComponent { ); - return (Object.keys(this.state.center).length !== 0) ? ( + return Object.keys(this.state.center).length !== 0 ? ( this.onMapClick(e, false)} + onRightClick={(e) => this.onMapClick(e, false)} > - {this.state.municipalities.map(municipality => ( + {this.state.municipalities.map((municipality) => ( this.onMunicipalityClick(municipality)} - onDblClick={() => this.onMunicipalityDblClick(municipality)} - onRightClick={e => this.onMapClick(e, false)} + onDblClick={() => this.onMunicipalityDblClick(municipality, false)} + onRightClick={(e) => this.onMapClick(e, false)} /> ))} - {this.state.trees.map(tree => ( - this.onTreeHover(tree)} - onMouseOut={() => this.onTreeHover(null)} - onClick={() => this.onTreeClick(tree)} - onDblClick={() => this.onTreeDblClick(tree, false)} - > - {((!!this.state.treeHover || this.state.treeInfo) && this.state.treeHover == tree) ? ( - - ) : null} - + {this.state.trees.map((tree) => ( + this.onTreeHover(tree)} + onMouseOut={() => this.onTreeHover(null)} + onClick={() => this.onTreeClick(tree)} + onDblClick={() => this.onTreeDblClick(tree, false)} + > + {(this.state.treeHover || this.state.treeInfo) && this.state.treeHover === tree ? ( + + ) : null} + ))} - {!!this.state.treeModal ? ( + {this.state.treeModal ? ( ) : null} - {!!this.state.createTreeModal ? ( + {this.state.createTreeModal ? ( ) : null} - {!!this.state.municipalityModal ? ( + {this.state.municipalityModal ? ( ) : null} @@ -238,16 +245,17 @@ export class TreeMap extends PureComponent { } TreeMap.propTypes = { + refreshMap: PropTypes.bool.isRequired, onSustainabilityChange: PropTypes.func.isRequired -} +}; export default compose( withProps({ googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, loadingElement:
    , containerElement:
    , - mapElement:
    , + mapElement:
    }), withScriptjs, withGoogleMap -)(props => ) \ No newline at end of file +)((props) => ); diff --git a/TreePLE-Web/src/components/TreeModal.jsx b/TreePLE-Web/src/components/TreeModal.jsx index 4e243da..08fbafa 100644 --- a/TreePLE-Web/src/components/TreeModal.jsx +++ b/TreePLE-Web/src/components/TreeModal.jsx @@ -1,11 +1,11 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import {compose, withProps} from 'recompose'; -import {Button, Divider, Form, Grid, Header, Icon, Message, Modal, Popup} from 'semantic-ui-react'; +import {Button, Divider, Form, Grid, Header, Icon, Message, Modal} from 'semantic-ui-react'; import {GoogleMap, Marker, Polygon, withScriptjs, withGoogleMap} from 'react-google-maps'; -import {getAllSpecies, getAllMunicipalities, updateTree} from "./Requests"; +import {getAllSpecies, getAllMunicipalities, updateTree} from './Requests'; import {getSelectable, getLatLng, getLatLngBorders, getError, getTreeMarker} from './Utils'; -import {gmapsKey, landSelectable, statusSelectable, ownershipSelectable, treeHelp} from '../constants'; +import {gmapsKey, landSelectable, statusSelectable, ownershipSelectable} from '../constants'; class TreeModal extends PureComponent { constructor(props) { @@ -26,27 +26,27 @@ class TreeModal extends PureComponent { showReports: false, speciesSelectable: [], municipalitySelectable: [], - error: '', - } + error: '' + }; } componentWillMount() { - const speciesProm = getAllSpecies().then(({data}) => data).catch(({response: {data}}) => data) - const municipalityProm = getAllMunicipalities().then(({data}) => data).catch(({response: {data}}) => data) + const speciesProm = getAllSpecies().then(({data}) => data).catch(({response: {data}}) => data); + const municipalityProm = getAllMunicipalities().then(({data}) => data).catch(({response: {data}}) => data); Promise.all([speciesProm, municipalityProm]) .then(([species, municipalities]) => { this.setState({ speciesSelectable: getSelectable(species), municipalitySelectable: getSelectable(municipalities) - }) + }); }) .catch(() => { this.setState({error: 'Unable to retrieve Species/Municipality list!'}); }); } - onToggleEdit = () => this.setState(prevState => ({update: !prevState.update})); + onToggleEdit = () => this.setState((prevState) => ({update: !prevState.update})); onUpdateTree = () => { const treeParams = { @@ -55,23 +55,23 @@ class TreeModal extends PureComponent { }; updateTree(treeParams) - .then(({data}) => { + .then(() => { this.props.onClose(null, true); }) .catch(({response: {data}}) => { this.setState({error: data.message}); - }) + }); } - onShowReports = () => this.setState(prevState => ({showReports: !prevState.showReports})); + onShowReports = () => this.setState((prevState) => ({showReports: !prevState.showReports})); - onHeightChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, height: value}})); - onDiameterChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, diameter: value}})); - onSpeciesChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, species: value}})); - onStatusChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, status: value}})); - onMunicipalityChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, municipality: value}})); - onOwnershipChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, ownership: value}})); - onLandChange = (e, {value}) => this.setState(prevState => ({updatedTree: {...prevState.updatedTree, land: value}})); + onHeightChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, height: value}})); + onDiameterChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, diameter: value}})); + onSpeciesChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, species: value}})); + onStatusChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, status: value}})); + onMunicipalityChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, municipality: value}})); + onOwnershipChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, ownership: value}})); + onLandChange = (e, {value}) => this.setState((prevState) => ({updatedTree: {...prevState.updatedTree, land: value}})); render() { @@ -202,12 +202,12 @@ class TreeModal extends PureComponent { label='Height (cm)' fluid placeholder='Height' type='number' min='1' value={updatedTree.height} error={errors.height} onChange={this.onHeightChange} // label={} content={treeHelp.height}/>Height (cm)} - /> + /> } content={treeHelp.diameter}/>Diameter (cm)} - /> + /> } content={treeHelp.latitude}/>Latitude} /> } content={treeHelp.longitude}/>Longitude} /> - + )} @@ -288,7 +288,7 @@ const GMap = compose( googleMapURL: `https://maps.googleapis.com/maps/api/js?key=${gmapsKey}&v=3.exp&libraries=geometry,drawing,places`, loadingElement:
    , containerElement:
    , - mapElement:
    , + mapElement:
    }), withScriptjs, withGoogleMap @@ -302,7 +302,7 @@ const GMap = compose( key={tree.treeId} icon={{ url: getTreeMarker(tree.status), - anchor: new google.maps.Point(23,45), + anchor: new google.maps.Point(23, 45), scaledSize: new google.maps.Size(40, 60) }} position={location} @@ -315,6 +315,6 @@ const GMap = compose( TreeModal.propTypes = { tree: PropTypes.object.isRequired, onClose: PropTypes.func.isRequired -} +}; export default TreeModal; diff --git a/TreePLE-Web/src/components/Utils.jsx b/TreePLE-Web/src/components/Utils.jsx index f7d9307..2bdf0eb 100644 --- a/TreePLE-Web/src/components/Utils.jsx +++ b/TreePLE-Web/src/components/Utils.jsx @@ -1,4 +1,3 @@ -import {getAllSpecies, getAllMunicipalities} from "./Requests"; import {lands, statuses, ownerships, blackTree, blueTree, greenTree, yellowTree, orangeTree, redTree} from '../constants'; function getSelectable(data) { @@ -7,43 +6,7 @@ function getSelectable(data) { text: item.name, value: item.name })); -} - -function getSpeciesSelectable() { - let speciesSelectable = []; - - getAllSpecies() - .then(({data}) => { - speciesSelectable = data.map((species, idx) => ({ - key: idx, - text: species.name, - value: species.name - })); - }) - .catch(({response: {data}}) => { - console.log(data.message); - }); - - return speciesSelectable; -} - -function getMunicipalitySelectable() { - let municipalitySelectable = []; - - getAllMunicipalities() - .then(({data}) => { - municipalitySelectable = data.map((municipality, idx) => ({ - key: idx, - text: municipality.name, - value: municipality.name - })); - }) - .catch(({response: {data}}) => { - console.log(data.message); - }); - - return municipalitySelectable; -} +}; function getLatLng(location) { return { @@ -51,17 +14,17 @@ function getLatLng(location) { lat: location.latitude, lng: location.longitude }; -} +}; function getLatLngBorders(borders) { - return borders.map(location => getLatLng(location)); -} + return borders.map((location) => getLatLng(location)); +}; function getMapBounds(locations) { let lat = []; let lng = []; - locations.map(location => { + locations.forEach((location) => { lat.push(location.lat); lng.push(location.lng); }); @@ -74,7 +37,7 @@ function getMapBounds(locations) { }; return bounds; -} +}; function getTreeIcons(tree) { let icons = {}; @@ -94,7 +57,7 @@ function getTreeIcons(tree) { break; default: icons.land = 'question'; - } + }; switch (tree.ownership) { case ownerships.public.enum: @@ -105,7 +68,7 @@ function getTreeIcons(tree) { break; default: icons.ownership = 'question'; - } + }; switch (tree.status) { case statuses.planted.enum: @@ -122,10 +85,10 @@ function getTreeIcons(tree) { break; default: icons.color = 'black'; - } + }; return icons; -} +}; function getTreeMarker(status) { switch (status) { @@ -142,7 +105,7 @@ function getTreeMarker(status) { default: return blackTree; } -} +}; function getError(error) { error = error.toLowerCase(); @@ -164,23 +127,21 @@ function getError(error) { location: error.includes('location'), borders: error.includes('borders'), key: error.includes('key') - } + }; return errorList; -} +}; function getTreeAge(tree) { return 6 * tree.diameter / 2.54; -} +}; function formatDate(date) { return date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate(); -} +}; export { getSelectable, - getSpeciesSelectable, - getMunicipalitySelectable, getLatLng, getLatLngBorders, getMapBounds, @@ -189,4 +150,4 @@ export { getError, getTreeAge, formatDate -}; \ No newline at end of file +}; diff --git a/TreePLE-Web/src/constants.jsx b/TreePLE-Web/src/constants.jsx index 1898a65..60805dd 100644 --- a/TreePLE-Web/src/constants.jsx +++ b/TreePLE-Web/src/constants.jsx @@ -1,11 +1,11 @@ import React from 'react'; import {Flag} from 'semantic-ui-react'; -import BlackTree from './images/blackTree.svg'; -import BlueTree from './images/blueTree.svg'; -import GreenTree from './images/greenTree.svg'; -import YellowTree from './images/yellowTree.svg'; -import OrangeTree from './images/orangeTree.svg'; -import RedTree from './images/redTree.svg'; +import BlackTree from './assets/images/blackTree.svg'; +import BlueTree from './assets/images/blueTree.svg'; +import GreenTree from './assets/images/greenTree.svg'; +import YellowTree from './assets/images/yellowTree.svg'; +import OrangeTree from './assets/images/orangeTree.svg'; +import RedTree from './assets/images/redTree.svg'; export const blackTree = BlackTree; export const blueTree = BlueTree; @@ -113,4 +113,4 @@ export const treeHelp = { land: 'The type of land the tree is planted on.', latitude: 'The latitude geospatial component of the tree\'s location.', longitude: 'The longitude geospatial component of the tree\'s location.' -}; \ No newline at end of file +}; diff --git a/TreePLE-Web/src/index.jsx b/TreePLE-Web/src/index.jsx index c039319..d29c7d4 100644 --- a/TreePLE-Web/src/index.jsx +++ b/TreePLE-Web/src/index.jsx @@ -6,9 +6,7 @@ import NavigationBar from './components/NavigationBar'; import 'react-day-picker/lib/style.css'; const toRender = ( -
    - -
    + ); -ReactDOM.render(toRender, document.getElementById('app')); \ No newline at end of file +ReactDOM.render(toRender, document.getElementById('app')); diff --git a/TreePLE-Web/ssl/certify.sh b/TreePLE-Web/ssl/certify.sh old mode 100644 new mode 100755 diff --git a/TreePLE-Web/ssl/treeple.conf b/TreePLE-Web/ssl/treeple.conf index 60c9246..eccd1ae 100644 --- a/TreePLE-Web/ssl/treeple.conf +++ b/TreePLE-Web/ssl/treeple.conf @@ -1,10 +1,10 @@ [ req ] -prompt = no -default_bits = 2048 -default_keyfile = treeple.pem -distinguished_name = subject -req_extensions = req_ext -x509_extensions = x509_ext +prompt = no +default_bits = 2048 +default_keyfile = treeple.pem +distinguished_name = subject +req_extensions = req_ext +x509_extensions = x509_ext string_mask = utf8only # The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description). @@ -18,24 +18,24 @@ organizationName = TreePLE # Use a friendly name here because its presented to the user. The server's DNS # names are placed in Subject Alternate Names. Plus, DNS names here is deprecated -# by both IETF and CA/Browser Forums. If you place a DNS name here, then you +# by both IETF and CA/Browser Forums. If you place a DNS name here, then you # must include the DNS name in the SAN too (otherwise, Chrome and others that # strictly follow the CA/Browser Baseline Requirements will fail). -commonName = TreePLE Dev Cert -emailAddress = abbas.yadollahi@mail.mcgill.ca +commonName = TreePLE Dev Cert +emailAddress = abbas_y@hotmail.ca # Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ... [ x509_ext ] -subjectKeyIdentifier = hash +subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer # You only need digitalSignature below. *If* you don't allow # RSA Key transport (i.e., you use ephemeral cipher suites), then # omit keyEncipherment because that's key transport. -basicConstraints = CA:FALSE -keyUsage = digitalSignature, keyEncipherment -subjectAltName = @alternate_names +basicConstraints = CA:FALSE +keyUsage = digitalSignature, keyEncipherment +subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional @@ -48,9 +48,9 @@ nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier = hash -basicConstraints = CA:FALSE -keyUsage = digitalSignature, keyEncipherment -subjectAltName = @alternate_names +basicConstraints = CA:FALSE +keyUsage = digitalSignature, keyEncipherment +subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional @@ -65,8 +65,9 @@ DNS.1 = localhost # Add these if you need them. But usually you don't want them or # need them in production. You may need them for development. # DNS.5 = localhost -# DNS.6 = ecse321-11.ece.mcgill.ca -# DNS.7 = 127.0.0.1 +# DNS.6 = treeple-web.herokuapp.com +# DNS.7 = treeple-api.herokuapp.com +# DNS.8 = 127.0.0.1 # IPv6 localhost -# DNS.8 = ::1 +# DNS.9 = ::1 diff --git a/TreePLE-Web/webpack/webpack.config.common.js b/TreePLE-Web/webpack/webpack.config.common.js new file mode 100644 index 0000000..fb63e14 --- /dev/null +++ b/TreePLE-Web/webpack/webpack.config.common.js @@ -0,0 +1,86 @@ +const path = require('path'); +const webpack = require('webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); + +const rootDir = path.join(__dirname, '../'); +const buildDir = path.join(rootDir, 'dist'); + +module.exports = { + entry: [ + '@babel/polyfill', + path.join(rootDir, 'src/index.jsx') + ], + output: { + path: buildDir, + filename: '[name].bundle.js' + }, + module: { + rules: [ + { + test: /\.(js|jsx)?$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, { + test: /\.less$/, + loaders: ['style-loader', 'css-loader', 'less-loader'] + }, { + test: /\.css$/, + loaders: ['style-loader', 'css-loader'] + }, { + test: /\.s[a|c]ss$/, + use: [ + {loader: 'style-loader'}, + {loader: 'css-loader', options: {sourceMap: true}}, + {loader: 'sass-loader', options: {sourceMap: true}} + ] + }, { + test: /\.(html)$/, + loader: 'html-loader' + }, { + test: /\.(png|jpg|jpeg|gif|svg|ico|eot|ttf|woff|woff2)$/, + include: /images/, + loader: 'url-loader', + options: { + name: '[hash:8].[ext]', + limit: 10240 + } + }, { + test: /\.(pdf)$/, + include: /static/, + loader: 'file-loader', + options: { + name: '[name].[ext]' + } + } + ] + }, + optimization: { + splitChunks: { + cacheGroups: { + vendors: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', + chunks: 'all' + } + } + } + }, + resolve: { + extensions: ['.js', '.jsx', '.css', '.scss'] + }, + plugins: [ + new webpack.ProvidePlugin({ + _: 'lodash', + C: 'constants', + U: 'Utils' + }), + new CopyWebpackPlugin([{ + from: path.join(rootDir, 'src/assets/static'), + to: buildDir + }]), + new CleanWebpackPlugin(buildDir, { + root: rootDir + }) + ] +}; diff --git a/TreePLE-Web/webpack/webpack.config.dev.js b/TreePLE-Web/webpack/webpack.config.dev.js new file mode 100644 index 0000000..09972c9 --- /dev/null +++ b/TreePLE-Web/webpack/webpack.config.dev.js @@ -0,0 +1,30 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const wpMerge = require('webpack-merge'); +const common = require('./webpack.config.common.js'); + +const rootDir = path.join(__dirname, '../'); + +module.exports = wpMerge(common, { + plugins: [ + new webpack.DefinePlugin({ + webHost: JSON.stringify('localhost'), + webPort: JSON.stringify(5000), + apiHost: JSON.stringify('localhost'), + apiPort: JSON.stringify(8000) + }) + ], + mode: 'development', + devtool: 'eval-source-map', + devServer: { + https: { + key: fs.readFileSync(path.join(rootDir + 'ssl/treeple.key')), + cert: fs.readFileSync(path.join(rootDir + 'ssl/treeple.crt')) + }, + port: 5000, + host: 'localhost', + contentBase: rootDir, + historyApiFallback: true + } +}); diff --git a/TreePLE-Web/webpack/webpack.config.prod.js b/TreePLE-Web/webpack/webpack.config.prod.js new file mode 100644 index 0000000..e03a7bb --- /dev/null +++ b/TreePLE-Web/webpack/webpack.config.prod.js @@ -0,0 +1,42 @@ +const path = require('path'); +const webpack = require('webpack'); +const wpMerge = require('webpack-merge'); +const common = require('./webpack.config.common.js'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CompressionPlugin = require('compression-webpack-plugin'); + +const rootDir = path.join(__dirname, '../'); + +module.exports = wpMerge(common, { + mode: 'production', + plugins: [ + new webpack.DefinePlugin({ + webHost: JSON.stringify('treeple-web.herokuapp.com'), + apiHost: JSON.stringify('treeple-api.herokuapp.com') + }), + new webpack.optimize.AggressiveMergingPlugin(), + new webpack.optimize.OccurrenceOrderPlugin(), + new HtmlWebpackPlugin({ + inject: false, + template: './index.html', + favicon: './favicon.ico' + }), + new CompressionPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: /\.js$|\.jsx$|\.css$|\.html$/, + threshold: 10240, + minRatio: 0.8 + }) + ], + performance: { + maxAssetSize: 1024000, + maxEntrypointSize: 1024000 + }, + devServer: { + port: process.env.PORT || 5000, + compress: true, + contentBase: rootDir, + historyApiFallback: true + } +}); diff --git a/TreePLE-Web/webpack/webpack.dev.config.js b/TreePLE-Web/webpack/webpack.dev.config.js deleted file mode 100644 index 33d2d59..0000000 --- a/TreePLE-Web/webpack/webpack.dev.config.js +++ /dev/null @@ -1,74 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const webpack = require('webpack'); - -var parentDir = path.join(__dirname, '../'); - -module.exports = { - entry: [ - path.join(parentDir, 'src/index.jsx') - ], - output: { - path: path.join(parentDir + 'dist'), - filename: 'bundle.js' - }, - module: { - loaders: [ - { - test: /\.(js|jsx)?$/, - exclude: /node_modules/, - loader: 'babel-loader', - query: { - presets: ['es2015', 'react', 'stage-0'] - } - }, { - test: /\.less$/, - loaders: ['style-loader', 'css-loader', 'less-loader'] - }, { - test: /\.css$/, - include: /node_modules/, - loaders: ['style-loader', 'css-loader'] - }, { - test: /\.s[a|c]ss$/, - loaders: ['sass-loader', 'style-loader', 'css-loader'] - }, { - test: /\.(html)$/, - loader: 'html-loader' - }, { - test: /\.(png|jpg|gif|svg|ico|eot|ttf|woff|woff2)$/, - include: /images/, - use: { - loader: 'url-loader', - options: { - limit: 100000, - }, - } - } - ] - }, - plugins: [ - new webpack.DefinePlugin({ - serverHost: JSON.stringify('localhost'), - serverPort: JSON.stringify('8088') - // }), - // new HtmlWebpackPlugin({ - // title: 'TreePLE', - // favicon: '/src/images/favicon.ico' - }) - ], - resolve: { - extensions: ['.js', '.jsx', '.css'] - }, - devtool: 'eval-source-map', - devServer: { - https: { - key: fs.readFileSync(path.join(parentDir + 'ssl/treeple.key')), - cert: fs.readFileSync(path.join(parentDir + 'ssl/treeple.crt')) - }, - port: 8087, - host: 'localhost', - contentBase: parentDir, - historyApiFallback: true, - disableHostCheck: true - } -}; diff --git a/TreePLE-Web/webpack/webpack.prod.config.js b/TreePLE-Web/webpack/webpack.prod.config.js deleted file mode 100644 index ece3805..0000000 --- a/TreePLE-Web/webpack/webpack.prod.config.js +++ /dev/null @@ -1,94 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CompressionPlugin = require('compression-webpack-plugin'); -const ExtractTextPlugin = require('extract-text-webpack-plugin'); - -var parentDir = path.join(__dirname, '../'); - -module.exports = { - entry: [ - path.join(parentDir, 'src/index.jsx') - ], - output: { - path: path.join(parentDir, 'dist'), - filename: 'bundle.js', - }, - module: { - loaders: [ - { - test: /\.(js|jsx)?$/, - exclude: /node_modules/, - loader: 'babel-loader', - query: { - presets: ['es2015', 'react', 'stage-0'] - } - }, { - test: /\.less$/, - loaders: ['style-loader', 'css-loader', 'less-loader'] - }, { - test: /\.css$/, - include: /node_modules/, - loaders: ['style-loader', 'css-loader'] - }, { - test: /\.s[a|c]ss$/, - loaders: ['sass-loader', 'style-loader', 'css-loader'] - }, { - test: /\.(png|jpg|gif|svg|ico|eot|ttf|woff|woff2)$/, - include: /images/, - use: { - loader: 'url-loader', - options: { - limit: 100000, - } - } - } - ] - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify('production'), - serverHost: JSON.stringify('ecse321-11.ece.mcgill.ca'), - serverPort: JSON.stringify('8080') - }), - new ExtractTextPlugin('bundle.css', {allChunks: false}), - new webpack.optimize.AggressiveMergingPlugin(), - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.optimize.UglifyJsPlugin({ - sourceMap: true, - mangle: true, - compress: { - warnings: false, - pure_getters: true, - unsafe: true, - unsafe_comps: true, - screw_ie8: true - }, - output: { - comments: false - }, - exclude: [/\.min\.js$/gi] - }), - new webpack.IgnorePlugin(/^\.\/locale$/, [/moment$/]), - new CompressionPlugin({ - asset: '[path].gz[query]', - algorithm: 'gzip', - test: /\.js$|\.css$|\.html$/, - threshold: 10240, - minRatio: 0 - }) - ], - resolve: { - extensions: ['.js', '.jsx', '.css'] - }, - devtool: 'source-map', - devServer: { - port: 8087, - host: 'ecse321-11.novalocal', - public: 'ecse321-11.ece.mcgill.ca', - contentBase: parentDir, - historyApiFallback: true, - disableHostCheck: true - } -}; \ No newline at end of file