From 260e9a18d039dc8f7e6d08c847d035be11b60487 Mon Sep 17 00:00:00 2001 From: rjwats Date: Sun, 9 Feb 2020 10:21:13 +0000 Subject: [PATCH] Re-engineer UI in TypeScript (#89) * Re-engineer UI in TypeScript * Switch to named imports where possible * Restructure file system layout * Update depencencies * Update README.md * Change explicit colors for better support for dark theme --- README.md | 33 +- interface/.env.development | 2 +- interface/package-lock.json | 7965 ++++++++++------- interface/package.json | 56 +- interface/src/App.js | 69 - interface/src/App.tsx | 47 + .../src/{AppRouting.js => AppRouting.tsx} | 33 +- interface/src/CustomMuiTheme.tsx | 39 + .../{containers/SignInPage.js => SignIn.tsx} | 111 +- interface/src/ap/APModes.ts | 7 + interface/src/ap/APSettingsController.tsx | 30 + interface/src/ap/APSettingsForm.tsx | 71 + interface/src/ap/APStatus.ts | 10 + interface/src/ap/APStatusController.tsx | 29 + interface/src/ap/APStatusForm.tsx | 78 + interface/src/ap/AccessPoint.tsx | 38 + interface/src/ap/types.ts | 12 + .../Endpoints.js => api/Endpoints.ts} | 2 +- interface/src/api/Env.ts | 3 + interface/src/api/index.ts | 2 + .../src/authentication/AuthenticatedRoute.js | 36 - .../src/authentication/AuthenticatedRoute.tsx | 42 + .../{Authentication.js => Authentication.ts} | 22 +- .../authentication/AuthenticationContext.tsx | 59 + ...onWrapper.js => AuthenticationWrapper.tsx} | 68 +- interface/src/authentication/Context.js | 15 - .../authentication/UnauthenticatedRoute.js | 24 - .../authentication/UnauthenticatedRoute.tsx | 28 + interface/src/authentication/index.ts | 6 + .../src/components/BlockFormControlLabel.tsx | 10 + interface/src/components/FormActions.tsx | 7 + interface/src/components/FormButton.tsx | 13 + interface/src/components/HighlightAvatar.tsx | 23 + .../src/components/LoadingNotification.js | 58 - .../{MenuAppBar.js => MenuAppBar.tsx} | 98 +- ...wordValidator.js => PasswordValidator.tsx} | 32 +- interface/src/components/RestComponent.js | 125 - interface/src/components/RestController.tsx | 116 + interface/src/components/RestFormLoader.tsx | 55 + interface/src/components/SectionContent.js | 37 - interface/src/components/SectionContent.tsx | 33 + interface/src/components/index.ts | 11 + interface/src/constants/Env.js | 3 - interface/src/constants/Highlight.js | 4 - interface/src/constants/NTPStatus.js | 28 - interface/src/constants/TimeFormat.js | 3 - interface/src/constants/WiFiAPModes.js | 5 - interface/src/containers/APSettings.js | 38 - interface/src/containers/APStatus.js | 121 - interface/src/containers/ManageUsers.js | 39 - interface/src/containers/NTPSettings.js | 40 - interface/src/containers/NTPStatus.js | 138 - interface/src/containers/OTASettings.js | 39 - interface/src/containers/SecuritySettings.js | 38 - .../src/containers/WiFiNetworkScanner.js | 125 - interface/src/containers/WiFiSettings.js | 69 - interface/src/forms/APSettingsForm.js | 84 - interface/src/forms/NTPSettingsForm.js | 105 - interface/src/forms/OTASettingsForm.js | 93 - interface/src/forms/SecuritySettingsForm.js | 70 - interface/src/forms/UserForm.js | 102 - interface/src/forms/WiFiNetworkSelector.js | 107 - interface/src/forms/WiFiSettingsForm.js | 201 - interface/src/{history.js => history.ts} | 0 interface/src/{index.js => index.tsx} | 0 interface/src/ntp/NTPSettingsController.tsx | 30 + interface/src/ntp/NTPSettingsForm.tsx | 84 + interface/src/ntp/NTPStatus.ts | 29 + interface/src/ntp/NTPStatusController.tsx | 30 + interface/src/ntp/NTPStatusForm.tsx | 89 + interface/src/ntp/NetworkTime.tsx | 39 + interface/src/{constants/TZ.js => ntp/TZ.tsx} | 8 +- interface/src/ntp/TimeFormat.ts | 3 + interface/src/ntp/types.ts | 14 + interface/src/project/DemoController.js | 83 - interface/src/project/DemoController.tsx | 75 + ...DemoInformation.js => DemoInformation.tsx} | 49 +- .../{DemoProject.js => DemoProject.tsx} | 28 +- .../{ProjectMenu.js => ProjectMenu.tsx} | 13 +- .../{ProjectRouting.js => ProjectRouting.tsx} | 5 +- interface/src/react-app-env.d.ts | 1 + interface/src/sections/AccessPoint.js | 37 - interface/src/sections/NetworkTime.js | 38 - interface/src/sections/Security.js | 35 - interface/src/sections/System.js | 37 - interface/src/sections/WiFiConnection.js | 74 - .../src/security/ManageUsersController.tsx | 30 + .../ManageUsersForm.tsx} | 134 +- interface/src/security/Security.tsx | 37 + .../security/SecuritySettingsController.tsx | 30 + .../src/security/SecuritySettingsForm.tsx | 55 + interface/src/security/UserForm.tsx | 87 + interface/src/security/types.ts | 11 + interface/src/serviceWorker.ts | 145 + .../src/system/OTASettingsController.tsx | 30 + interface/src/system/OTASettingsForm.tsx | 69 + interface/src/system/System.tsx | 38 + .../src/system/SystemStatusController.tsx | 30 + .../SystemStatusForm.tsx} | 135 +- interface/src/system/types.ts | 14 + interface/src/validators/index.ts | 4 + .../{isHostname.js => isHostname.ts} | 2 +- interface/src/validators/{isIP.js => isIP.ts} | 2 +- interface/src/validators/optional.js | 1 - interface/src/validators/optional.ts | 1 + interface/src/validators/or.js | 1 - interface/src/validators/or.ts | 3 + interface/src/wifi/WiFiConnection.tsx | 62 + interface/src/wifi/WiFiConnectionContext.tsx | 13 + interface/src/wifi/WiFiNetworkScanner.tsx | 168 + interface/src/wifi/WiFiNetworkSelector.tsx | 54 + .../WiFiSecurityModes.ts} | 10 +- interface/src/wifi/WiFiSettingsController.tsx | 54 + interface/src/wifi/WiFiSettingsForm.tsx | 179 + .../WiFiStatus.ts} | 21 +- interface/src/wifi/WiFiStatusController.tsx | 29 + .../WiFiStatus.js => wifi/WiFiStatusForm.tsx} | 94 +- interface/src/wifi/types.ts | 37 + interface/tsconfig.json | 25 + media/dark.png | Bin 0 -> 64313 bytes media/screenshots.png | Bin 52362 -> 66132 bytes 121 files changed, 7450 insertions(+), 5963 deletions(-) delete mode 100644 interface/src/App.js create mode 100644 interface/src/App.tsx rename interface/src/{AppRouting.js => AppRouting.tsx} (71%) create mode 100644 interface/src/CustomMuiTheme.tsx rename interface/src/{containers/SignInPage.js => SignIn.tsx} (55%) create mode 100644 interface/src/ap/APModes.ts create mode 100644 interface/src/ap/APSettingsController.tsx create mode 100644 interface/src/ap/APSettingsForm.tsx create mode 100644 interface/src/ap/APStatus.ts create mode 100644 interface/src/ap/APStatusController.tsx create mode 100644 interface/src/ap/APStatusForm.tsx create mode 100644 interface/src/ap/AccessPoint.tsx create mode 100644 interface/src/ap/types.ts rename interface/src/{constants/Endpoints.js => api/Endpoints.ts} (95%) create mode 100644 interface/src/api/Env.ts create mode 100644 interface/src/api/index.ts delete mode 100644 interface/src/authentication/AuthenticatedRoute.js create mode 100644 interface/src/authentication/AuthenticatedRoute.tsx rename interface/src/authentication/{Authentication.js => Authentication.ts} (68%) create mode 100644 interface/src/authentication/AuthenticationContext.tsx rename interface/src/authentication/{AuthenticationWrapper.js => AuthenticationWrapper.tsx} (64%) delete mode 100644 interface/src/authentication/Context.js delete mode 100644 interface/src/authentication/UnauthenticatedRoute.js create mode 100644 interface/src/authentication/UnauthenticatedRoute.tsx create mode 100644 interface/src/authentication/index.ts create mode 100644 interface/src/components/BlockFormControlLabel.tsx create mode 100644 interface/src/components/FormActions.tsx create mode 100644 interface/src/components/FormButton.tsx create mode 100644 interface/src/components/HighlightAvatar.tsx delete mode 100644 interface/src/components/LoadingNotification.js rename interface/src/components/{MenuAppBar.js => MenuAppBar.tsx} (72%) rename interface/src/components/{PasswordValidator.js => PasswordValidator.tsx} (55%) delete mode 100644 interface/src/components/RestComponent.js create mode 100644 interface/src/components/RestController.tsx create mode 100644 interface/src/components/RestFormLoader.tsx delete mode 100644 interface/src/components/SectionContent.js create mode 100644 interface/src/components/SectionContent.tsx create mode 100644 interface/src/components/index.ts delete mode 100644 interface/src/constants/Env.js delete mode 100644 interface/src/constants/Highlight.js delete mode 100644 interface/src/constants/NTPStatus.js delete mode 100644 interface/src/constants/TimeFormat.js delete mode 100644 interface/src/constants/WiFiAPModes.js delete mode 100644 interface/src/containers/APSettings.js delete mode 100644 interface/src/containers/APStatus.js delete mode 100644 interface/src/containers/ManageUsers.js delete mode 100644 interface/src/containers/NTPSettings.js delete mode 100644 interface/src/containers/NTPStatus.js delete mode 100644 interface/src/containers/OTASettings.js delete mode 100644 interface/src/containers/SecuritySettings.js delete mode 100644 interface/src/containers/WiFiNetworkScanner.js delete mode 100644 interface/src/containers/WiFiSettings.js delete mode 100644 interface/src/forms/APSettingsForm.js delete mode 100644 interface/src/forms/NTPSettingsForm.js delete mode 100644 interface/src/forms/OTASettingsForm.js delete mode 100644 interface/src/forms/SecuritySettingsForm.js delete mode 100644 interface/src/forms/UserForm.js delete mode 100644 interface/src/forms/WiFiNetworkSelector.js delete mode 100644 interface/src/forms/WiFiSettingsForm.js rename interface/src/{history.js => history.ts} (100%) rename interface/src/{index.js => index.tsx} (100%) create mode 100644 interface/src/ntp/NTPSettingsController.tsx create mode 100644 interface/src/ntp/NTPSettingsForm.tsx create mode 100644 interface/src/ntp/NTPStatus.ts create mode 100644 interface/src/ntp/NTPStatusController.tsx create mode 100644 interface/src/ntp/NTPStatusForm.tsx create mode 100644 interface/src/ntp/NetworkTime.tsx rename interface/src/{constants/TZ.js => ntp/TZ.tsx} (99%) create mode 100644 interface/src/ntp/TimeFormat.ts create mode 100644 interface/src/ntp/types.ts delete mode 100644 interface/src/project/DemoController.js create mode 100644 interface/src/project/DemoController.tsx rename interface/src/project/{DemoInformation.js => DemoInformation.tsx} (64%) rename interface/src/project/{DemoProject.js => DemoProject.tsx} (57%) rename interface/src/project/{ProjectMenu.js => ProjectMenu.tsx} (60%) rename interface/src/project/{ProjectRouting.js => ProjectRouting.tsx} (86%) create mode 100644 interface/src/react-app-env.d.ts delete mode 100644 interface/src/sections/AccessPoint.js delete mode 100644 interface/src/sections/NetworkTime.js delete mode 100644 interface/src/sections/Security.js delete mode 100644 interface/src/sections/System.js delete mode 100644 interface/src/sections/WiFiConnection.js create mode 100644 interface/src/security/ManageUsersController.tsx rename interface/src/{forms/ManageUsersForm.js => security/ManageUsersForm.tsx} (55%) create mode 100644 interface/src/security/Security.tsx create mode 100644 interface/src/security/SecuritySettingsController.tsx create mode 100644 interface/src/security/SecuritySettingsForm.tsx create mode 100644 interface/src/security/UserForm.tsx create mode 100644 interface/src/security/types.ts create mode 100644 interface/src/serviceWorker.ts create mode 100644 interface/src/system/OTASettingsController.tsx create mode 100644 interface/src/system/OTASettingsForm.tsx create mode 100644 interface/src/system/System.tsx create mode 100644 interface/src/system/SystemStatusController.tsx rename interface/src/{containers/SystemStatus.js => system/SystemStatusForm.tsx} (61%) create mode 100644 interface/src/system/types.ts create mode 100644 interface/src/validators/index.ts rename interface/src/validators/{isHostname.js => isHostname.ts} (82%) rename interface/src/validators/{isIP.js => isIP.ts} (81%) delete mode 100644 interface/src/validators/optional.js create mode 100644 interface/src/validators/optional.ts delete mode 100644 interface/src/validators/or.js create mode 100644 interface/src/validators/or.ts create mode 100644 interface/src/wifi/WiFiConnection.tsx create mode 100644 interface/src/wifi/WiFiConnectionContext.tsx create mode 100644 interface/src/wifi/WiFiNetworkScanner.tsx create mode 100644 interface/src/wifi/WiFiNetworkSelector.tsx rename interface/src/{constants/WiFiSecurityModes.js => wifi/WiFiSecurityModes.ts} (65%) create mode 100644 interface/src/wifi/WiFiSettingsController.tsx create mode 100644 interface/src/wifi/WiFiSettingsForm.tsx rename interface/src/{constants/WiFiConnectionStatus.js => wifi/WiFiStatus.ts} (63%) create mode 100644 interface/src/wifi/WiFiStatusController.tsx rename interface/src/{containers/WiFiStatus.js => wifi/WiFiStatusForm.tsx} (54%) create mode 100644 interface/src/wifi/types.ts create mode 100644 interface/tsconfig.json create mode 100644 media/dark.png diff --git a/README.md b/README.md index 4c8e3a5..249aeef 100644 --- a/README.md +++ b/README.md @@ -213,21 +213,36 @@ The framework, and MaterialUI allows for a reasonable degree of customization wi ### Theming the app -The app can be easily themed by editing the [MaterialUI theme](https://material-ui.com/customization/themes/). Edit the theme in ['interface/src/App.js'](interface/src/App.js) as you desire: +The app can be easily themed by editing the [MaterialUI theme](https://material-ui.com/customization/theming/). Edit the theme in ['interface/src/CustomMuiTheme.tsx'](interface/src/CustomMuiTheme.tsx) as you desire. For example, here is a dark theme: ```js const theme = createMuiTheme({ palette: { - primary: red, - secondary: deepOrange, - highlight_idle: blueGrey[900], - highlight_warn: orange[500], - highlight_error: red[500], - highlight_success: green[500], - }, + type:"dark", + primary: { + main: '#222', + }, + secondary: { + main: '#666', + }, + info: { + main: blueGrey[900] + }, + warning: { + main: orange[500] + }, + error: { + main: red[500] + }, + success: { + main: green[500] + } + } }); ``` +![Dark Theme](/media/dark.png?raw=true "Dark Theme") + ### Changing the app icon You can replace the app icon is located at ['interface/public/app/icon.png'](interface/public/app/icon.png) with one of your preference. A 256 x 256 PNG is recommended for best compatibility. @@ -448,7 +463,7 @@ Serial.println(wifiSettings.ssid); Configure the SSID and password: ```cpp -WiFiSettings wifiSettings = esp8266React->getWiFiSettingsService()->fetch(); +WiFiSettings wifiSettings = esp8266React.getWiFiSettingsService()->fetch(); wifiSettings.ssid = "MyNetworkSSID"; wifiSettings.password = "MySuperSecretPassword"; esp8266React.getWiFiSettingsService()->update(wifiSettings); diff --git a/interface/.env.development b/interface/.env.development index aeadbc5..4ead142 100644 --- a/interface/.env.development +++ b/interface/.env.development @@ -1,3 +1,3 @@ # Change the IP address to that of your ESP device to enable local development of the UI. # Remember to also enable CORS in platformio.ini before uploading the code to the device. -REACT_APP_ENDPOINT_ROOT=http://192.168.0.29/rest/ +REACT_APP_ENDPOINT_ROOT=http://192.168.0.21/rest/ diff --git a/interface/package-lock.json b/interface/package-lock.json index 7228359..ca7b135 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -5,34 +5,57 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz", + "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==", + "requires": { + "browserslist": "^4.8.5", + "invariant": "^2.2.4", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@babel/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz", - "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", + "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helpers": "^7.4.3", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "convert-source-map": "^1.1.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.4", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -41,11 +64,11 @@ } }, "@babel/generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz", - "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "requires": { - "@babel/types": "^7.6.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -59,214 +82,242 @@ } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz", + "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==", "requires": { - "@babel/types": "^7.3.0", + "@babel/types": "^7.8.3", "esutils": "^2.0.0" } }, "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", + "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", + "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", + "requires": { + "@babel/compat-data": "^7.8.4", + "browserslist": "^4.8.5", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz", - "integrity": "sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz", + "integrity": "sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5", - "@babel/helper-split-export-declaration": "^7.4.4" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", + "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "requires": { + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.6.0" } }, "@babel/helper-define-map": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", - "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.5.5", + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", "lodash": "^4.17.13" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", "requires": { - "@babel/types": "^7.5.5" + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-transforms": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", - "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", + "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.5.5", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3", "lodash": "^4.17.13" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@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==" + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" }, "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", "requires": { "lodash": "^4.17.13" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", "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" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", + "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", - "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", "requires": { - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.2", - "@babel/types": "^7.6.0" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -274,625 +325,703 @@ } }, "@babel/parser": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz", - "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==" + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==" }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", - "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.5.5", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-proposal-decorators": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz", - "integrity": "sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", + "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.6.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-decorators": "^7.8.3" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", - "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", - "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", - "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", + "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-decorators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", - "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz", + "integrity": "sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-flow": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", - "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz", + "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", + "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-typescript": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", - "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz", + "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", - "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz", - "integrity": "sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-plugin-utils": "^7.8.3", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", - "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", + "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.5.5", - "@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.5.5", - "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-destructuring": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", - "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", + "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", - "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", - "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", - "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.8.3.tgz", + "integrity": "sha512-g/6WTWG/xbdd2exBBzMfygjX/zw4eyNC4X8pRaq7aRHRoDUCzAIu3kGYIXviOv8BjCuWm8vDBwjHcjiRNgXrPA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-flow": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", + "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", - "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", - "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", - "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz", - "integrity": "sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", "requires": { - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-object-super": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", - "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", + "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-call-delegate": "^7.8.3", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.0.tgz", - "integrity": "sha512-np/nPuII8DHOZWB3u8u+NSeKlEz0eBrOlnVksIQog4C9NGVzXO+NLxMcXn4Eu4GMFzOw2W6Tyo6L3+Wv8z9Y5w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.8.3.tgz", + "integrity": "sha512-glrzN2U+egwRfkNFtL34xIBYTxbbUF2qJTP8HD3qETBBqzAWSeNB821X0GjU06+dNpq/UyCIjI72FmGE5NNkQQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", + "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz", + "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==", "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-builder-react-jsx": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz", + "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", - "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz", + "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", + "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-runtime": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz", - "integrity": "sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz", + "integrity": "sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "resolve": "^1.8.1", "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-spread": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", - "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@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==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-typescript": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.0.tgz", - "integrity": "sha512-yzw7EopOOr6saONZ3KA3lpizKnWRTe+rfBqg4AmQbSow7ik7fqmzrfIqt053osLwLE2AaTqGinLM2tl6+M/uog==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz", + "integrity": "sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.6.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-typescript": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-typescript": "^7.8.3" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", - "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/preset-env": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.2.tgz", - "integrity": "sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", + "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", "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-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.6.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.6.2", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^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.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.6.2", - "@babel/plugin-transform-classes": "^7.5.5", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.6.0", - "@babel/plugin-transform-dotall-regex": "^7.6.2", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.6.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.2", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.6.2", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.6.2", - "@babel/types": "^7.6.0", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", + "@babel/compat-data": "^7.8.4", + "@babel/helper-compilation-targets": "^7.8.4", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.3", + "browserslist": "^4.8.5", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "levenary": "^1.1.1", "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@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==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.8.3.tgz", + "integrity": "sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ==", "requires": { - "@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/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-react-display-name": "^7.8.3", + "@babel/plugin-transform-react-jsx": "^7.8.3", + "@babel/plugin-transform-react-jsx-self": "^7.8.3", + "@babel/plugin-transform-react-jsx-source": "^7.8.3" } }, "@babel/preset-typescript": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz", - "integrity": "sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz", + "integrity": "sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.6.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-typescript": "^7.8.3" } }, "@babel/runtime": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.2.tgz", - "integrity": "sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", + "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz", - "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.2", - "@babel/types": "^7.6.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.4", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", @@ -921,32 +1050,19 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, "@csstools/normalize.css": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz", - "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", + "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, "@emotion/hash": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.3.tgz", - "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==" - }, - "@emotion/is-prop-valid": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz", - "integrity": "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==", - "requires": { - "@emotion/memoize": "0.7.1" - } - }, - "@emotion/memoize": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz", - "integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==" + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.4.tgz", + "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==" }, "@hapi/address": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", - "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" }, "@hapi/bourne": { "version": "1.3.2", @@ -954,9 +1070,9 @@ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, "@hapi/hoek": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.5.tgz", - "integrity": "sha512-rmGFzok1zR3xZKd5m3ihWdqafXFxvPHoQ/78+AG5URKbEbJiwBBfRgzbu+07W5f3+07JRshw6QqGbVmCp8ntig==" + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" }, "@hapi/joi": { "version": "15.1.1", @@ -970,11 +1086,11 @@ } }, "@hapi/topo": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.4.tgz", - "integrity": "sha512-aVWQTOI9wBD6zawmOr6f+tdEIxQC8JXfQVLTjgGe8YEStAWGn/GNNVTobKJhbWKveQj2RyYF3oYbO9SC8/eOCA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", "requires": { - "@hapi/hoek": "8.x.x" + "@hapi/hoek": "^8.3.0" } }, "@jest/console": { @@ -1022,30 +1138,10 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "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==" } } }, @@ -1096,20 +1192,6 @@ "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "@jest/source-map": { @@ -1184,82 +1266,80 @@ } }, "@material-ui/core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.7.0.tgz", - "integrity": "sha512-mwLehUo0Q9ZxjuWo7J1uy1/Grh3nRxlOAaWJ3EtKeJP2HwqlSy8bWrcvRQYlapaYIPXa5jN8zWbTwi8Pk30VQg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.1.tgz", + "integrity": "sha512-wehQI0ahHDsZjK+uA8Q5Cs1K1/1HXYe2icwTqARaRCt7d9bTp0bJN/C9TLe/+sRWfRIkx6OIk7ABSJT1jBqxRg==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.6.0", - "@material-ui/system": "^4.5.2", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.5.2", + "@material-ui/styles": "^4.9.0", + "@material-ui/system": "^4.9.1", + "@material-ui/types": "^5.0.0", + "@material-ui/utils": "^4.7.1", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.2", "convert-css-length": "^2.0.1", - "hoist-non-react-statics": "^3.2.1", + "hoist-non-react-statics": "^3.3.2", "normalize-scroll-left": "^0.2.0", "popper.js": "^1.14.1", "prop-types": "^15.7.2", + "react-is": "^16.8.0", "react-transition-group": "^4.3.0" } }, "@material-ui/icons": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.5.1.tgz", - "integrity": "sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.9.1.tgz", + "integrity": "sha512-GBitL3oBWO0hzBhvA9KxqcowRUsA0qzwKkURyC8nppnC3fw54KPKZ+d4V1Eeg/UnDRSzDaI9nGCdel/eh9AQMg==", "requires": { "@babel/runtime": "^7.4.4" } }, "@material-ui/styles": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.6.0.tgz", - "integrity": "sha512-lqqh4UEMdIYcU1Yth4pQyMTah02uAkg3NOT3MirN9FUexdL8pNA6zCHigEgDSfwmvnXyxHhxTkphfy0DRfnt9w==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.0.tgz", + "integrity": "sha512-nJHum4RqYBPWsjL/9JET8Z02FZ9gSizlg/7LWVFpIthNzpK6OQ5OSRR4T4x9/p+wK3t1qNn3b1uI4XpnZaPxOA==", "requires": { "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.7.1", - "@material-ui/types": "^4.1.1", - "@material-ui/utils": "^4.5.2", + "@emotion/hash": "^0.7.4", + "@material-ui/types": "^5.0.0", + "@material-ui/utils": "^4.7.1", "clsx": "^1.0.2", "csstype": "^2.5.2", "hoist-non-react-statics": "^3.2.1", - "jss": "^10.0.0", - "jss-plugin-camel-case": "^10.0.0", - "jss-plugin-default-unit": "^10.0.0", - "jss-plugin-global": "^10.0.0", - "jss-plugin-nested": "^10.0.0", - "jss-plugin-props-sort": "^10.0.0", - "jss-plugin-rule-value-function": "^10.0.0", - "jss-plugin-vendor-prefixer": "^10.0.0", + "jss": "^10.0.3", + "jss-plugin-camel-case": "^10.0.3", + "jss-plugin-default-unit": "^10.0.3", + "jss-plugin-global": "^10.0.3", + "jss-plugin-nested": "^10.0.3", + "jss-plugin-props-sort": "^10.0.3", + "jss-plugin-rule-value-function": "^10.0.3", + "jss-plugin-vendor-prefixer": "^10.0.3", "prop-types": "^15.7.2" } }, "@material-ui/system": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.5.2.tgz", - "integrity": "sha512-h9RWvdM9XKlHHqwiuhyvWdobptQkHli+m2jJFs7i1AI/hmGsIc4reDmS7fInhETgt/Txx7uiAIznfRNIIVHmQw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.1.tgz", + "integrity": "sha512-CLrJK2aKNWNwruGVTRf+rLz96P4jmozpY2UaCE6hBTa1oGsQ396YXOQQABQ4c0igawmdyf5iQb0zs9j5zsAf1w==", "requires": { "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.5.2", + "@material-ui/utils": "^4.7.1", "prop-types": "^15.7.2" } }, "@material-ui/types": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.1.1.tgz", - "integrity": "sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==", - "requires": { - "@types/react": "*" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.0.0.tgz", + "integrity": "sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg==" }, "@material-ui/utils": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.5.2.tgz", - "integrity": "sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.7.1.tgz", + "integrity": "sha512-+ux0SlLdlehvzCk2zdQ3KiS3/ylWvuo/JwAGhvb8dFVvwR21K28z0PU9OQW2PGogrMEdvX3miEI5tGxTwwWiwQ==", "requires": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", - "react-is": "^16.8.6" + "react-is": "^16.8.0" } }, "@mrmlnc/readdir-enhanced": { @@ -1358,34 +1438,6 @@ "@svgr/babel-preset": "^4.3.3", "@svgr/hast-util-to-babel-ast": "^4.3.2", "svg-parser": "^2.0.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.2.tgz", - "integrity": "sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.2", - "@babel/helpers": "^7.6.2", - "@babel/parser": "^7.6.2", - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.2", - "@babel/types": "^7.6.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "@svgr/plugin-svgo": { @@ -1399,18 +1451,18 @@ } }, "@svgr/webpack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", - "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", + "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", "requires": { - "@babel/core": "^7.1.6", + "@babel/core": "^7.4.5", "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.1.6", + "@babel/preset-env": "^7.4.5", "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.1.0", - "@svgr/plugin-jsx": "^4.1.0", - "@svgr/plugin-svgo": "^4.0.3", - "loader-utils": "^1.1.0" + "@svgr/core": "^4.3.3", + "@svgr/plugin-jsx": "^4.3.3", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" } }, "@types/babel__core": { @@ -1426,9 +1478,9 @@ } }, "@types/babel__generator": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", - "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", "requires": { "@babel/types": "^7.0.0" } @@ -1443,22 +1495,52 @@ } }, "@types/babel__traverse": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", - "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", + "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", "requires": { "@babel/types": "^7.3.0" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/history": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz", + "integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==" + }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" }, "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "requires": { "@types/istanbul-lib-coverage": "*" } @@ -1472,6 +1554,40 @@ "@types/istanbul-lib-report": "*" } }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" + }, + "@types/jwt-decode": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/jwt-decode/-/jwt-decode-2.2.1.tgz", + "integrity": "sha512-aWw2YTtAdT7CskFyxEX2K21/zSDStuf/ikI3yBqmwpwJF0pS+/IX5DWv+1UFffZIbruP6cnT9/LAJV1gFwAT1A==" + }, + "@types/material-ui": { + "version": "0.21.7", + "resolved": "https://registry.npmjs.org/@types/material-ui/-/material-ui-0.21.7.tgz", + "integrity": "sha512-OxGu+Jfm3d8IVYu5w2cqosSFU+8KJYCeVjw1jLZ7DzgoE7KpSFFpbDJKWhV1FAf/HEQXzL1IpX6PmLwINlE4Xg==", + "requires": { + "@types/react": "*", + "@types/react-addons-linked-state-mixin": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "12.12.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.26.tgz", + "integrity": "sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", @@ -1483,14 +1599,58 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, "@types/react": { - "version": "16.9.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.13.tgz", - "integrity": "sha512-LikzRslbiufJYHyzbHSW0GrAiff8QYLMBFeZmSxzCYGXKxi8m/1PHX+rsVOwhr7mJNq+VIu2Dhf7U6mjFERK6w==", + "version": "16.9.19", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.19.tgz", + "integrity": "sha512-LJV97//H+zqKWMms0kvxaKYJDG05U2TtQB3chRLF8MPNs+MQh/H1aGlyDUxjaHvu08EAGerdX2z4LTBc7ns77A==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, + "@types/react-addons-linked-state-mixin": { + "version": "0.14.20", + "resolved": "https://registry.npmjs.org/@types/react-addons-linked-state-mixin/-/react-addons-linked-state-mixin-0.14.20.tgz", + "integrity": "sha512-17M8ymjR/vvyaQnLNuLSQipxtUrxaIq19phbWKKz1drIXeVQx+AnqMVVVIClno/gPheJWcLVCbf+yXXbbRalIg==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-dom": { + "version": "16.9.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", + "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-material-ui-form-validator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/react-material-ui-form-validator/-/react-material-ui-form-validator-2.0.5.tgz", + "integrity": "sha512-3ruQ55dvXdzZ/Orys+80PbC+14wXNapoiz1IvdBfsSrhKqHceUCgKAKKG+DoGFHowduFQx+JaUvBZ9BKem/K9w==", + "requires": { + "@types/material-ui": "*", + "@types/react": "*" + } + }, + "@types/react-router": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.4.tgz", + "integrity": "sha512-PZtnBuyfL07sqCJvGg3z+0+kt6fobc/xmle08jBiezLS8FrmGeiGkJnuxL/8Zgy9L83ypUhniV5atZn/L8n9MQ==", + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.3.tgz", + "integrity": "sha512-pCq7AkOvjE65jkGS5fQwQhvUp4+4PVD9g39gXLZViP2UqFiFzsEpB3PKf0O6mdbKsewSK8N14/eegisa/0CwnA==", + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } + }, "@types/react-transition-group": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.3.tgz", @@ -1505,53 +1665,63 @@ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" }, "@types/yargs": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", - "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "version": "13.0.8", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", + "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" }, "@typescript-eslint/eslint-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.6.0.tgz", - "integrity": "sha512-U224c29E2lo861TQZs6GSmyC0OYeRNg6bE9UVIiFBxN2MlA0nq2dCrgIVyyRbC05UOcrgf2Wk/CF2gGOPQKUSQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.0.tgz", + "integrity": "sha512-u7IcQ9qwsB6U806LupZmINRnQjC+RJyv36sV/ugaFWMHTbFm/hlLTRx3gGYJgHisxcGSTnf+I/fPDieRMhPSQQ==", "requires": { - "@typescript-eslint/parser": "1.6.0", - "@typescript-eslint/typescript-estree": "1.6.0", - "requireindex": "^1.2.0", - "tsutils": "^3.7.0" + "@typescript-eslint/experimental-utils": "2.19.0", + "eslint-utils": "^1.4.3", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.0.tgz", + "integrity": "sha512-zwpg6zEOPbhB3+GaQfufzlMUOO6GXCNZq6skk+b2ZkZAIoBhVoanWK255BS1g5x9bMwHpLhX0Rpn5Fc3NdCZdg==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.19.0", + "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.6.0.tgz", - "integrity": "sha512-VB9xmSbfafI+/kI4gUK3PfrkGmrJQfh0N4EScT1gZXSZyUxpsBirPL99EWZg9MmPG0pzq/gMtgkk7/rAHj4aQw==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.19.0.tgz", + "integrity": "sha512-s0jZoxAWjHnuidbbN7aA+BFVXn4TCcxEVGPV8lWMxZglSs3NRnFFAlL+aIENNmzB2/1jUJuySi6GiM6uACPmpg==", "requires": { - "@typescript-eslint/typescript-estree": "1.6.0", - "eslint-scope": "^4.0.0", - "eslint-visitor-keys": "^1.0.0" + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.19.0", + "@typescript-eslint/typescript-estree": "2.19.0", + "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.6.0.tgz", - "integrity": "sha512-A4CanUwfaG4oXobD5y7EXbsOHjCwn8tj1RDd820etpPAjH+Icjc2K9e/DQM1Hac5zH2BSy+u6bjvvF2wwREvYA==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.0.tgz", + "integrity": "sha512-n6/Xa37k0jQdwpUszffi19AlNbVCR0sdvCs3DmSKMD7wBttKY31lhD2fug5kMD91B2qW4mQldaTEc1PEzvGu8w==", "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^6.3.0", + "tsutils": "^3.17.1" } }, "@webassemblyjs/ast": { @@ -1723,9 +1893,9 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", - "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==" }, "accepts": { "version": "1.3.7", @@ -1737,14 +1907,9 @@ } }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" - }, - "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==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" }, "acorn-globals": { "version": "4.3.4", @@ -1753,12 +1918,19 @@ "requires": { "acorn": "^6.0.1", "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" + } } }, "acorn-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", - "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==" }, "acorn-walk": { "version": "6.2.0", @@ -1770,12 +1942,40 @@ "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", "requires": { - "fast-deep-equal": "^2.0.1", + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + } + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "requires": { + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -1802,9 +2002,12 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" }, "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==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-html": { "version": "0.0.7", @@ -1812,9 +2015,9 @@ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { "version": "3.2.1", @@ -1855,6 +2058,11 @@ "commander": "^2.11.0" } }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -1881,12 +2089,13 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" } }, "array-union": { @@ -1907,6 +2116,15 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1936,27 +2154,11 @@ } }, "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { - "object-assign": "^4.1.1", "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } } }, "assert-plus": { @@ -1980,9 +2182,12 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } }, "async-each": { "version": "1.0.3", @@ -2005,24 +2210,17 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", - "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", + "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", "requires": { - "browserslist": "^4.6.3", - "caniuse-lite": "^1.0.30000980", + "browserslist": "^4.8.3", + "caniuse-lite": "^1.0.30001020", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.17", - "postcss-value-parser": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" - } + "postcss": "^7.0.26", + "postcss-value-parser": "^4.0.2" } }, "aws-sign2": { @@ -2031,17 +2229,14 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "requires": { - "ast-types-flow": "0.0.7" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz", + "integrity": "sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ==" }, "babel-code-frame": { "version": "6.26.0", @@ -2096,27 +2291,16 @@ } }, "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==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", "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" - }, - "dependencies": { - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" } }, "babel-extract-comments": { @@ -2142,14 +2326,83 @@ } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "requires": { "find-cache-dir": "^2.0.0", "loader-utils": "^1.0.2", "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "pify": "^4.0.1" + }, + "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==", + "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==", + "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==", + "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==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "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==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "babel-plugin-dynamic-import-node": { @@ -2169,6 +2422,38 @@ "find-up": "^3.0.0", "istanbul-lib-instrument": "^3.3.0", "test-exclude": "^5.2.3" + }, + "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==", + "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==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } } }, "babel-plugin-jest-hoist": { @@ -2180,19 +2465,63 @@ } }, "babel-plugin-macros": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", - "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", "requires": { - "@babel/runtime": "^7.4.2", - "cosmiconfig": "^5.2.0", - "resolve": "^1.10.0" + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } } }, "babel-plugin-named-asset-import": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.4.tgz", - "integrity": "sha512-S6d+tEzc5Af1tKIMbsf2QirCcPdQ+mKUCY2H1nJj1DyA1ShwpsoxEOAwbWsG5gcXNV/olpvQd9vrUWRx4bnhpw==" + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", + "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -2223,128 +2552,23 @@ } }, "babel-preset-react-app": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.2.tgz", - "integrity": "sha512-aXD+CTH8Chn8sNJr4tO/trWKqe5sSE4hdO76j9fhVezJSzmpWYWUSc5JoPmdSxADwef5kQFNGKXd433vvkd2VQ==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.1.tgz", + "integrity": "sha512-YkWP2UwY//TLltNlEBRngDOrYhvSLb+CA330G7T9M5UhGEMWe+JK/8IXJc5p2fDTSfSiETf+PY0+PYXFMix81Q==", "requires": { - "@babel/core": "7.6.0", - "@babel/plugin-proposal-class-properties": "7.5.5", - "@babel/plugin-proposal-decorators": "7.6.0", - "@babel/plugin-proposal-object-rest-spread": "7.5.5", - "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-destructuring": "7.6.0", - "@babel/plugin-transform-flow-strip-types": "7.4.4", - "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.6.0", - "@babel/preset-env": "7.6.0", - "@babel/preset-react": "7.0.0", - "@babel/preset-typescript": "7.6.0", - "@babel/runtime": "7.6.0", - "babel-plugin-dynamic-import-node": "2.3.0", - "babel-plugin-macros": "2.6.1", + "@babel/core": "7.8.4", + "@babel/plugin-proposal-class-properties": "7.8.3", + "@babel/plugin-proposal-decorators": "7.8.3", + "@babel/plugin-proposal-numeric-separator": "7.8.3", + "@babel/plugin-transform-flow-strip-types": "7.8.3", + "@babel/plugin-transform-react-display-name": "7.8.3", + "@babel/plugin-transform-runtime": "7.8.3", + "@babel/preset-env": "7.8.4", + "@babel/preset-react": "7.8.3", + "@babel/preset-typescript": "7.8.3", + "@babel/runtime": "7.8.4", + "babel-plugin-macros": "2.8.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24" - }, - "dependencies": { - "@babel/core": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", - "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.0", - "@babel/helpers": "^7.6.0", - "@babel/parser": "^7.6.0", - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.0", - "@babel/types": "^7.6.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", - "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/preset-env": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", - "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", - "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-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^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.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.6.0", - "@babel/plugin-transform-classes": "^7.5.5", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.6.0", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.6.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@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.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.6.0", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/runtime": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", - "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } } }, "babel-runtime": { @@ -2357,9 +2581,9 @@ }, "dependencies": { "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, "regenerator-runtime": { "version": "0.11.1", @@ -2426,15 +2650,10 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -2462,14 +2681,23 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } }, "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { "version": "4.11.8", @@ -2569,11 +2797,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -2668,27 +2891,27 @@ } }, "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "version": "4.8.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", + "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" + "caniuse-lite": "^1.0.30001023", + "electron-to-chromium": "^1.3.341", + "node-releases": "^1.1.47" } }, "bser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", - "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "requires": { "node-int64": "^0.4.0" } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -2721,24 +2944,28 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", - "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", + "chownr": "^1.1.2", "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", "glob": "^7.1.4", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, "cache-base": { @@ -2755,13 +2982,6 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "call-me-maybe": { @@ -2816,9 +3036,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000997", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000997.tgz", - "integrity": "sha512-BQLFPIdj2ntgBNWp9Q64LGUIEmvhKkzzHhUHR3CD5A9Lb7ZKF20/+sgadhFap69lk5XmK1fTUleDclaRFvgVUA==" + "version": "1.0.30001025", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001025.tgz", + "integrity": "sha512-SKyFdHYfXUZf5V85+PJgLYyit27q4wgvZuf8QTOk1osbypcROihMBlx9GRar2/pIcKH2r4OehdlBr9x6PXetAQ==" }, "capture-exit": { "version": "2.0.0", @@ -2829,9 +3049,9 @@ } }, "case-sensitive-paths-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" }, "caseless": { "version": "0.12.0", @@ -2854,509 +3074,62 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", "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.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" }, "dependencies": { - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "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.3", - "bundled": true, - "optional": true, - "requires": { - "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, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "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, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "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, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "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, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": 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" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -3405,11 +3178,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -3419,19 +3187,24 @@ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "requires": { "source-map": "~0.6.0" } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { @@ -3449,10 +3222,15 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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=" }, "string-width": { "version": "3.1.0", @@ -3463,14 +3241,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -3484,27 +3254,12 @@ "kind-of": "^3.0.2", "lazy-cache": "^1.0.3", "shallow-clone": "^0.1.2" - }, - "dependencies": { - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "clsx": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.0.4.tgz", - "integrity": "sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", + "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==" }, "co": { "version": "4.6.0", @@ -3575,9 +3330,9 @@ } }, "commander": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", - "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "common-tags": { "version": "1.8.0", @@ -3594,12 +3349,20 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "requires": { - "mime-db": ">= 1.40.0 < 2" + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -3632,15 +3395,15 @@ } }, "compression-webpack-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz", - "integrity": "sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz", + "integrity": "sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug==", "requires": { - "cacache": "^11.2.0", - "find-cache-dir": "^2.0.0", + "cacache": "^13.0.1", + "find-cache-dir": "^3.0.0", "neo-async": "^2.5.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", "webpack-sources": "^1.0.1" } }, @@ -3671,12 +3434,9 @@ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "constants-browserify": { "version": "1.0.0", @@ -3707,9 +3467,9 @@ "integrity": "sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==" }, "convert-source-map": { - "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==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "requires": { "safe-buffer": "~5.1.1" } @@ -3743,23 +3503,23 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", - "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==" }, "core-js-compat": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", - "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", + "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", "requires": { - "browserslist": "^4.6.6", - "semver": "^6.3.0" + "browserslist": "^4.8.3", + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" } } }, @@ -3823,6 +3583,13 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "crypto-browserify": { @@ -3843,6 +3610,17 @@ "randomfill": "^1.0.3" } }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, "css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -3891,45 +3669,23 @@ } } }, - "css-jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-jss/-/css-jss-10.0.0.tgz", - "integrity": "sha512-OmOIFKkIFlQn4q7svS6RbFZNrNoCpVoif0Y74ANMBi+Di6dKDdXo78ulSzjJJftaHxtWG1TfCsGsk2s8tiIvsw==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "jss-preset-default": "10.0.0" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } - } - }, "css-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", - "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", + "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", "requires": { - "camelcase": "^5.2.0", - "icss-utils": "^4.1.0", + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", "loader-utils": "^1.2.3", "normalize-path": "^3.0.0", - "postcss": "^7.0.14", + "postcss": "^7.0.23", "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" + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.1.1", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.0.2", + "schema-utils": "^2.6.0" }, "dependencies": { "normalize-path": { @@ -3948,12 +3704,12 @@ } }, "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "requires": { "boolbase": "^1.0.0", - "css-what": "^2.1.2", + "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" } @@ -3964,19 +3720,12 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "css-tree": { - "version": "1.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", - "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "requires": { "mdn-data": "2.0.4", - "source-map": "^0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "source-map": "^0.6.1" } }, "css-unit-converter": { @@ -3985,18 +3734,18 @@ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" }, "css-vendor": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.6.tgz", - "integrity": "sha512-buv8FoZh84iMrtPHYGYll00/qSNV0gYO6E/GUCjUPTsSPj7uf/wot/QZwig+7qdFGxJ7HjOSJoclbhag09TVUQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.7.tgz", + "integrity": "sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg==", "requires": { - "@babel/runtime": "^7.5.5", + "@babel/runtime": "^7.6.2", "is-in-browser": "^1.0.2" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==" }, "cssdb": { "version": "4.4.0", @@ -4080,32 +3829,11 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", "requires": { - "css-tree": "1.0.0-alpha.29" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - } - }, - "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "css-tree": "1.0.0-alpha.37" } }, "cssom": { @@ -4122,19 +3850,28 @@ } }, "csstype": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", - "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==" + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.8.tgz", + "integrity": "sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==" }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "damerau-levenshtein": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", - "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" }, "dashdash": { "version": "1.14.1", @@ -4155,9 +3892,9 @@ }, "dependencies": { "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -4166,11 +3903,6 @@ } } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -4190,9 +3922,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", - "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -4259,29 +3991,25 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "requires": { + "@types/glob": "^7.1.1", "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" + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { "globby": { @@ -4303,10 +4031,15 @@ } } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" } } }, @@ -4321,9 +4054,9 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -4437,27 +4170,12 @@ "requires": { "@babel/runtime": "^7.6.3", "csstype": "^2.6.7" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz", - "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "csstype": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", - "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==" - } } }, "dom-serializer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", - "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "requires": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -4514,14 +4232,14 @@ } }, "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" }, "duplexer": { "version": "0.1.1", @@ -4554,14 +4272,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.270", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.270.tgz", - "integrity": "sha512-426qbfgLn0hVE4pDxok2dcAhA3u5lwXlBg2+i6VWQJvnMZNgevkC6s/qr91YH/avVMKXKwxnR5iBznpivg210A==" + "version": "1.3.345", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.345.tgz", + "integrity": "sha512-f8nx53+Z9Y+SPWGg3YdHrbYYfIJAtbUjpFfW4X1RwTZ94iUG7geg9tV8HqzAXX7XTNgyWgAFvce4yce8ZKxKmg==" }, "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -4573,9 +4291,9 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "2.1.0", @@ -4596,13 +4314,24 @@ } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "entities": { @@ -4627,32 +4356,62 @@ } }, "es-abstract": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", - "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.0.0", - "string.prototype.trimright": "^2.0.0" + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { - "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "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", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4664,76 +4423,83 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - } } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "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", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "requires": { + "type-fest": "^0.8.1" + } + }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4742,20 +4508,20 @@ } }, "eslint-config-react-app": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-4.0.1.tgz", - "integrity": "sha512-ZsaoXUIGsK8FCi/x4lT2bZR5mMkL/Kgj+Lnw690rbvvUr/uiwgFiD8FcfAhkCycm7Xte6O5lYz4EqMx2vX7jgw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.0.tgz", + "integrity": "sha512-WrHjoGpKr1kLLiWDD81tme9jMM0hk5cMxasLSdyno6DdPt+IfLOrDJBVo6jN7tn4y1nzhs43TmUaZWO6Sf0blw==", "requires": { - "confusing-browser-globals": "^1.0.7" + "confusing-browser-globals": "^1.0.9" } }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" }, "dependencies": { "debug": { @@ -4774,23 +4540,23 @@ } }, "eslint-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", - "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", + "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^2.0.1", + "schema-utils": "^2.6.1" } }, "eslint-module-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", - "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", + "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", "requires": { - "debug": "^2.6.8", + "debug": "^2.6.9", "pkg-dir": "^2.0.0" }, "dependencies": { @@ -4845,6 +4611,11 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -4856,28 +4627,30 @@ } }, "eslint-plugin-flowtype": { - "version": "2.50.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", - "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", + "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.15" } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz", + "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==", "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.1", "has": "^1.0.3", - "lodash": "^4.17.11", "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.12.0" }, "dependencies": { "debug": { @@ -4959,6 +4732,11 @@ "error-ex": "^1.2.0" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -4994,10 +4772,11 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", - "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "requires": { + "@babel/runtime": "^7.4.5", "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", @@ -5005,21 +4784,30 @@ "damerau-levenshtein": "^1.0.4", "emoji-regex": "^7.0.2", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" + "jsx-ast-utils": "^2.2.1" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + } } }, "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz", + "integrity": "sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ==", "requires": { - "array-includes": "^3.0.3", + "array-includes": "^3.1.1", "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" + "jsx-ast-utils": "^2.2.3", + "object.entries": "^1.1.1", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.14.2" }, "dependencies": { "doctrine": { @@ -5038,20 +4826,20 @@ "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", "requires": { - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "eslint-visitor-keys": { @@ -5060,13 +4848,13 @@ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { @@ -5111,9 +4899,9 @@ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" }, "eventsource": { "version": "1.0.7", @@ -5133,9 +4921,9 @@ } }, "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" }, "execa": { "version": "1.0.0", @@ -5281,6 +5069,21 @@ } } }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5302,19 +5105,6 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -5386,9 +5176,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -5398,9 +5188,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "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=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-glob": { "version": "2.2.7", @@ -5413,12 +5203,33 @@ "is-glob": "^4.0.0", "merge2": "^1.2.3", "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "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=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -5426,19 +5237,19 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "requires": { "websocket-driver": ">=0.5.1" } }, "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "requires": { - "bser": "^2.0.0" + "bser": "2.1.1" } }, "figgy-pudding": { @@ -5447,9 +5258,9 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "requires": { "escape-string-regexp": "^1.0.5" } @@ -5463,18 +5274,24 @@ } }, "file-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", - "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", + "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" }, "fill-range": { "version": "4.0.0", @@ -5527,21 +5344,22 @@ } }, "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==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flat-cache": { @@ -5570,9 +5388,9 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" }, "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" }, "flush-write-stream": { "version": "1.1.1", @@ -5584,9 +5402,9 @@ } }, "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", + "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", "requires": { "debug": "^3.0.0" }, @@ -5620,18 +5438,25 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "fork-ts-checker-webpack-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", - "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", - "chokidar": "^2.0.4", + "chokidar": "^3.3.0", "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", "tapable": "^1.0.0", "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "form-data": { @@ -5672,15 +5497,23 @@ } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, "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", @@ -5698,9 +5531,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.6.tgz", - "integrity": "sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", "optional": true }, "function-bind": { @@ -5713,15 +5546,20 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, "get-stream": { "version": "4.1.0", @@ -5745,9 +5583,9 @@ } }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5758,22 +5596,11 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "requires": { - "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=", - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "glob-to-regexp": { @@ -5800,9 +5627,9 @@ }, "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": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -5830,11 +5657,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -5843,9 +5665,9 @@ } }, "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, "growly": { "version": "1.3.0", @@ -5864,6 +5686,13 @@ "requires": { "duplexer": "^0.1.1", "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } } }, "handle-thing": { @@ -5871,17 +5700,6 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, - "handlebars": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.0.tgz", - "integrity": "sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw==", - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -5930,9 +5748,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, "has-value": { "version": "1.0.0", @@ -5942,13 +5760,6 @@ "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "has-values": { @@ -6022,17 +5833,17 @@ } }, "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "requires": { "react-is": "^16.7.0" } }, "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" }, "hpack.js": { "version": "2.1.6", @@ -6073,38 +5884,54 @@ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" }, - "html-minifier": { - "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==", + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==" + }, + "html-minifier-terser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.2.tgz", + "integrity": "sha512-VAaitmbBuHaPKv9bj47XKypRhgDxT/cDLvsPiiF7w+omrN3K0eQhpigV9Z1ilrmHa9e0rOYcD6R/+LCDADGcnQ==", "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" + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^4.0.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "terser": "^4.3.9" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" } } }, "html-webpack-plugin": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz", - "integrity": "sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==", + "version": "4.0.0-beta.11", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", + "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", "requires": { - "html-minifier": "^3.5.20", - "loader-utils": "^1.1.0", - "lodash": "^4.17.11", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", "pretty-error": "^2.1.1", - "tapable": "^1.1.0", + "tapable": "^1.1.3", "util.promisify": "1.0.0" + }, + "dependencies": { + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } } }, "htmlparser2": { @@ -6126,9 +5953,9 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6215,11 +6042,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" - }, "icss-utils": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", @@ -6288,6 +6110,46 @@ "requires": { "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==", + "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==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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==", + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -6295,11 +6157,21 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6320,38 +6192,23 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", "requires": { - "ansi-escapes": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "internal-ip": { @@ -6415,11 +6272,11 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "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=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -6428,9 +6285,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" }, "is-ci": { "version": "2.0.0", @@ -6462,9 +6319,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, "is-descriptor": { "version": "0.1.6", @@ -6499,9 +6356,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "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=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -6535,24 +6392,37 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, "is-path-in-cwd": { - "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "^1.0.2" + } + }, + "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=" + }, + "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==", + "requires": { + "isobject": "^3.0.1" } }, "is-promise": { @@ -6561,11 +6431,11 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-regexp": { @@ -6588,6 +6458,11 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", @@ -6597,11 +6472,11 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-typedarray": { @@ -6629,6 +6504,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -6651,13 +6531,6 @@ "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } } }, "istanbul-lib-report": { @@ -6670,6 +6543,25 @@ "supports-color": "^6.1.0" }, "dependencies": { + "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==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -6690,23 +6582,44 @@ "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" + }, + "dependencies": { + "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==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0" } }, "jest": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", - "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.7.1" + "jest-cli": "^24.9.0" }, "dependencies": { "jest-cli": { @@ -6763,20 +6676,6 @@ "micromatch": "^3.1.10", "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-diff": { @@ -6824,15 +6723,23 @@ } }, "jest-environment-jsdom-fourteen": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-0.1.0.tgz", - "integrity": "sha512-4vtoRMg7jAstitRzL4nbw83VmGH8Rs13wrND3Ud2o1fczDhMUF32iIrNKwYGgeOPUdfvZU4oy8Bbv+ni1fgVCA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", + "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", "requires": { - "jest-mock": "^24.5.0", - "jest-util": "^24.5.0", - "jsdom": "^14.0.0" + "@jest/environment": "^24.3.0", + "@jest/fake-timers": "^24.3.0", + "@jest/types": "^24.3.0", + "jest-mock": "^24.0.0", + "jest-util": "^24.0.0", + "jsdom": "^14.1.0" }, "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" + }, "jsdom": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", @@ -6872,9 +6779,9 @@ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" }, "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -6928,13 +6835,14 @@ }, "dependencies": { "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -6976,7 +6884,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.3", "bundled": true, "optional": true }, @@ -7001,7 +6909,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "optional": true, "requires": { @@ -7024,11 +6932,11 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -7052,7 +6960,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "optional": true, "requires": { @@ -7078,7 +6986,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "optional": true, "requires": { @@ -7095,7 +7003,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "optional": true }, @@ -7131,7 +7039,7 @@ "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "optional": true, "requires": { @@ -7140,11 +7048,11 @@ } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { @@ -7156,22 +7064,22 @@ } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.4.0", "bundled": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "optional": true, "requires": { @@ -7184,7 +7092,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -7197,12 +7105,20 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.7", "bundled": true, "optional": true, "requires": { @@ -7264,7 +7180,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "optional": true }, @@ -7301,7 +7217,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "optional": true, "requires": { @@ -7324,7 +7240,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "optional": true }, @@ -7370,17 +7286,17 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -7402,7 +7318,7 @@ "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, "optional": true } @@ -7487,11 +7403,11 @@ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" }, "jest-resolve": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", - "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "requires": { - "@jest/types": "^24.7.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7532,20 +7448,6 @@ "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-runtime": { @@ -7576,20 +7478,6 @@ "slash": "^2.0.0", "strip-bom": "^3.0.0", "yargs": "^13.3.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - } } }, "jest-serializer": { @@ -7615,25 +7503,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^24.9.0", "semver": "^6.2.0" - }, - "dependencies": { - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } } }, "jest-util": { @@ -7676,29 +7545,31 @@ } }, "jest-watch-typeahead": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.0.tgz", - "integrity": "sha512-+uOtlppt9ysST6k6ZTqsPI0WNz2HLa8bowiZylZoQCQaAVn7XsVmHhZREkz73FhKelrFrpne4hQQjdq42nFEmA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", + "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", "requires": { - "ansi-escapes": "^3.0.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.1", + "jest-regex-util": "^24.9.0", "jest-watcher": "^24.3.0", - "slash": "^2.0.0", - "string-length": "^2.0.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", "requires": { - "ansi-regex": "^4.1.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" } } } @@ -7715,6 +7586,13 @@ "chalk": "^2.0.1", "jest-util": "^24.9.0", "string-length": "^2.0.0" + }, + "dependencies": { + "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==" + } } }, "jest-worker": { @@ -7736,11 +7614,6 @@ } } }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7844,9 +7717,9 @@ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "requires": { "minimist": "^1.2.0" }, @@ -7883,9 +7756,9 @@ } }, "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.4.tgz", + "integrity": "sha512-GqHmeDK83qbqMAVjxyPfN1qJVTKZne533a9bdCrllZukUM8npG/k+JumEPI86IIB5ifaZAHG2HAsUziyxOiooQ==", "requires": { "@babel/runtime": "^7.3.1", "csstype": "^2.6.5", @@ -7894,289 +7767,75 @@ } }, "jss-plugin-camel-case": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz", - "integrity": "sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.4.tgz", + "integrity": "sha512-+wnqxJsyfUnOn0LxVg3GgZBSjfBCrjxwx7LFxwVTUih0ceGaXKZoieheNOaTo5EM4w8bt1nbb8XonpQCj67C6A==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.0.0" - } - }, - "jss-plugin-compose": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-compose/-/jss-plugin-compose-10.0.0.tgz", - "integrity": "sha512-cjfiI+BXWrLvQ+WJ3vokY2l9wNq8NRkQAPOu9//pHqT5O2YA9PMrzmcTjlCktB9/0w1lsbTDrUZbkx/Uyv9jUA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "tiny-warning": "^1.0.2" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } + "jss": "10.0.4" } }, "jss-plugin-default-unit": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz", - "integrity": "sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.4.tgz", + "integrity": "sha512-T0mhL/Ogp/quvod/jAHEqKvptLDxq7Cj3a+7zRuqK8HxUYkftptN89wJElZC3rshhNKiogkEYhCWenpJdFvTBg==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-expand/-/jss-plugin-expand-10.0.0.tgz", - "integrity": "sha512-VLL24ZLSawzCUgFjRU9ATABi8hXciMb4fFaH8jWcv1ID0EuSNiV97a1Cs0NupCf7yeOGCfqvCJGnzbAHP1JPNA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } - } - }, - "jss-plugin-extend": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-extend/-/jss-plugin-extend-10.0.0.tgz", - "integrity": "sha512-Txum09t47UPH4UTxhxsQ5gUpGQDeZkB+V8Q7LX7u5TiUuXGLKuSG0ogtjPW+10iShw5U2g51thmKhfAUnrM4Zg==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "tiny-warning": "^1.0.2" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } + "jss": "10.0.4" } }, "jss-plugin-global": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz", - "integrity": "sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.4.tgz", + "integrity": "sha512-N8n9/GHENZce+sqE4UYiZiJtI+t+erT/BypHOrNYAfIoNEj7OYsOEKfIo2P0GpLB3QyDAYf5eo9XNdZ8veEkUA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.0.4" } }, "jss-plugin-nested": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz", - "integrity": "sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.4.tgz", + "integrity": "sha512-QM21BKVt8LDeoRfowvAMh/s+/89VYrreIIE6ch4pvw0oAXDWw1iorUPlqLZ7uCO3UL0uFtQhJq3QMLN6Lr1v0A==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0", + "jss": "10.0.4", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz", - "integrity": "sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.4.tgz", + "integrity": "sha512-WoETdOCjGskuin/OMt2uEdDPLZF3vfQuHXF+XUHGJrq0BAapoyGQDcv37SeReDlkRAbVXkEZPsIMvYrgHSHFiA==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" + "jss": "10.0.4" } }, "jss-plugin-rule-value-function": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz", - "integrity": "sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.4.tgz", + "integrity": "sha512-0hrzOSWRF5ABJGaHrlnHbYZjU877Ofzfh2id3uLtBvemGQLHI+ldoL8/+6iPSRa7M8z8Ngfg2vfYhKjUA5gA0g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-rule-value-observable": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-observable/-/jss-plugin-rule-value-observable-10.0.0.tgz", - "integrity": "sha512-L4u4qf2k9oZKxdk8GlLBXtfTn7Eochcr7KG0oSGUyaEDXiqNwOv9/PExCxLFs6pYF5zViNPEDN37K7DRA/NMdQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "symbol-observable": "^1.2.0" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } - } - }, - "jss-plugin-template": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-template/-/jss-plugin-template-10.0.0.tgz", - "integrity": "sha512-cSfBmz8MLemhvC1etFYjnK4IOjnkkVpRrpzqQc1BNfwD/t6GDwUc6esakztbSKoRzog6rtEn5HC0Wlo2GLVRYA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "tiny-warning": "^1.0.2" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } + "jss": "10.0.4" } }, "jss-plugin-vendor-prefixer": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz", - "integrity": "sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.4.tgz", + "integrity": "sha512-4JgEbcrdeMda1qvxTm1CnxFJAWVV++VLpP46HNTrfH7VhVlvUpihnUNs2gAlKuRT/XSBuiWeLAkrTqF4NVrPig==", "requires": { "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.6", - "jss": "10.0.0" - } - }, - "jss-preset-default": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-preset-default/-/jss-preset-default-10.0.0.tgz", - "integrity": "sha512-GgIeSf+0SrR84azME+1fsrmcxvFX8iHqPCqXM8F5Rmg4OwCmGTAVIVPRhdDi3hawqGG47pNd6UkvK0kYb76KpQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "jss-plugin-camel-case": "10.0.0", - "jss-plugin-compose": "10.0.0", - "jss-plugin-default-unit": "10.0.0", - "jss-plugin-expand": "10.0.0", - "jss-plugin-extend": "10.0.0", - "jss-plugin-global": "10.0.0", - "jss-plugin-nested": "10.0.0", - "jss-plugin-props-sort": "10.0.0", - "jss-plugin-rule-value-function": "10.0.0", - "jss-plugin-rule-value-observable": "10.0.0", - "jss-plugin-template": "10.0.0", - "jss-plugin-vendor-prefixer": "10.0.0" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-camel-case": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz", - "integrity": "sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==", - "requires": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.0.0" - } - }, - "jss-plugin-default-unit": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz", - "integrity": "sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-global": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz", - "integrity": "sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-nested": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz", - "integrity": "sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-props-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz", - "integrity": "sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-rule-value-function": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz", - "integrity": "sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.0" - } - }, - "jss-plugin-vendor-prefixer": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz", - "integrity": "sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==", - "requires": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.6", - "jss": "10.0.0" - } - } + "css-vendor": "^2.0.7", + "jss": "10.0.4" } }, "jsx-ast-utils": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", - "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", "requires": { "array-includes": "^3.0.3", "object.assign": "^4.1.0" @@ -8237,6 +7896,14 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "requires": { + "leven": "^3.1.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -8246,6 +7913,11 @@ "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -8255,13 +7927,6 @@ "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } } }, "loader-fs-cache": { @@ -8341,12 +8006,11 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -8369,11 +8033,6 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -8391,20 +8050,15 @@ "lodash._reinterpolate": "^3.0.0" } }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "loglevel": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", - "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==" + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", + "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==" }, "loose-envify": { "version": "1.4.0", @@ -8425,15 +8079,21 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } } }, "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" } }, "makeerror": { @@ -8498,13 +8158,6 @@ "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - } } }, "memory-fs": { @@ -8572,9 +8225,9 @@ }, "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": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -8593,29 +8246,22 @@ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" }, "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "requires": { - "mime-db": "1.42.0" - }, - "dependencies": { - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" - } + "mime-db": "1.43.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==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-create-react-context": { "version": "0.3.2", @@ -8628,13 +8274,26 @@ } }, "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", "requires": { "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "minimalistic-assert": { @@ -8660,6 +8319,38 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", + "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "requires": { + "minipass": "^3.0.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -8693,19 +8384,6 @@ "requires": { "is-plain-object": "^2.0.4" } - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -8771,9 +8449,9 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { "version": "2.14.0", @@ -8800,9 +8478,9 @@ }, "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": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -8821,6 +8499,11 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -8835,9 +8518,9 @@ } }, "node-forge": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", - "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" }, "node-int64": { "version": "0.4.0", @@ -8874,10 +8557,23 @@ "vm-browserify": "^1.0.1" }, "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + } } } }, @@ -8896,14 +8592,21 @@ "semver": "^5.5.0", "shellwords": "^0.1.1", "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "node-releases": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.33.tgz", - "integrity": "sha512-I0V30bWQEoHb+10W8oedVoUrdjW5wIkYm0w7vvcrPO95pZY738m1k77GF5sO0vKg5eXYg9oGtrMAETbgZGm11A==", + "version": "1.1.48", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.48.tgz", + "integrity": "sha512-Hr8BbmUl1ujAST0K0snItzEA5zkJTQup8VNTKNfT6Zw8vTJkIiagUPNfxHmgDOyfFYNfKAul40sD0UEYTvwebw==", "requires": { - "semver": "^5.3.0" + "semver": "^6.3.0" } }, "normalize-package-data": { @@ -8915,6 +8618,13 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "normalize-path": { @@ -8936,14 +8646,20 @@ "integrity": "sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA==" }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } }, "notistack": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/notistack/-/notistack-0.9.6.tgz", - "integrity": "sha512-vo1zOwhQBxwWiMxwVjeSDXNzJuaM/nfkayv4uRo+9ON9CAtaPSNt15QHeELKkbOSLH29fb7zmoZl4AlkCqhGsA==", + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-0.9.7.tgz", + "integrity": "sha512-OztbtaIiCMR7QdcDGXTcYu96Uuvu26k41d7cnMGdf4NaKkAX06fsLPAlodGPj4HrMjMBUl8nvUQ3LmQOS6kHWQ==", "requires": { "classnames": "^2.2.6", "hoist-non-react-statics": "^3.3.0", @@ -8978,9 +8694,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, "oauth-sign": { "version": "0.9.0", @@ -9013,38 +8729,36 @@ } }, "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.1.tgz", + "integrity": "sha512-HgcGMooY4JC2PBt9sdUdJ6PMzpin+YtY3r/7wg0uTifP+HJWW8rammseSEHuyt0UeShI183UGssCJqm1bJR7QA==" }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" }, "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "object.assign": { @@ -9058,24 +8772,35 @@ "object-keys": "^1.0.11" } }, - "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==", + "object.entries": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", + "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", - "has": "^1.0.1" + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -9084,22 +8809,15 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -9131,11 +8849,11 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "open": { @@ -9154,42 +8872,26 @@ "is-wsl": "^1.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - } - } - }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "original": { @@ -9244,40 +8946,51 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "^3.0.0" + } }, "p-reduce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "^0.12.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parallel-transform": { "version": "1.2.0", @@ -9360,9 +9073,9 @@ "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=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -9385,9 +9098,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "requires": { "isarray": "0.0.1" }, @@ -9405,13 +9118,6 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } } }, "pbkdf2": { @@ -9431,10 +9137,15 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==" + }, "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "pinkie": { "version": "2.0.4", @@ -9458,58 +9169,50 @@ } }, "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==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" } }, "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" }, "dependencies": { "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "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=", + "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==", "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" } } }, @@ -9519,40 +9222,35 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" }, "pnp-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.0.tgz", + "integrity": "sha512-ZcMGn/xF/fCOq+9kWMP9vVVxjIkMCja72oy3lziR7UHy0hHFZ57iVpQ71OtveVbmzeCmphBg8pxNdk/hlK99aQ==", "requires": { - "ts-pnp": "^1.0.0" + "ts-pnp": "^1.1.2" } }, "popper.js": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", - "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portfinder": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", - "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" }, "dependencies": { "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" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -9562,9 +9260,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", - "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -9582,37 +9280,20 @@ } }, "postcss-attribute-case-insensitive": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz", - "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", "requires": { "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "postcss-selector-parser": "^6.0.2" } }, "postcss-browser-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-2.0.0.tgz", - "integrity": "sha512-xGG0UvoxwBc4Yx4JX3gc0RuDl1kc4bVihCzzk6UC72YPfq5fu3c717Nu8Un3nvnq1BJ31gBnFXIG/OaUTnpHgA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", + "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", "requires": { - "postcss": "^7.0.2" + "postcss": "^7" } }, "postcss-calc": { @@ -9640,6 +9321,11 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" } } }, @@ -9700,6 +9386,13 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-convert-values": { @@ -9709,6 +9402,13 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-custom-media": { @@ -9880,9 +9580,9 @@ } }, "postcss-initial": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.1.tgz", - "integrity": "sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", "requires": { "lodash.template": "^4.5.0", "postcss": "^7.0.2" @@ -9916,6 +9616,18 @@ "postcss": "^7.0.0", "postcss-load-config": "^2.0.0", "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "postcss-logical": { @@ -9943,6 +9655,13 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-merge-rules": { @@ -9977,6 +9696,13 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-minify-gradients": { @@ -9988,6 +9714,13 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-minify-params": { @@ -10001,6 +9734,13 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-minify-selectors": { @@ -10035,30 +9775,31 @@ } }, "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", + "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0", - "postcss-value-parser": "^3.3.1" + "icss-utils": "^4.1.1", + "postcss": "^7.0.16", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.0" } }, "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz", + "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==", "requires": { "postcss": "^7.0.6", "postcss-selector-parser": "^6.0.0" } }, "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "requires": { - "icss-replace-symbols": "^1.1.0", + "icss-utils": "^4.0.0", "postcss": "^7.0.6" } }, @@ -10071,14 +9812,15 @@ } }, "postcss-normalize": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-7.0.1.tgz", - "integrity": "sha512-NOp1fwrG+6kVXWo7P9SizCHX6QvioxFD/hZcI2MLxPmVnFJFC0j0DDpIuNw2tUDeCFMni59gCVgeJ1/hYhj2OQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", + "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", "requires": { - "@csstools/normalize.css": "^9.0.1", - "browserslist": "^4.1.1", - "postcss": "^7.0.2", - "postcss-browser-comments": "^2.0.0" + "@csstools/normalize.css": "^10.1.0", + "browserslist": "^4.6.2", + "postcss": "^7.0.17", + "postcss-browser-comments": "^3.0.0", + "sanitize.css": "^10.0.0" } }, "postcss-normalize-charset": { @@ -10097,6 +9839,13 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-positions": { @@ -10108,6 +9857,13 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-repeat-style": { @@ -10119,6 +9875,13 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-string": { @@ -10129,6 +9892,13 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-timing-functions": { @@ -10139,6 +9909,13 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-unicode": { @@ -10149,6 +9926,13 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-url": { @@ -10160,6 +9944,18 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-normalize-whitespace": { @@ -10169,6 +9965,13 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-ordered-values": { @@ -10179,6 +9982,13 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-overflow-shorthand": { @@ -10207,26 +10017,26 @@ } }, "postcss-preset-env": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.6.0.tgz", - "integrity": "sha512-I3zAiycfqXpPIFD6HXhLfWXIewAWO8emOKz+QSsxaUZb9Dp8HbF5kUf+4Wy/AxR33o+LRoO8blEWCHth0ZsCLA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", "requires": { - "autoprefixer": "^9.4.9", - "browserslist": "^4.4.2", - "caniuse-lite": "^1.0.30000939", + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", "css-blank-pseudo": "^0.1.4", "css-has-pseudo": "^0.10.0", "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.3.0", - "postcss": "^7.0.14", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", "postcss-attribute-case-insensitive": "^4.0.1", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.2", + "postcss-color-hex-alpha": "^5.0.3", "postcss-color-mod-function": "^3.0.3", "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.7", - "postcss-custom-properties": "^8.0.9", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", "postcss-custom-selectors": "^5.1.2", "postcss-dir-pseudo-class": "^5.0.0", "postcss-double-position-gradients": "^1.0.0", @@ -10296,6 +10106,13 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-replace-overflow-wrap": { @@ -10351,6 +10168,13 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } } }, "postcss-unique-selectors": { @@ -10364,9 +10188,9 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" }, "postcss-values-parser": { "version": "2.0.1", @@ -10383,6 +10207,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, "pretty-bytes": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", @@ -10454,9 +10283,9 @@ "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==" }, "prompts": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", - "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.3" @@ -10487,9 +10316,9 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" }, "public-encrypt": { "version": "4.0.3", @@ -10549,6 +10378,15 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -10613,9 +10451,9 @@ } }, "react": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.10.1.tgz", - "integrity": "sha512-2bisHwMhxQ3XQz4LiJJwG3360pY965pTl/MRrZYxIBKVj4fOHoDs5aZAkYXGxDRO1Li+SyjTAilQEbOmtQJHzA==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", + "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -10623,161 +10461,191 @@ } }, "react-app-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.3.tgz", - "integrity": "sha512-ICvAU2vtO0k+kU0oCS7L7btUcAReTddvEiRiJDmAKc+d98Fy9Z1g6cjkdcKyfLWwopzBsUMcDwxoiNtrtLMs0Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", + "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", "requires": { - "core-js": "3.2.1", - "object-assign": "4.1.1", - "promise": "8.0.3", - "raf": "3.4.1", - "regenerator-runtime": "0.13.3", - "whatwg-fetch": "3.0.0" + "core-js": "^3.5.0", + "object-assign": "^4.1.1", + "promise": "^8.0.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.3", + "whatwg-fetch": "^3.0.0" } }, "react-app-rewired": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.3.tgz", - "integrity": "sha512-NXC2EsQrnEMV7xD70rHcBq0B4PSEzjY/K2m/e+GRgit2jZO/uZApnpCZSKvIX2leLRN69Sqf2id0VXZ1F62CDw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.5.tgz", + "integrity": "sha512-Gr8KfCeL9/PTQs8Vvxc7v8wQ9vCFMnYPhcAkrMlzkLiMFXS+BgSwm11MoERjZm7dpA2WjTi+Pvbu/w7rujAV+A==", "dev": true, "requires": { - "cross-spawn": "^6.0.5", - "dotenv": "^6.2.0", "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "react-dev-utils": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.4.tgz", - "integrity": "sha512-VwR+mBUXPLdYk/rOz6s6qpasIFGd7GW0KXd/3bih+/qGcMQvPG19XxtjDMtiAg0zWiFwp1ugCzAjLThbzFjVqw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.1.0.tgz", + "integrity": "sha512-KmZChqxY6l+ed28IHetGrY8J9yZSvzlAHyFXduEIhQ42EBGtqftlbqQZ+dDTaC7CwNW2tuXN+66bRKE5h2HgrQ==", "requires": { - "@babel/code-frame": "7.5.5", + "@babel/code-frame": "7.8.3", "address": "1.1.2", - "browserslist": "4.7.0", - "chalk": "2.4.2", - "cross-spawn": "6.0.5", + "browserslist": "4.8.6", + "chalk": "3.0.0", + "cross-spawn": "7.0.1", "detect-port-alt": "1.1.6", - "escape-string-regexp": "1.0.5", - "filesize": "3.6.1", - "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.5.0", + "escape-string-regexp": "2.0.0", + "filesize": "6.0.1", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "3.1.1", "global-modules": "2.0.0", "globby": "8.0.2", "gzip-size": "5.1.1", "immer": "1.10.0", - "inquirer": "6.5.0", + "inquirer": "7.0.4", "is-root": "2.1.0", "loader-utils": "1.2.3", - "open": "^6.3.0", - "pkg-up": "2.0.0", - "react-error-overlay": "^6.0.2", + "open": "^6.4.0", + "pkg-up": "3.1.0", + "react-error-overlay": "^6.0.5", "recursive-readdir": "2.2.2", "shell-quote": "1.7.2", - "sockjs-client": "1.4.0", - "strip-ansi": "5.2.0", + "strip-ansi": "6.0.0", "text-table": "0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "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.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" } } } }, - "react-display-name": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.4.tgz", - "integrity": "sha512-zvU6iouW+SWwHTyThwxGICjJYCMZFk/6r/+jmOdC7ntQoPlS/Pqb81MkxaMf2bHTSq9TN3K3zX2/ayMW/jCtyA==" - }, "react-dom": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.1.tgz", - "integrity": "sha512-SmM4ZW0uug0rn95U8uqr52I7UdNf6wdGLeXDmNLfg3y5q5H9eAbdjF5ubQc3bjDyRrvdAB2IKG7X0GzSpnn5Mg==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", + "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.16.1" + "scheduler": "^0.18.0" } }, "react-error-overlay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.2.tgz", - "integrity": "sha512-DHRuRk3K4Lg9obI6J4Y+nKvtwjasYRU9CFL3ud42x9YJG1HbQjSNublapC/WBJOA726gNUbqbj0U2df9+uzspQ==" + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.5.tgz", + "integrity": "sha512-+DMR2k5c6BqMDSMF8hLH0vYKtKTeikiFW+fj0LClN+XZg4N9b8QUAdHC62CGWNLTi/gnuuemNcNcTFrCvK1f+A==" }, "react-form-validator-core": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/react-form-validator-core/-/react-form-validator-core-0.6.4.tgz", - "integrity": "sha512-pqMOuOnkYH+pdnh0Iflhn53l+bso8wQPZ21agn7XQj0ePTHC25VCWKs5NQg8xg7kJfLztD/83ffHyOkAAl6rhw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/react-form-validator-core/-/react-form-validator-core-0.6.5.tgz", + "integrity": "sha512-TOGksWHld6wHrCpAoTJBeS6xc6iOXWYCmNb3GPHCY8IjnMpJY2Uv/t73w/gCYWJgv3ucA+jxUsf4qKmx1f3QEQ==", "requires": { "promise-polyfill": "8.1.0", + "prop-types": "^15.0.0", "react-lifecycles-compat": "^3.0.2" } }, "react-is": { - "version": "16.10.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.1.tgz", - "integrity": "sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw==" - }, - "react-jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/react-jss/-/react-jss-10.0.0.tgz", - "integrity": "sha512-zz4xJSoXkGviLDZTWDeo93ZEiqwbd9dkDWf43AMMnir9Bq0bPdXATZiMhyQwg8+BiWUHUISKYtttaFiBz5MkXA==", - "requires": { - "@babel/runtime": "^7.3.1", - "@emotion/is-prop-valid": "^0.7.3", - "css-jss": "10.0.0", - "hoist-non-react-statics": "^3.2.0", - "is-in-browser": "^1.1.3", - "jss": "10.0.0", - "jss-preset-default": "10.0.0", - "prop-types": "^15.6.0", - "shallow-equal": "^1.2.0", - "theming": "3.2.0", - "tiny-warning": "^1.0.2" - }, - "dependencies": { - "jss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", - "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - } - } + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -10785,17 +10653,29 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-material-ui-form-validator": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/react-material-ui-form-validator/-/react-material-ui-form-validator-2.0.9.tgz", - "integrity": "sha512-8IJwis941dp745eX0wmvj0er1IkMvF0hqhpD9nYbOFeSEKQqc6ta0h/HOtBcVBXlfUJlHHUUib44gyWZV+uE1Q==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/react-material-ui-form-validator/-/react-material-ui-form-validator-2.0.10.tgz", + "integrity": "sha512-Qs32zB5gRUSAiwVAKOXUum4EN+zKycpk0o1FAP/zZsyO29pT2MBN44qaZsxOsPht27/nFZ/7+HcLDQ8YfTAzaQ==", "requires": { + "prop-types": "^15.0.0", "react-form-validator-core": "0.6.4" + }, + "dependencies": { + "react-form-validator-core": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/react-form-validator-core/-/react-form-validator-core-0.6.4.tgz", + "integrity": "sha512-pqMOuOnkYH+pdnh0Iflhn53l+bso8wQPZ21agn7XQj0ePTHC25VCWKs5NQg8xg7kJfLztD/83ffHyOkAAl6rhw==", + "requires": { + "promise-polyfill": "8.1.0", + "react-lifecycles-compat": "^3.0.2" + } + } } }, "react-router": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.1.tgz", - "integrity": "sha512-ozTXqxKZsn4GfZqpG5rVFHSSxlNuDoMNxgyjM+mFJVhqlnPwwkRsAPkDm1PcNjBdYxMzqAhtz48HkQB6fSYaAQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", + "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", "requires": { "@babel/runtime": "^7.1.2", "history": "^4.9.0", @@ -10810,84 +10690,77 @@ } }, "react-router-dom": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.1.tgz", - "integrity": "sha512-r8R8H0Vt2ISqpk02rR6VZBLk+JZdR6pZV+h9K1y0ISh3/G4GGByNevYBS69x6czcOcWVRcZmXjwY8l9UBCKV+w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", + "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", "requires": { "@babel/runtime": "^7.1.2", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", - "react-router": "5.1.1", + "react-router": "5.1.2", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" } }, "react-scripts": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz", - "integrity": "sha512-LKEjBhVpEB+c312NeJhzF+NATxF7JkHNr5GhtwMeRS1cMeLElMeIu8Ye7WGHtDP7iz7ra4ryy48Zpo6G/cwWUw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.3.1.tgz", + "integrity": "sha512-DHvc+/QN0IsLvmnPQqd+H70ol+gdFD3p/SS2tX8M6z1ysjtRGvOwLWy72co1nphYGpq1NqV/Ti5dviU8SCAXpA==", "requires": { - "@babel/core": "7.4.3", - "@svgr/webpack": "4.1.0", - "@typescript-eslint/eslint-plugin": "1.6.0", - "@typescript-eslint/parser": "1.6.0", - "babel-eslint": "10.0.1", - "babel-jest": "^24.8.0", - "babel-loader": "8.0.5", - "babel-plugin-named-asset-import": "^0.3.2", - "babel-preset-react-app": "^9.0.0", - "camelcase": "^5.2.0", - "case-sensitive-paths-webpack-plugin": "2.2.0", - "css-loader": "2.1.1", - "dotenv": "6.2.0", - "dotenv-expand": "4.2.0", - "eslint": "^5.16.0", - "eslint-config-react-app": "^4.0.1", - "eslint-loader": "2.1.2", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-jsx-a11y": "6.2.1", - "eslint-plugin-react": "7.12.4", - "eslint-plugin-react-hooks": "^1.5.0", - "file-loader": "3.0.1", - "fs-extra": "7.0.1", - "fsevents": "2.0.6", - "html-webpack-plugin": "4.0.0-beta.5", + "@babel/core": "7.8.4", + "@svgr/webpack": "4.3.3", + "@typescript-eslint/eslint-plugin": "^2.10.0", + "@typescript-eslint/parser": "^2.10.0", + "babel-eslint": "10.0.3", + "babel-jest": "^24.9.0", + "babel-loader": "8.0.6", + "babel-plugin-named-asset-import": "^0.3.6", + "babel-preset-react-app": "^9.1.1", + "camelcase": "^5.3.1", + "case-sensitive-paths-webpack-plugin": "2.3.0", + "css-loader": "3.4.2", + "dotenv": "8.2.0", + "dotenv-expand": "5.1.0", + "eslint": "^6.6.0", + "eslint-config-react-app": "^5.2.0", + "eslint-loader": "3.0.3", + "eslint-plugin-flowtype": "4.6.0", + "eslint-plugin-import": "2.20.0", + "eslint-plugin-jsx-a11y": "6.2.3", + "eslint-plugin-react": "7.18.0", + "eslint-plugin-react-hooks": "^1.6.1", + "file-loader": "4.3.0", + "fs-extra": "^8.1.0", + "fsevents": "2.1.2", + "html-webpack-plugin": "4.0.0-beta.11", "identity-obj-proxy": "3.0.0", - "is-wsl": "^1.1.0", - "jest": "24.7.1", - "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.7.1", - "jest-watch-typeahead": "0.3.0", - "mini-css-extract-plugin": "0.5.0", - "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.2.1", + "jest": "24.9.0", + "jest-environment-jsdom-fourteen": "1.0.1", + "jest-resolve": "24.9.0", + "jest-watch-typeahead": "0.4.2", + "mini-css-extract-plugin": "0.9.0", + "optimize-css-assets-webpack-plugin": "5.0.3", + "pnp-webpack-plugin": "1.6.0", "postcss-flexbugs-fixes": "4.1.0", "postcss-loader": "3.0.0", - "postcss-normalize": "7.0.1", - "postcss-preset-env": "6.6.0", + "postcss-normalize": "8.0.1", + "postcss-preset-env": "6.7.0", "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.1", - "react-dev-utils": "^9.0.1", - "resolve": "1.10.0", - "sass-loader": "7.1.0", - "semver": "6.0.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.3", - "ts-pnp": "1.1.2", - "url-loader": "1.1.2", - "webpack": "4.29.6", - "webpack-dev-server": "3.2.1", - "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "4.2.0" - }, - "dependencies": { - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" - } + "react-app-polyfill": "^1.0.6", + "react-dev-utils": "^10.1.0", + "resolve": "1.15.0", + "resolve-url-loader": "3.1.1", + "sass-loader": "8.0.2", + "semver": "6.3.0", + "style-loader": "1.1.3", + "terser-webpack-plugin": "2.3.4", + "ts-pnp": "1.1.5", + "url-loader": "2.3.0", + "webpack": "4.41.5", + "webpack-dev-server": "3.10.1", + "webpack-manifest-plugin": "2.2.0", + "workbox-webpack-plugin": "4.3.1" } }, "react-transition-group": { @@ -10918,12 +10791,44 @@ "requires": { "find-up": "^3.0.0", "read-pkg": "^3.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==", + "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==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } } }, "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==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10935,13 +10840,11 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.0.7" } }, "realpath-native": { @@ -10995,18 +10898,24 @@ "safe-regex": "^1.1.0" } }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + }, "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "requires": { - "define-properties": "^1.1.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==" }, "regexpu-core": { "version": "4.6.0", @@ -11022,14 +10931,14 @@ } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", "requires": { "jsesc": "~0.5.0" }, @@ -11079,6 +10988,11 @@ "nth-check": "~1.0.1" } }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -11152,19 +11066,19 @@ } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.15" } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", "requires": { - "request-promise-core": "1.1.2", + "request-promise-core": "1.1.3", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } @@ -11179,20 +11093,15 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", + "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", "requires": { "path-parse": "^1.0.6" } @@ -11220,12 +11129,49 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", "requires": { - "onetime": "^2.0.0", + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -11234,6 +11180,32 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -11283,9 +11255,9 @@ } }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "requires": { "tslib": "^1.9.0" } @@ -11331,76 +11303,44 @@ } } }, + "sanitize.css": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", + "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" + }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" }, "dependencies": { "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" - } - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "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==" - } + "kind-of": "^6.0.2" } } } @@ -11419,22 +11359,21 @@ } }, "scheduler": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.1.tgz", - "integrity": "sha512-MIuie7SgsqMYOdCXVFZa8SKoNorJZUWHW8dPgto7uEHn1lX3fg2Gu0TzgK8USj76uxV7vB5eRMnZs/cdEHg+cg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", + "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" } }, "select-hose": { @@ -11443,17 +11382,17 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", - "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "requires": { - "node-forge": "0.8.2" + "node-forge": "0.9.0" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { "version": "0.17.1", @@ -11503,9 +11442,9 @@ } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" }, "serve-index": { "version": "1.9.1", @@ -11591,19 +11530,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -11652,11 +11578,6 @@ } } }, - "shallow-equal": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.0.tgz", - "integrity": "sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA==" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -11701,9 +11622,9 @@ } }, "sisteransi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", - "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" }, "slash": { "version": "2.0.0", @@ -11718,6 +11639,13 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "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=" + } } }, "snapdragon": { @@ -11815,15 +11743,10 @@ "kind-of": "^6.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" } } }, @@ -11842,16 +11765,6 @@ "requires": { "faye-websocket": "^0.10.0", "uuid": "^3.0.1" - }, - "dependencies": { - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": ">=0.5.1" - } - } } }, "sockjs-client": { @@ -11874,9 +11787,25 @@ "requires": { "ms": "^2.1.1" } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "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=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -11888,11 +11817,11 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "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==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -11900,9 +11829,9 @@ } }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11967,9 +11896,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12008,11 +11937,12 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, "stable": { @@ -12085,9 +12015,14 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "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=" }, "string-length": { "version": "2.0.0", @@ -12096,30 +12031,56 @@ "requires": { "astral-regex": "^1.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=" + }, + "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" + } + } } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", "requires": { "define-properties": "^1.1.3", "function-bind": "^1.1.1" @@ -12144,11 +12105,18 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } } }, "strip-bom": { @@ -12171,17 +12139,17 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz", + "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==", "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.6.4" } }, "stylehacks": { @@ -12215,21 +12183,21 @@ } }, "svg-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", - "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.3.tgz", + "integrity": "sha512-fnCWiifNhK8i2Z7b9R5tbNahpxrRdAaQbnoxKlT2KrSCj9Kq/yBSgulCRgBJRhy1dPnSY5slg5ehPUnzpEcHlg==" }, "svgo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", - "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.33", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -12239,11 +12207,6 @@ "util.promisify": "~1.0.0" } }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -12260,10 +12223,15 @@ "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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=" }, "string-width": { "version": "3.1.0", @@ -12274,14 +12242,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -12291,28 +12251,53 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", + "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" } }, "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==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz", + "integrity": "sha512-Nv96Nws2R2nrFOpbzF6IxRDpIkkIfmhvOws+IqMvYdFLO7o6wAILWFKONFgaYy8+T4LVz77DQW0f7wOeDEAjrg==", "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "cacache": "^13.0.1", + "find-cache-dir": "^3.2.0", + "jest-worker": "^25.1.0", + "p-limit": "^2.2.2", + "schema-utils": "^2.6.4", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^4.4.3", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-worker": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", + "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "test-exclude": { @@ -12331,17 +12316,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "theming": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/theming/-/theming-3.2.0.tgz", - "integrity": "sha512-n0fSNYXkX63rcFBBeAthy14IcgPZLHp0OGkGZheaj64j7cBoP7INLd6+7HIXqWVjFn1M5cYSiZ1nszi+jo/Szg==", - "requires": { - "hoist-non-react-statics": "^3.3.0", - "prop-types": "^15.5.8", - "react-display-name": "^0.2.4", - "tiny-warning": "^1.0.2" - } - }, "throat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", @@ -12362,9 +12336,9 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "timers-browserify": { "version": "2.0.11", @@ -12380,9 +12354,9 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, "tiny-invariant": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", - "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" }, "tiny-warning": { "version": "1.0.3", @@ -12463,9 +12437,9 @@ } }, "ts-pnp": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", - "integrity": "sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz", + "integrity": "sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA==" }, "tslib": { "version": "1.10.0", @@ -12498,6 +12472,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -12506,6 +12485,11 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -12520,21 +12504,10 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" - } - } + "typescript": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", + "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==" }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -12645,11 +12618,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -12693,13 +12661,13 @@ } }, "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" } }, "url-parse": { @@ -12717,17 +12685,17 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "requires": { - "inherits": "2.0.3" + "inherits": "2.0.1" }, "dependencies": { "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" } } }, @@ -12737,12 +12705,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "utila": { @@ -12756,9 +12726,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -12780,9 +12755,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, "verror": { "version": "1.10.0", @@ -12795,9 +12770,9 @@ } }, "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "w3c-hr-time": { "version": "1.0.1", @@ -12833,6 +12808,564 @@ "chokidar": "^2.0.2", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" + }, + "dependencies": { + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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.1" + } + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "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.6", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "optional": true, + "requires": { + "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.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "optional": true, + "requires": { + "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" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "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=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "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=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } } }, "wbuf": { @@ -12849,34 +13382,172 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.29.6", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.6.tgz", - "integrity": "sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==", + "version": "4.41.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", + "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", "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", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "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", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "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.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "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==", + "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==", + "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==", + "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==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "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==", + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + } } }, "webpack-dev-middleware": { @@ -12892,40 +13563,43 @@ } }, "webpack-dev-server": { - "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==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", + "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "^0.19.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", - "internal-ip": "^4.2.0", + "internal-ip": "^4.3.0", "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.6", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.5.1", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", - "yargs": "12.0.2" + "ws": "^6.2.1", + "yargs": "12.0.5" }, "dependencies": { "ansi-regex": { @@ -12933,10 +13607,29 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "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.1" + } }, "cliui": { "version": "4.1.0", @@ -12963,12 +13656,502 @@ } } }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "xregexp": "4.0.0" + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "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.6", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "optional": true, + "requires": { + "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.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "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, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "optional": true, + "requires": { + "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" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "optional": true + } } }, "get-caller-file": { @@ -12976,12 +14159,78 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, - "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=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "number-is-nan": "^1.0.0" + "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=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "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=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "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=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "require-main-filename": { @@ -12989,25 +14238,36 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, - "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "requires": { - "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" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ms": "^2.1.1" + "ansi-regex": "^3.0.0" } } } @@ -13037,6 +14297,14 @@ "strip-ansi": "^3.0.1" }, "dependencies": { + "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.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -13049,13 +14317,21 @@ } } }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "requires": { "cliui": "^4.0.0", - "decamelize": "^2.0.0", + "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^3.0.0", @@ -13065,15 +14341,16 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -13088,13 +14365,26 @@ } }, "webpack-manifest-plugin": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", - "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", + "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", "requires": { "fs-extra": "^7.0.0", "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", "tapable": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "webpack-sources": { @@ -13162,10 +14452,10 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "workbox-background-sync": { "version": "4.3.1", @@ -13311,13 +14601,13 @@ "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" }, "workbox-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-YZsiA+y/ns/GdWRaBsfYv8dln1ebWtGnJcTOg1ppO0pO1tScAHX0yGtHIjndxz3L/UUhE8b0NQE9KeLNwJwA5A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", "requires": { "@babel/runtime": "^7.0.0", "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.2.0" + "workbox-build": "^4.3.1" } }, "workbox-window": { @@ -13354,10 +14644,15 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "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=" }, "string-width": { "version": "3.1.0", @@ -13368,14 +14663,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -13420,11 +14707,6 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -13436,9 +14718,17 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", + "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "requires": { + "@babel/runtime": "^7.6.3" + } }, "yargs": { "version": "13.3.0", @@ -13457,10 +14747,45 @@ "yargs-parser": "^13.1.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "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=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "string-width": { "version": "3.1.0", @@ -13471,14 +14796,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, diff --git a/interface/package.json b/interface/package.json index 68bdbf0..99a8416 100644 --- a/interface/package.json +++ b/interface/package.json @@ -3,37 +3,51 @@ "version": "0.1.0", "private": true, "dependencies": { - "@material-ui/core": "^4.7.0", - "@material-ui/icons": "^4.5.1", - "compression-webpack-plugin": "^2.0.0", + "@material-ui/core": "^4.9.1", + "@material-ui/icons": "^4.9.1", + "@types/jwt-decode": "^2.2.1", + "@types/node": "^12.12.22", + "@types/react": "^16.9.17", + "@types/react-dom": "^16.9.4", + "@types/react-material-ui-form-validator": "^2.0.5", + "@types/react-router": "^5.1.3", + "@types/react-router-dom": "^5.1.3", + "compression-webpack-plugin": "^3.0.1", "jwt-decode": "^2.2.0", "mime-types": "^2.1.25", "moment": "^2.24.0", - "notistack": "^0.9.6", - "prop-types": "^15.7.2", - "react": "^16.10.1", - "react-dom": "^16.10.1", + "notistack": "^0.9.7", + "react": "^16.12.0", + "react-dom": "^16.12.0", "react-form-validator-core": "^0.6.4", - "react-jss": "^10.0.0", - "react-material-ui-form-validator": "^2.0.9", - "react-router": "^5.1.1", - "react-router-dom": "^5.1.1", - "react-scripts": "3.0.1", + "react-material-ui-form-validator": "^2.0.10", + "react-router": "^5.1.2", + "react-router-dom": "^5.1.2", + "react-scripts": "3.3.1", + "typescript": "^3.7.5", "zlib": "^1.0.5" }, "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", - "test": "react-app-rewired test --env=jsdom", "eject": "react-scripts eject" }, - "devDependencies": { - "react-app-rewired": "^2.1.3" + "eslintConfig": { + "extends": "react-app" }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ] + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "react-app-rewired": "^2.1.5" + } } diff --git a/interface/src/App.js b/interface/src/App.js deleted file mode 100644 index 06e9a65..0000000 --- a/interface/src/App.js +++ /dev/null @@ -1,69 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Route, Switch } from 'react-router'; - -import AppRouting from './AppRouting'; -import { PROJECT_NAME } from './constants/Env'; - -import { SnackbarProvider } from 'notistack'; -import { create } from 'jss'; - -import { CssBaseline, IconButton, MuiThemeProvider, createMuiTheme } from '@material-ui/core'; -import { StylesProvider, jssPreset } from '@material-ui/styles'; -import { blueGrey, indigo, orange, red, green } from '@material-ui/core/colors'; -import CloseIcon from '@material-ui/icons/Close'; - - -// Our theme -const theme = createMuiTheme({ - palette: { - primary: indigo, - secondary: blueGrey, - highlight_idle: blueGrey[900], - highlight_warn: orange[500], - highlight_error: red[500], - highlight_success: green[500], - }, -}); - -// JSS instance -const jss = create(jssPreset()); - -// this redirect forces a call to authenticationContext.refresh() which invalidates the JWT if it is invalid. -const unauthorizedRedirect = () => ; - -class App extends Component { - - notistackRef = React.createRef(); - - componentDidMount() { - document.title = PROJECT_NAME; - } - - onClickDismiss = (key) => () => { - this.notistackRef.current.closeSnackbar(key); - } - - render() { - return ( - - - ( - - - - )}> - - - - - - - - - ); - } -} - -export default App diff --git a/interface/src/App.tsx b/interface/src/App.tsx new file mode 100644 index 0000000..97004b1 --- /dev/null +++ b/interface/src/App.tsx @@ -0,0 +1,47 @@ +import React, { Component, RefObject } from 'react'; +import { Redirect, Route, Switch } from 'react-router'; +import { SnackbarProvider } from 'notistack'; + +import { IconButton } from '@material-ui/core'; +import CloseIcon from '@material-ui/icons/Close'; + +import AppRouting from './AppRouting'; +import CustomMuiTheme from './CustomMuiTheme'; +import { PROJECT_NAME } from './api'; + +// this redirect forces a call to authenticationContext.refresh() which invalidates the JWT if it is invalid. +const unauthorizedRedirect = () => ; + +class App extends Component { + + notistackRef: RefObject = React.createRef(); + + componentDidMount() { + document.title = PROJECT_NAME; + } + + onClickDismiss = (key: string | number | undefined) => () => { + this.notistackRef.current.closeSnackbar(key); + } + + render() { + return ( + + ( + + + + )}> + + + + + + + ); + } +} + +export default App diff --git a/interface/src/AppRouting.js b/interface/src/AppRouting.tsx similarity index 71% rename from interface/src/AppRouting.js rename to interface/src/AppRouting.tsx index 2a85b10..d60ede5 100644 --- a/interface/src/AppRouting.js +++ b/interface/src/AppRouting.tsx @@ -1,23 +1,24 @@ import React, { Component } from 'react'; +import { Switch, Redirect } from 'react-router'; -import { Redirect, Switch } from 'react-router'; - -import { PROJECT_PATH } from './constants/Env'; import * as Authentication from './authentication/Authentication'; import AuthenticationWrapper from './authentication/AuthenticationWrapper'; -import AuthenticatedRoute from './authentication/AuthenticatedRoute'; import UnauthenticatedRoute from './authentication/UnauthenticatedRoute'; -import SignInPage from './containers/SignInPage'; -import WiFiConnection from './sections/WiFiConnection'; -import AccessPoint from './sections/AccessPoint'; -import NetworkTime from './sections/NetworkTime'; -import Security from './sections/Security'; -import System from './sections/System'; +import AuthenticatedRoute from './authentication/AuthenticatedRoute'; + +import SignIn from './SignIn'; import ProjectRouting from './project/ProjectRouting'; +import WiFiConnection from './wifi/WiFiConnection'; +import AccessPoint from './ap/AccessPoint'; +import NetworkTime from './ntp/NetworkTime'; +import Security from './security/Security'; +import System from './system/System'; + +import { PROJECT_PATH } from './api'; class AppRouting extends Component { - componentWillMount() { + componentDidMount() { Authentication.clearLoginRedirect(); } @@ -25,13 +26,13 @@ class AppRouting extends Component { return ( - - + + + - - - + + diff --git a/interface/src/CustomMuiTheme.tsx b/interface/src/CustomMuiTheme.tsx new file mode 100644 index 0000000..570ed7f --- /dev/null +++ b/interface/src/CustomMuiTheme.tsx @@ -0,0 +1,39 @@ +import React, { Component } from 'react'; + +import { CssBaseline } from '@material-ui/core'; +import { MuiThemeProvider, createMuiTheme, StylesProvider } from '@material-ui/core/styles'; +import { blueGrey, indigo, orange, red, green } from '@material-ui/core/colors'; + +const theme = createMuiTheme({ + palette: { + primary: indigo, + secondary: blueGrey, + info: { + main: blueGrey[900] + }, + warning: { + main: orange[500] + }, + error: { + main: red[500] + }, + success: { + main: green[500] + } + }, +}); + +export default class CustomMuiTheme extends Component { + + render() { + return ( + + + + {this.props.children} + + + ); + } + +} diff --git a/interface/src/containers/SignInPage.js b/interface/src/SignIn.tsx similarity index 55% rename from interface/src/containers/SignInPage.js rename to interface/src/SignIn.tsx index 4e57ff2..ebe66da 100644 --- a/interface/src/containers/SignInPage.js +++ b/interface/src/SignIn.tsx @@ -1,54 +1,55 @@ import React, { Component } from 'react'; -import { withStyles } from '@material-ui/core/styles'; +import { withSnackbar, WithSnackbarProps } from 'notistack'; import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; -import Paper from '@material-ui/core/Paper'; -import Typography from '@material-ui/core/Typography'; -import Fab from '@material-ui/core/Fab'; -import { PROJECT_NAME } from '../constants/Env'; -import ForwardIcon from '@material-ui/icons/Forward'; -import { withSnackbar } from 'notistack'; -import { SIGN_IN_ENDPOINT } from '../constants/Endpoints'; -import { withAuthenticationContext } from '../authentication/Context'; -import PasswordValidator from '../components/PasswordValidator'; -const styles = theme => { - return { - loginPage: { - display: "flex", - height: "100vh", - margin: "auto", - padding: theme.spacing(2), - justifyContent: "center", - flexDirection: "column", - maxWidth: theme.breakpoints.values.sm - }, - loginPanel: { - textAlign: "center", - padding: theme.spacing(2), - paddingTop: "200px", - backgroundImage: 'url("/app/icon.png")', - backgroundRepeat: "no-repeat", - backgroundPosition: "50% " + theme.spacing(2) + "px", - backgroundSize: "auto 150px", - width: "100%" - }, - extendedIcon: { - marginRight: theme.spacing(0.5), - }, - textField: { - width: "100%" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } +import { withStyles, createStyles, Theme, WithStyles } from '@material-ui/core/styles'; +import { Paper, Typography, Fab } from '@material-ui/core'; +import ForwardIcon from '@material-ui/icons/Forward'; + +import { withAuthenticationContext, AuthenticationContextProps } from './authentication/AuthenticationContext'; +import {PasswordValidator} from './components'; +import { PROJECT_NAME, SIGN_IN_ENDPOINT } from './api'; + +const styles = (theme: Theme) => createStyles({ + loginPage: { + display: "flex", + height: "100vh", + margin: "auto", + padding: theme.spacing(2), + justifyContent: "center", + flexDirection: "column", + maxWidth: theme.breakpoints.values.sm + }, + loginPanel: { + textAlign: "center", + padding: theme.spacing(2), + paddingTop: "200px", + backgroundImage: 'url("/app/icon.png")', + backgroundRepeat: "no-repeat", + backgroundPosition: "50% " + theme.spacing(2) + "px", + backgroundSize: "auto 150px", + width: "100%" + }, + extendedIcon: { + marginRight: theme.spacing(0.5), + }, + button: { + marginRight: theme.spacing(2), + marginTop: theme.spacing(2), } +}); + +type SignInPageProps = WithSnackbarProps & WithStyles & AuthenticationContextProps; + +interface SignInPageState { + username: string, + password: string, + processing: boolean } +class SignInPage extends Component { -class SignInPage extends Component { - - constructor(props) { + constructor(props: SignInPageProps) { super(props); this.state = { username: '', @@ -57,8 +58,12 @@ class SignInPage extends Component { }; } - handleValueChange = name => event => { - this.setState({ [name]: event.target.value }); + updateInputElement = (event: React.ChangeEvent): void => { + const { name, value } = event.currentTarget; + this.setState(prevState => ({ + ...prevState, + [name]: value, + })) }; onSubmit = () => { @@ -105,9 +110,10 @@ class SignInPage extends Component { errorMessages={['Username is required']} name="username" label="Username" - className={classes.textField} + fullWidth + variant="outlined" value={username} - onChange={this.handleValueChange('username')} + onChange={this.updateInputElement} margin="normal" /> @@ -133,6 +140,4 @@ class SignInPage extends Component { } -export default withAuthenticationContext( - withSnackbar(withStyles(styles)(SignInPage)) -); +export default withAuthenticationContext(withSnackbar(withStyles(styles)(SignInPage))); diff --git a/interface/src/ap/APModes.ts b/interface/src/ap/APModes.ts new file mode 100644 index 0000000..87c70fe --- /dev/null +++ b/interface/src/ap/APModes.ts @@ -0,0 +1,7 @@ +import { APSettings } from "./types"; + +export const AP_MODE_ALWAYS = 0; +export const AP_MODE_DISCONNECTED = 1; +export const AP_NEVER = 2; + +export const isAPEnabled = ({ provision_mode }: APSettings) => provision_mode === AP_MODE_ALWAYS || provision_mode === AP_MODE_DISCONNECTED; diff --git a/interface/src/ap/APSettingsController.tsx b/interface/src/ap/APSettingsController.tsx new file mode 100644 index 0000000..3284b4a --- /dev/null +++ b/interface/src/ap/APSettingsController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import { AP_SETTINGS_ENDPOINT } from '../api'; +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; + +import APSettingsForm from './APSettingsForm'; +import { APSettings } from './types'; + +type APSettingsControllerProps = RestControllerProps; + +class APSettingsController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ) + } + +} + +export default restController(AP_SETTINGS_ENDPOINT, APSettingsController); diff --git a/interface/src/ap/APSettingsForm.tsx b/interface/src/ap/APSettingsForm.tsx new file mode 100644 index 0000000..10695a3 --- /dev/null +++ b/interface/src/ap/APSettingsForm.tsx @@ -0,0 +1,71 @@ +import React, { Fragment } from 'react'; +import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator'; + +import MenuItem from '@material-ui/core/MenuItem'; +import SaveIcon from '@material-ui/icons/Save'; + +import {PasswordValidator, RestFormProps, FormActions, FormButton} from '../components'; + +import { isAPEnabled, AP_MODE_ALWAYS, AP_MODE_DISCONNECTED, AP_NEVER } from './APModes'; +import { APSettings } from './types'; + +type APSettingsFormProps = RestFormProps; + +class APSettingsForm extends React.Component { + + render() { + const { data, handleValueChange, saveData, loadData } = this.props; + return ( + + + Always + When WiFi Disconnected + Never + + { + isAPEnabled(data) && + + + + + } + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); + } +} + +export default APSettingsForm; diff --git a/interface/src/ap/APStatus.ts b/interface/src/ap/APStatus.ts new file mode 100644 index 0000000..8fc369d --- /dev/null +++ b/interface/src/ap/APStatus.ts @@ -0,0 +1,10 @@ +import { Theme } from "@material-ui/core"; +import { APStatus } from "./types"; + +export const apStatusHighlight = ({ active }: APStatus, theme: Theme) => { + return active ? theme.palette.success.main : theme.palette.info.main; +} + +export const apStatus = ({ active }: APStatus) => { + return active ? "Active" : "Inactive"; +}; diff --git a/interface/src/ap/APStatusController.tsx b/interface/src/ap/APStatusController.tsx new file mode 100644 index 0000000..e406bca --- /dev/null +++ b/interface/src/ap/APStatusController.tsx @@ -0,0 +1,29 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { AP_STATUS_ENDPOINT } from '../api'; + +import APStatusForm from './APStatusForm'; +import { APStatus } from './types'; + +type APStatusControllerProps = RestControllerProps; + +class APStatusController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ) + } +} + +export default restController(AP_STATUS_ENDPOINT, APStatusController); diff --git a/interface/src/ap/APStatusForm.tsx b/interface/src/ap/APStatusForm.tsx new file mode 100644 index 0000000..88c2135 --- /dev/null +++ b/interface/src/ap/APStatusForm.tsx @@ -0,0 +1,78 @@ +import React, { Component, Fragment } from 'react'; + +import { WithTheme, withTheme } from '@material-ui/core/styles'; +import { Avatar, Divider, List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'; + +import SettingsInputAntennaIcon from '@material-ui/icons/SettingsInputAntenna'; +import DeviceHubIcon from '@material-ui/icons/DeviceHub'; +import ComputerIcon from '@material-ui/icons/Computer'; +import RefreshIcon from '@material-ui/icons/Refresh'; + +import { RestFormProps, FormActions, FormButton, HighlightAvatar } from '../components'; +import { apStatusHighlight, apStatus } from './APStatus'; +import { APStatus } from './types'; + +type APStatusFormProps = RestFormProps & WithTheme; + +class APStatusForm extends Component { + + createListItems() { + const { data, theme } = this.props + return ( + + + + + + + + + + + + + IP + + + + + + + + + + + + + + + + + + + + + + + + ); + } + + render() { + return ( + + + {this.createListItems()} + + + } variant="contained" color="secondary" onClick={this.props.loadData}> + Refresh + + + + ); + } + +} + +export default withTheme(APStatusForm); diff --git a/interface/src/ap/AccessPoint.tsx b/interface/src/ap/AccessPoint.tsx new file mode 100644 index 0000000..089d30b --- /dev/null +++ b/interface/src/ap/AccessPoint.tsx @@ -0,0 +1,38 @@ +import React, { Component } from 'react'; +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { AuthenticatedContextProps, withAuthenticatedContext, AuthenticatedRoute } from '../authentication'; +import { MenuAppBar } from '../components'; + +import APSettingsController from './APSettingsController'; +import APStatusController from './APStatusController'; + +type AccessPointProps = AuthenticatedContextProps & RouteComponentProps; + +class AccessPoint extends Component { + + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { + this.props.history.push(path); + }; + + render() { + const { authenticatedContext } = this.props; + return ( + + + + + + + + + + + + ) + } +} + +export default withAuthenticatedContext(AccessPoint); diff --git a/interface/src/ap/types.ts b/interface/src/ap/types.ts new file mode 100644 index 0000000..649f139 --- /dev/null +++ b/interface/src/ap/types.ts @@ -0,0 +1,12 @@ +export interface APStatus { + active: boolean; + ip_address: string; + mac_address: string; + station_num: number; +} + +export interface APSettings { + provision_mode: number; + ssid: string; + password: string; +} diff --git a/interface/src/constants/Endpoints.js b/interface/src/api/Endpoints.ts similarity index 95% rename from interface/src/constants/Endpoints.js rename to interface/src/api/Endpoints.ts index 2fc772d..d158450 100644 --- a/interface/src/constants/Endpoints.js +++ b/interface/src/api/Endpoints.ts @@ -1,4 +1,4 @@ -import { ENDPOINT_ROOT } from '../constants/Env'; +import { ENDPOINT_ROOT } from './Env'; export const NTP_STATUS_ENDPOINT = ENDPOINT_ROOT + "ntpStatus"; export const NTP_SETTINGS_ENDPOINT = ENDPOINT_ROOT + "ntpSettings"; diff --git a/interface/src/api/Env.ts b/interface/src/api/Env.ts new file mode 100644 index 0000000..5809187 --- /dev/null +++ b/interface/src/api/Env.ts @@ -0,0 +1,3 @@ +export const PROJECT_NAME = process.env.REACT_APP_PROJECT_NAME!; +export const PROJECT_PATH = process.env.REACT_APP_PROJECT_PATH!; +export const ENDPOINT_ROOT = process.env.REACT_APP_ENDPOINT_ROOT!; diff --git a/interface/src/api/index.ts b/interface/src/api/index.ts new file mode 100644 index 0000000..8ec5797 --- /dev/null +++ b/interface/src/api/index.ts @@ -0,0 +1,2 @@ +export * from './Env' +export * from './Endpoints' diff --git a/interface/src/authentication/AuthenticatedRoute.js b/interface/src/authentication/AuthenticatedRoute.js deleted file mode 100644 index 14811f3..0000000 --- a/interface/src/authentication/AuthenticatedRoute.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { - Redirect, Route -} from "react-router-dom"; - -import { withAuthenticationContext } from './Context.js'; -import * as Authentication from './Authentication'; -import { withSnackbar } from 'notistack'; - -export class AuthenticatedRoute extends React.Component { - - render() { - const { enqueueSnackbar, authenticationContext, component: Component, ...rest } = this.props; - const { location } = this.props; - const renderComponent = (props) => { - if (authenticationContext.isAuthenticated()) { - return ( - - ); - } - Authentication.storeLoginRedirect(location); - enqueueSnackbar("Please log in to continue.", { - variant: 'info', - }); - return ( - - ); - } - return ( - - ); - } - -} - -export default withSnackbar(withAuthenticationContext(AuthenticatedRoute)); diff --git a/interface/src/authentication/AuthenticatedRoute.tsx b/interface/src/authentication/AuthenticatedRoute.tsx new file mode 100644 index 0000000..466710c --- /dev/null +++ b/interface/src/authentication/AuthenticatedRoute.tsx @@ -0,0 +1,42 @@ +import * as React from 'react'; +import { Redirect, Route, RouteProps, RouteComponentProps } from "react-router-dom"; +import { withSnackbar, WithSnackbarProps } from 'notistack'; + +import * as Authentication from './Authentication'; +import { withAuthenticationContext, AuthenticationContextProps, AuthenticatedContext } from './AuthenticationContext'; + +type ChildComponent = React.ComponentType> | React.ComponentType; + +interface AuthenticatedRouteProps extends RouteProps, WithSnackbarProps, AuthenticationContextProps { + component: ChildComponent; +} + +type RenderComponent = (props: RouteComponentProps) => React.ReactNode; + +export class AuthenticatedRoute extends React.Component { + + render() { + const { enqueueSnackbar, authenticationContext, component: Component, ...rest } = this.props; + const { location } = this.props; + const renderComponent: RenderComponent = (props) => { + if (authenticationContext.me) { + return ( + + + + ); + } + Authentication.storeLoginRedirect(location); + enqueueSnackbar("Please log in to continue.", { variant: 'info' }); + return ( + + ); + } + return ( + + ); + } + +} + +export default withSnackbar(withAuthenticationContext(AuthenticatedRoute)); diff --git a/interface/src/authentication/Authentication.js b/interface/src/authentication/Authentication.ts similarity index 68% rename from interface/src/authentication/Authentication.js rename to interface/src/authentication/Authentication.ts index 4d4d5d1..d1cf817 100644 --- a/interface/src/authentication/Authentication.js +++ b/interface/src/authentication/Authentication.ts @@ -1,11 +1,13 @@ +import * as H from 'history'; + import history from '../history'; -import { PROJECT_PATH } from '../constants/Env'; +import { PROJECT_PATH } from '../api'; export const ACCESS_TOKEN = 'access_token'; export const LOGIN_PATHNAME = 'loginPathname'; export const LOGIN_SEARCH = 'loginSearch'; -export function storeLoginRedirect(location) { +export function storeLoginRedirect(location?: H.Location) { if (location) { localStorage.setItem(LOGIN_PATHNAME, location.pathname); localStorage.setItem(LOGIN_SEARCH, location.search); @@ -17,7 +19,7 @@ export function clearLoginRedirect() { localStorage.removeItem(LOGIN_SEARCH); } -export function fetchLoginRedirect() { +export function fetchLoginRedirect(): H.LocationDescriptorObject { const loginPathname = localStorage.getItem(LOGIN_PATHNAME); const loginSearch = localStorage.getItem(LOGIN_SEARCH); clearLoginRedirect(); @@ -30,13 +32,15 @@ export function fetchLoginRedirect() { /** * Wraps the normal fetch routene with one with provides the access token if present. */ -export function authorizedFetch(url, params) { +export function authorizedFetch(url: RequestInfo, params?: RequestInit): Promise { const accessToken = localStorage.getItem(ACCESS_TOKEN); if (accessToken) { params = params || {}; params.credentials = 'include'; - params.headers = params.headers || {}; - params.headers.Authorization = 'Bearer ' + accessToken; + params.headers = { + ...params.headers, + "Authorization": 'Bearer ' + accessToken + }; } return fetch(url, params); } @@ -44,11 +48,11 @@ export function authorizedFetch(url, params) { /** * Wraps the normal fetch routene which redirects on 401 response. */ -export function redirectingAuthorizedFetch(url, params) { - return new Promise(function (resolve, reject) { +export function redirectingAuthorizedFetch(url: RequestInfo, params?: RequestInit): Promise { + return new Promise((resolve, reject) => { authorizedFetch(url, params).then(response => { if (response.status === 401) { - history.push("/unauthorized"); + history.push("/unauthorized"); } else { resolve(response); } diff --git a/interface/src/authentication/AuthenticationContext.tsx b/interface/src/authentication/AuthenticationContext.tsx new file mode 100644 index 0000000..aaf22ba --- /dev/null +++ b/interface/src/authentication/AuthenticationContext.tsx @@ -0,0 +1,59 @@ +import * as React from "react"; + +export interface Me { + username: string; + admin: boolean; +} + +export interface AuthenticationContext { + refresh: () => void; + signIn: (accessToken: string) => void; + signOut: () => void; + me?: Me; +} + +const AuthenticationContextDefaultValue = {} as AuthenticationContext +export const AuthenticationContext = React.createContext( + AuthenticationContextDefaultValue +); + +export interface AuthenticationContextProps { + authenticationContext: AuthenticationContext; +} + +export function withAuthenticationContext(Component: React.ComponentType) { + return class extends React.Component> { + render() { + return ( + + {authenticationContext => } + + ); + } + }; +} + +export interface AuthenticatedContext extends AuthenticationContext { + me: Me; +} + +const AuthenticatedContextDefaultValue = {} as AuthenticatedContext +export const AuthenticatedContext = React.createContext( + AuthenticatedContextDefaultValue +); + +export interface AuthenticatedContextProps { + authenticatedContext: AuthenticatedContext; +} + +export function withAuthenticatedContext(Component: React.ComponentType) { + return class extends React.Component> { + render() { + return ( + + {authenticatedContext => } + + ); + } + }; +} diff --git a/interface/src/authentication/AuthenticationWrapper.js b/interface/src/authentication/AuthenticationWrapper.tsx similarity index 64% rename from interface/src/authentication/AuthenticationWrapper.js rename to interface/src/authentication/AuthenticationWrapper.tsx index be43633..a73eaa9 100644 --- a/interface/src/authentication/AuthenticationWrapper.js +++ b/interface/src/authentication/AuthenticationWrapper.tsx @@ -1,15 +1,19 @@ import * as React from 'react'; -import history from '../history' -import { withSnackbar } from 'notistack'; -import { VERIFY_AUTHORIZATION_ENDPOINT } from '../constants/Endpoints'; -import { ACCESS_TOKEN, authorizedFetch } from './Authentication'; -import { AuthenticationContext } from './Context'; +import { withSnackbar, WithSnackbarProps } from 'notistack'; import jwtDecode from 'jwt-decode'; + import CircularProgress from '@material-ui/core/CircularProgress'; import Typography from '@material-ui/core/Typography'; -import { withStyles } from '@material-ui/core/styles'; +import { withStyles, Theme, createStyles, WithStyles } from '@material-ui/core/styles'; -const styles = theme => ({ +import history from '../history' +import { VERIFY_AUTHORIZATION_ENDPOINT } from '../api'; +import { ACCESS_TOKEN, authorizedFetch } from './Authentication'; +import { AuthenticationContext, Me } from './AuthenticationContext'; + +export const decodeMeJWT = (accessToken: string): Me => jwtDecode(accessToken); + +const styles = (theme: Theme) => createStyles({ loadingPanel: { padding: theme.spacing(2), display: "flex", @@ -23,17 +27,22 @@ const styles = theme => ({ } }); -class AuthenticationWrapper extends React.Component { +interface AuthenticationWrapperState { + context: AuthenticationContext; + initialized: boolean; +} - constructor(props) { +type AuthenticationWrapperProps = WithSnackbarProps & WithStyles; + +class AuthenticationWrapper extends React.Component { + + constructor(props: AuthenticationWrapperProps) { super(props); this.state = { context: { refresh: this.refresh, signIn: this.signIn, signOut: this.signOut, - isAuthenticated: this.isAuthenticated, - isAdmin: this.isAdmin }, initialized: false }; @@ -72,33 +81,31 @@ class AuthenticationWrapper extends React.Component { } refresh = () => { - var accessToken = localStorage.getItem(ACCESS_TOKEN); + const accessToken = localStorage.getItem(ACCESS_TOKEN) if (accessToken) { authorizedFetch(VERIFY_AUTHORIZATION_ENDPOINT) .then(response => { - const user = response.status === 200 ? jwtDecode(accessToken) : undefined; - this.setState({ initialized: true, context: { ...this.state.context, user } }); + const me = response.status === 200 ? decodeMeJWT(accessToken) : undefined; + this.setState({ initialized: true, context: { ...this.state.context, me } }); }).catch(error => { - this.setState({ initialized: true, context: { ...this.state.context, user: undefined } }); + this.setState({ initialized: true, context: { ...this.state.context, me: undefined } }); this.props.enqueueSnackbar("Error verifying authorization: " + error.message, { variant: 'error', }); }); } else { - this.setState({ initialized: true, context: { ...this.state.context, user: undefined } }); + this.setState({ initialized: true, context: { ...this.state.context, me: undefined } }); } } - signIn = (accessToken) => { + signIn = (accessToken: string) => { try { localStorage.setItem(ACCESS_TOKEN, accessToken); - const user = jwtDecode(accessToken); - this.setState({ context: { ...this.state.context, user } }); - this.props.enqueueSnackbar(`Logged in as ${user.username}`, { - variant: 'success', - }); + const me: Me = decodeMeJWT(accessToken); + this.setState({ context: { ...this.state.context, me } }); + this.props.enqueueSnackbar(`Logged in as ${me.username}`, { variant: 'success' }); } catch (err) { - this.setState({ initialized: true, context: { ...this.state.context, user: undefined } }); + this.setState({ initialized: true, context: { ...this.state.context, me: undefined } }); throw new Error("Failed to parse JWT " + err.message); } } @@ -108,24 +115,13 @@ class AuthenticationWrapper extends React.Component { this.setState({ context: { ...this.state.context, - user: undefined + me: undefined } }); - this.props.enqueueSnackbar("You have signed out.", { - variant: 'success', - }); + this.props.enqueueSnackbar("You have signed out.", { variant: 'success', }); history.push('/'); } - isAuthenticated = () => { - return this.state.context.user; - } - - isAdmin = () => { - const { context } = this.state; - return context.user && context.user.admin; - } - } export default withStyles(styles)(withSnackbar(AuthenticationWrapper)) diff --git a/interface/src/authentication/Context.js b/interface/src/authentication/Context.js deleted file mode 100644 index 571e0ce..0000000 --- a/interface/src/authentication/Context.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from "react"; - -export const AuthenticationContext = React.createContext( - {} -); - -export function withAuthenticationContext(Component) { - return function AuthenticationContextComponent(props) { - return ( - - {authenticationContext => } - - ); - }; -} diff --git a/interface/src/authentication/UnauthenticatedRoute.js b/interface/src/authentication/UnauthenticatedRoute.js deleted file mode 100644 index 321cdd2..0000000 --- a/interface/src/authentication/UnauthenticatedRoute.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from 'react'; -import { - Redirect, Route -} from "react-router-dom"; - -import { withAuthenticationContext } from './Context.js'; -import * as Authentication from './Authentication'; - -class UnauthenticatedRoute extends React.Component { - render() { - const { authenticationContext, component:Component, ...rest } = this.props; - const renderComponent = (props) => { - if (authenticationContext.isAuthenticated()) { - return (); - } - return (); - } - return ( - - ); - } -} - -export default withAuthenticationContext(UnauthenticatedRoute); diff --git a/interface/src/authentication/UnauthenticatedRoute.tsx b/interface/src/authentication/UnauthenticatedRoute.tsx new file mode 100644 index 0000000..8ea48ee --- /dev/null +++ b/interface/src/authentication/UnauthenticatedRoute.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import { Redirect, Route, RouteProps, RouteComponentProps } from "react-router-dom"; + +import { withAuthenticationContext, AuthenticationContextProps } from './AuthenticationContext'; +import * as Authentication from './Authentication'; + +interface UnauthenticatedRouteProps extends RouteProps { + component: React.ComponentType> | React.ComponentType; +} + +type RenderComponent = (props: RouteComponentProps) => React.ReactNode; + +class UnauthenticatedRoute extends Route { + public render() { + const { authenticationContext, component:Component, ...rest } = this.props; + const renderComponent: RenderComponent = (props) => { + if (authenticationContext.me) { + return (); + } + return (); + } + return ( + + ); + } +} + +export default withAuthenticationContext(UnauthenticatedRoute); diff --git a/interface/src/authentication/index.ts b/interface/src/authentication/index.ts new file mode 100644 index 0000000..fa528ff --- /dev/null +++ b/interface/src/authentication/index.ts @@ -0,0 +1,6 @@ +export { default as AuthenticatedRoute } from './AuthenticatedRoute'; +export { default as AuthenticationWrapper } from './AuthenticationWrapper'; +export { default as UnauthenticatedRoute } from './UnauthenticatedRoute'; + +export * from './Authentication'; +export * from './AuthenticationContext'; \ No newline at end of file diff --git a/interface/src/components/BlockFormControlLabel.tsx b/interface/src/components/BlockFormControlLabel.tsx new file mode 100644 index 0000000..2ea2eba --- /dev/null +++ b/interface/src/components/BlockFormControlLabel.tsx @@ -0,0 +1,10 @@ +import React, { FC } from "react"; +import { FormControlLabel, FormControlLabelProps } from "@material-ui/core"; + +const BlockFormControlLabel: FC = (props) => ( +
+ +
+) + +export default BlockFormControlLabel; diff --git a/interface/src/components/FormActions.tsx b/interface/src/components/FormActions.tsx new file mode 100644 index 0000000..8c6eb73 --- /dev/null +++ b/interface/src/components/FormActions.tsx @@ -0,0 +1,7 @@ +import { styled, Box } from "@material-ui/core"; + +const FormActions = styled(Box)(({ theme }) => ({ + marginTop: theme.spacing(1) +})); + +export default FormActions; diff --git a/interface/src/components/FormButton.tsx b/interface/src/components/FormButton.tsx new file mode 100644 index 0000000..f14ef06 --- /dev/null +++ b/interface/src/components/FormButton.tsx @@ -0,0 +1,13 @@ +import { Button, styled } from "@material-ui/core"; + +const FormButton = styled(Button)(({ theme }) => ({ + margin: theme.spacing(0, 1), + '&:last-child': { + marginRight: 0, + }, + '&:first-child': { + marginLeft: 0, + } +})); + +export default FormButton; diff --git a/interface/src/components/HighlightAvatar.tsx b/interface/src/components/HighlightAvatar.tsx new file mode 100644 index 0000000..f7ce8c7 --- /dev/null +++ b/interface/src/components/HighlightAvatar.tsx @@ -0,0 +1,23 @@ +import { Avatar, makeStyles } from "@material-ui/core"; +import React, { FC } from "react"; + +interface HighlightAvatarProps { + color: string; +} + +const useStyles = makeStyles({ + root: (props: HighlightAvatarProps) => ({ + backgroundColor: props.color + }) +}); + +const HighlightAvatar: FC = (props) => { + const classes = useStyles(props); + return ( + + {props.children} + + ); +} + +export default HighlightAvatar; diff --git a/interface/src/components/LoadingNotification.js b/interface/src/components/LoadingNotification.js deleted file mode 100644 index 1071385..0000000 --- a/interface/src/components/LoadingNotification.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { makeStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import LinearProgress from '@material-ui/core/LinearProgress'; -import Typography from '@material-ui/core/Typography'; - -const useStyles = makeStyles(theme => ({ - loadingSettings: { - margin: theme.spacing(0.5), - }, - loadingSettingsDetails: { - margin: theme.spacing(4), - textAlign: "center" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -})); - -export default function LoadingNotification(props) { - const classes = useStyles(); - const { fetched, errorMessage, onReset, render } = props; - return ( -
- { - fetched ? - errorMessage ? -
- - {errorMessage} - - -
- : - render() - : -
- - - Loading... - -
- } -
- ); -} - -LoadingNotification.propTypes = { - fetched: PropTypes.bool.isRequired, - onReset: PropTypes.func.isRequired, - errorMessage: PropTypes.string, - render: PropTypes.func.isRequired -}; diff --git a/interface/src/components/MenuAppBar.js b/interface/src/components/MenuAppBar.tsx similarity index 72% rename from interface/src/components/MenuAppBar.js rename to interface/src/components/MenuAppBar.tsx index 9fd8646..c13c3c2 100644 --- a/interface/src/components/MenuAppBar.js +++ b/interface/src/components/MenuAppBar.tsx @@ -1,42 +1,28 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { Link, withRouter } from 'react-router-dom'; +import React, { RefObject } from 'react'; +import { Link, withRouter, RouteComponentProps } from 'react-router-dom'; + +import { Drawer, AppBar, Toolbar, Avatar, Divider, Button, IconButton } from '@material-ui/core'; +import { ClickAwayListener, Popper, Hidden, Typography } from '@material-ui/core'; +import { List, ListItem, ListItemIcon, ListItemText, ListItemAvatar } from '@material-ui/core'; +import { Card, CardContent, CardActions } from '@material-ui/core'; + +import { withStyles, createStyles, Theme, WithTheme, WithStyles, withTheme } from '@material-ui/core/styles'; -import { withStyles } from '@material-ui/core/styles'; -import Drawer from '@material-ui/core/Drawer'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import Typography from '@material-ui/core/Typography'; -import IconButton from '@material-ui/core/IconButton'; -import Hidden from '@material-ui/core/Hidden'; -import Divider from '@material-ui/core/Divider'; -import Button from '@material-ui/core/Button'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import Popper from '@material-ui/core/Popper'; -import MenuIcon from '@material-ui/icons/Menu'; import WifiIcon from '@material-ui/icons/Wifi'; import SettingsIcon from '@material-ui/icons/Settings'; import AccessTimeIcon from '@material-ui/icons/AccessTime'; import AccountCircleIcon from '@material-ui/icons/AccountCircle'; import SettingsInputAntennaIcon from '@material-ui/icons/SettingsInputAntenna'; import LockIcon from '@material-ui/icons/Lock'; -import ClickAwayListener from '@material-ui/core/ClickAwayListener'; -import Card from '@material-ui/core/Card'; -import CardContent from '@material-ui/core/CardContent'; -import CardActions from '@material-ui/core/CardActions'; -import Avatar from '@material-ui/core/Avatar'; +import MenuIcon from '@material-ui/icons/Menu'; import ProjectMenu from '../project/ProjectMenu'; -import { PROJECT_NAME } from '../constants/Env'; -import { withAuthenticationContext } from '../authentication/Context.js'; +import { PROJECT_NAME } from '../api'; +import { withAuthenticatedContext, AuthenticatedContextProps } from '../authentication'; const drawerWidth = 290; -const styles = theme => ({ +const styles = (theme: Theme) => createStyles({ root: { display: 'flex', }, @@ -77,26 +63,38 @@ const styles = theme => ({ "& > * + *": { marginLeft: theme.spacing(2), } - }, + } }); -class MenuAppBar extends React.Component { - state = { - mobileOpen: false, - authMenuOpen: false - }; +interface MenuAppBarState { + mobileOpen: boolean; + authMenuOpen: boolean; +} - anchorRef = React.createRef(); +interface MenuAppBarProps extends AuthenticatedContextProps, WithTheme, WithStyles, RouteComponentProps { + sectionTitle: string; +} + +class MenuAppBar extends React.Component { + + constructor(props: MenuAppBarProps) { + super(props); + this.state = { + mobileOpen: false, + authMenuOpen: false + }; + } + + anchorRef: RefObject = React.createRef(); handleToggle = () => { this.setState({ authMenuOpen: !this.state.authMenuOpen }); } - handleClose = (event) => { - if (this.anchorRef.current && this.anchorRef.current.contains(event.target)) { + handleClose = (event: React.MouseEvent) => { + if (this.anchorRef.current && this.anchorRef.current.contains(event.currentTarget)) { return; } - this.setState({ authMenuOpen: false }); } @@ -105,13 +103,13 @@ class MenuAppBar extends React.Component { }; render() { - const { classes, theme, children, sectionTitle, authenticationContext } = this.props; + const { classes, theme, children, sectionTitle, authenticatedContext } = this.props; const { mobileOpen, authMenuOpen } = this.state; const path = this.props.match.url; const drawer = (
- + {PROJECT_NAME} @@ -138,7 +136,7 @@ class MenuAppBar extends React.Component { - + @@ -156,7 +154,7 @@ class MenuAppBar extends React.Component { return (
- + - + - + @@ -243,14 +241,10 @@ class MenuAppBar extends React.Component { } } -MenuAppBar.propTypes = { - classes: PropTypes.object.isRequired, - theme: PropTypes.object.isRequired, - sectionTitle: PropTypes.string.isRequired, -}; - -export default withAuthenticationContext( - withRouter( - withStyles(styles, { withTheme: true })(MenuAppBar) +export default withRouter( + withTheme( + withAuthenticatedContext( + withStyles(styles)(MenuAppBar) + ) ) ); diff --git a/interface/src/components/PasswordValidator.js b/interface/src/components/PasswordValidator.tsx similarity index 55% rename from interface/src/components/PasswordValidator.js rename to interface/src/components/PasswordValidator.tsx index e168993..8ee0276 100644 --- a/interface/src/components/PasswordValidator.js +++ b/interface/src/components/PasswordValidator.tsx @@ -1,21 +1,25 @@ import React from 'react'; -import { TextValidator } from 'react-material-ui-form-validator'; -import { withStyles } from '@material-ui/core/styles'; -import { InputAdornment } from '@material-ui/core'; -import Visibility from '@material-ui/icons/Visibility'; -import VisibilityOff from '@material-ui/icons/VisibilityOff'; -import IconButton from '@material-ui/core/IconButton'; +import { TextValidator, ValidatorComponentProps } from 'react-material-ui-form-validator'; -const styles = theme => ( - { - input: { - "&::-ms-reveal": { - display: "none" - } +import { withStyles, WithStyles, createStyles } from '@material-ui/core/styles'; +import { InputAdornment, IconButton } from '@material-ui/core'; +import {Visibility,VisibilityOff } from '@material-ui/icons'; + +const styles = createStyles({ + input: { + "&::-ms-reveal": { + display: "none" } - }); + } +}); -class PasswordValidator extends React.Component { +type PasswordValidatorProps = WithStyles & Exclude; + +interface PasswordValidatorState { + showPassword: boolean; +} + +class PasswordValidator extends React.Component { state = { showPassword: false diff --git a/interface/src/components/RestComponent.js b/interface/src/components/RestComponent.js deleted file mode 100644 index 813840a..0000000 --- a/interface/src/components/RestComponent.js +++ /dev/null @@ -1,125 +0,0 @@ -import React from 'react'; -import { withSnackbar } from 'notistack'; -import { redirectingAuthorizedFetch } from '../authentication/Authentication'; - -/* -* It is unlikely this application will grow complex enough to require redux. -* -* This HOC acts as an interface to a REST service, providing data and change -* event callbacks to the wrapped components along with a function to persist the -* changes. -*/ -export const restComponent = (endpointUrl, FormComponent) => { - - return withSnackbar( - class extends React.Component { - - constructor(props) { - super(props); - - this.state = { - data: null, - fetched: false, - errorMessage: null - }; - - this.setState = this.setState.bind(this); - this.loadData = this.loadData.bind(this); - this.saveData = this.saveData.bind(this); - this.setData = this.setData.bind(this); - } - - setData(data) { - this.setState({ - data: data, - fetched: true, - errorMessage: null - }); - } - - loadData() { - this.setState({ - data: null, - fetched: false, - errorMessage: null - }); - redirectingAuthorizedFetch(endpointUrl) - .then(response => { - if (response.status === 200) { - return response.json(); - } - throw Error("Invalid status code: " + response.status); - }) - .then(json => { this.setState({ data: json, fetched: true }) }) - .catch(error => { - const errorMessage = error.message || "Unknown error"; - this.props.enqueueSnackbar("Problem fetching: " + errorMessage, { - variant: 'error', - }); - this.setState({ data: null, fetched: true, errorMessage }); - }); - } - - saveData(e) { - this.setState({ fetched: false }); - redirectingAuthorizedFetch(endpointUrl, { - method: 'POST', - body: JSON.stringify(this.state.data), - headers: { - 'Content-Type': 'application/json' - } - }) - .then(response => { - if (response.status === 200) { - return response.json(); - } - throw Error("Invalid status code: " + response.status); - }) - .then(json => { - this.props.enqueueSnackbar("Changes successfully applied.", { - variant: 'success', - }); - this.setState({ data: json, fetched: true }); - }).catch(error => { - const errorMessage = error.message || "Unknown error"; - this.props.enqueueSnackbar("Problem saving: " + errorMessage, { - variant: 'error', - }); - this.setState({ data: null, fetched: true, errorMessage }); - }); - } - - handleValueChange = name => (event) => { - const { data } = this.state; - data[name] = event.target.value; - this.setState({ data }); - }; - - handleSliderChange = name => (event, newValue) => { - const { data } = this.state; - data[name] = newValue; - this.setState({ data }); - }; - - handleCheckboxChange = name => event => { - const { data } = this.state; - data[name] = event.target.checked; - this.setState({ data }); - } - - render() { - return ; - } - - } - ); -} diff --git a/interface/src/components/RestController.tsx b/interface/src/components/RestController.tsx new file mode 100644 index 0000000..6c7692e --- /dev/null +++ b/interface/src/components/RestController.tsx @@ -0,0 +1,116 @@ +import React from 'react'; +import { withSnackbar, WithSnackbarProps } from 'notistack'; + +import { redirectingAuthorizedFetch } from '../authentication'; + +export interface RestControllerProps extends WithSnackbarProps { + handleValueChange: (name: keyof D) => (event: React.ChangeEvent) => void; + handleCheckboxChange: (name: keyof D) => (event: React.ChangeEvent, checked: boolean) => void; + handleSliderChange: (name: keyof D) => (event: React.ChangeEvent<{}>, value: number | number[]) => void; + + setData: (data: D) => void; + saveData: () => void; + loadData: () => void; + + data?: D; + loading: boolean; + errorMessage?: string; +} + +interface RestControllerState { + data?: D; + loading: boolean; + errorMessage?: string; +} + +export function restController>(endpointUrl: string, RestController: React.ComponentType

>) { + return withSnackbar( + class extends React.Component> & WithSnackbarProps, RestControllerState> { + + state: RestControllerState = { + data: undefined, + loading: false, + errorMessage: undefined + }; + + setData = (data: D) => { + this.setState({ + data, + loading: false, + errorMessage: undefined + }); + } + + loadData = () => { + this.setState({ + data: undefined, + loading: true, + errorMessage: undefined + }); + redirectingAuthorizedFetch(endpointUrl).then(response => { + if (response.status === 200) { + return response.json(); + } + throw Error("Invalid status code: " + response.status); + }).then(json => { + this.setState({ data: json, loading: false }) + }).catch(error => { + const errorMessage = error.message || "Unknown error"; + this.props.enqueueSnackbar("Problem fetching: " + errorMessage, { variant: 'error' }); + this.setState({ data: undefined, loading: false, errorMessage }); + }); + } + + saveData = () => { + this.setState({ loading: true }); + redirectingAuthorizedFetch(endpointUrl, { + method: 'POST', + body: JSON.stringify(this.state.data), + headers: { + 'Content-Type': 'application/json' + } + }).then(response => { + if (response.status === 200) { + return response.json(); + } + throw Error("Invalid status code: " + response.status); + }).then(json => { + this.props.enqueueSnackbar("Changes successfully applied.", { variant: 'success' }); + this.setState({ data: json, loading: false }); + }).catch(error => { + const errorMessage = error.message || "Unknown error"; + this.props.enqueueSnackbar("Problem saving: " + errorMessage, { variant: 'error' }); + this.setState({ data: undefined, loading: false, errorMessage }); + }); + } + + handleValueChange = (name: keyof D) => (event: React.ChangeEvent) => { + const data = { ...this.state.data!, [name]: event.target.value }; + this.setState({ data }); + } + + handleCheckboxChange = (name: keyof D) => (event: React.ChangeEvent) => { + const data = { ...this.state.data!, [name]: event.target.checked }; + this.setState({ data }); + } + + handleSliderChange = (name: keyof D) => (event: React.ChangeEvent<{}>, value: number | number[]) => { + const data = { ...this.state.data!, [name]: value }; + this.setState({ data }); + }; + + render() { + return ; + } + + }); +} diff --git a/interface/src/components/RestFormLoader.tsx b/interface/src/components/RestFormLoader.tsx new file mode 100644 index 0000000..f4a8501 --- /dev/null +++ b/interface/src/components/RestFormLoader.tsx @@ -0,0 +1,55 @@ +import React from 'react'; + +import { makeStyles, Theme, createStyles } from '@material-ui/core/styles'; +import { Button, LinearProgress, Typography } from '@material-ui/core'; +import { RestControllerProps } from './RestController'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + loadingSettings: { + margin: theme.spacing(0.5), + }, + loadingSettingsDetails: { + margin: theme.spacing(4), + textAlign: "center" + }, + button: { + marginRight: theme.spacing(2), + marginTop: theme.spacing(2), + } + }) +); + +export type RestFormProps = Omit, "loading" | "errorMessage"> & { data: D }; + +interface RestFormLoaderProps extends RestControllerProps { + render: (props: RestFormProps) => JSX.Element; +} + +export default function RestFormLoader(props: RestFormLoaderProps) { + const { loading, errorMessage, loadData, render, data, ...rest } = props; + const classes = useStyles(); + if (loading || !data) { + return ( +

+ + + Loading... + +
+ ); + } + if (errorMessage) { + return ( +
+ + {errorMessage} + + +
+ ); + } + return render({ ...rest, loadData, data }); +} diff --git a/interface/src/components/SectionContent.js b/interface/src/components/SectionContent.js deleted file mode 100644 index f5a48ee..0000000 --- a/interface/src/components/SectionContent.js +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import Paper from '@material-ui/core/Paper'; -import { withStyles } from '@material-ui/core/styles'; -import Typography from '@material-ui/core/Typography'; - -const styles = theme => ({ - content: { - padding: theme.spacing(2), - margin: theme.spacing(3), - } -}); - -function SectionContent(props) { - const { children, classes, title, titleGutter } = props; - return ( - - - {title} - - {children} - - ); -} - -SectionContent.propTypes = { - classes: PropTypes.object.isRequired, - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node - ]).isRequired, - title: PropTypes.string.isRequired, - titleGutter: PropTypes.bool -}; - -export default withStyles(styles)(SectionContent); diff --git a/interface/src/components/SectionContent.tsx b/interface/src/components/SectionContent.tsx new file mode 100644 index 0000000..457014f --- /dev/null +++ b/interface/src/components/SectionContent.tsx @@ -0,0 +1,33 @@ +import React from 'react'; + +import { Typography, Paper } from '@material-ui/core'; +import { createStyles, Theme, makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + content: { + padding: theme.spacing(2), + margin: theme.spacing(3), + } + }) +); + +interface SectionContentProps { + title: string; + titleGutter?: boolean; +} + +const SectionContent: React.FC = (props) => { + const { children, title, titleGutter } = props; + const classes = useStyles(); + return ( + + + {title} + + {children} + + ); +}; + +export default SectionContent; diff --git a/interface/src/components/index.ts b/interface/src/components/index.ts new file mode 100644 index 0000000..6b6a5ff --- /dev/null +++ b/interface/src/components/index.ts @@ -0,0 +1,11 @@ +export { default as BlockFormControlLabel } from './BlockFormControlLabel'; +export { default as FormActions } from './FormActions'; +export { default as FormButton } from './FormButton'; +export { default as HighlightAvatar } from './HighlightAvatar'; +export { default as MenuAppBar } from './MenuAppBar'; +export { default as PasswordValidator } from './PasswordValidator'; +export { default as RestFormLoader } from './RestFormLoader'; +export { default as SectionContent } from './SectionContent'; + +export * from './RestFormLoader'; +export * from './RestController'; diff --git a/interface/src/constants/Env.js b/interface/src/constants/Env.js deleted file mode 100644 index df674aa..0000000 --- a/interface/src/constants/Env.js +++ /dev/null @@ -1,3 +0,0 @@ -export const PROJECT_NAME = process.env.REACT_APP_PROJECT_NAME; -export const PROJECT_PATH = process.env.REACT_APP_PROJECT_PATH; -export const ENDPOINT_ROOT = process.env.REACT_APP_ENDPOINT_ROOT; diff --git a/interface/src/constants/Highlight.js b/interface/src/constants/Highlight.js deleted file mode 100644 index 6eae2e0..0000000 --- a/interface/src/constants/Highlight.js +++ /dev/null @@ -1,4 +0,0 @@ -export const IDLE = "idle"; -export const SUCCESS = "success"; -export const ERROR = "error"; -export const WARN = "warn"; diff --git a/interface/src/constants/NTPStatus.js b/interface/src/constants/NTPStatus.js deleted file mode 100644 index 48d4565..0000000 --- a/interface/src/constants/NTPStatus.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as Highlight from '../constants/Highlight'; - -export const NTP_INACTIVE = 0; -export const NTP_ACTIVE = 1; - -export const isNtpActive = ntpStatus => ntpStatus && ntpStatus.status === NTP_ACTIVE; - -export const ntpStatusHighlight = ntpStatus => { - switch (ntpStatus.status) { - case NTP_INACTIVE: - return Highlight.IDLE; - case NTP_ACTIVE: - return Highlight.SUCCESS; - default: - return Highlight.ERROR; - } -} - -export const ntpStatus = ntpStatus => { - switch (ntpStatus.status) { - case NTP_INACTIVE: - return "Inactive"; - case NTP_ACTIVE: - return "Active"; - default: - return "Unknown"; - } -} diff --git a/interface/src/constants/TimeFormat.js b/interface/src/constants/TimeFormat.js deleted file mode 100644 index e2fe1d5..0000000 --- a/interface/src/constants/TimeFormat.js +++ /dev/null @@ -1,3 +0,0 @@ -import moment from 'moment'; - -export const formatIsoDateTime = isoDateString => moment.parseZone(isoDateString).format('ll @ HH:mm:ss'); diff --git a/interface/src/constants/WiFiAPModes.js b/interface/src/constants/WiFiAPModes.js deleted file mode 100644 index 6c1b7a7..0000000 --- a/interface/src/constants/WiFiAPModes.js +++ /dev/null @@ -1,5 +0,0 @@ -export const WIFI_AP_MODE_ALWAYS = 0; -export const WIFI_AP_MODE_DISCONNECTED = 1; -export const WIFI_AP_NEVER = 2; - -export const isAPEnabled = apMode => apMode === WIFI_AP_MODE_ALWAYS || apMode === WIFI_AP_MODE_DISCONNECTED; diff --git a/interface/src/containers/APSettings.js b/interface/src/containers/APSettings.js deleted file mode 100644 index 45ae270..0000000 --- a/interface/src/containers/APSettings.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { Component } from 'react'; - -import { AP_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import APSettingsForm from '../forms/APSettingsForm'; - -class APSettings extends Component { - - componentDidMount() { - this.props.loadData(); - } - - render() { - const { fetched, errorMessage, data, saveData, loadData, handleValueChange } = this.props; - return ( - - - - } - /> - - ) - } - -} - -export default restComponent(AP_SETTINGS_ENDPOINT, APSettings); diff --git a/interface/src/containers/APStatus.js b/interface/src/containers/APStatus.js deleted file mode 100644 index d4ced8e..0000000 --- a/interface/src/containers/APStatus.js +++ /dev/null @@ -1,121 +0,0 @@ -import React, { Component, Fragment } from 'react'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import Avatar from '@material-ui/core/Avatar'; -import Divider from '@material-ui/core/Divider'; -import SettingsInputAntennaIcon from '@material-ui/icons/SettingsInputAntenna'; -import DeviceHubIcon from '@material-ui/icons/DeviceHub'; -import ComputerIcon from '@material-ui/icons/Computer'; -import RefreshIcon from '@material-ui/icons/Refresh'; - -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent' - -import * as Highlight from '../constants/Highlight'; -import { AP_STATUS_ENDPOINT } from '../constants/Endpoints'; - -const styles = theme => ({ - ["apStatus_" + Highlight.SUCCESS]: { - backgroundColor: theme.palette.highlight_success - }, - ["apStatus_" + Highlight.IDLE]: { - backgroundColor: theme.palette.highlight_idle - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class APStatus extends Component { - - componentDidMount() { - this.props.loadData(); - } - - apStatusHighlight(data) { - return data.active ? Highlight.SUCCESS : Highlight.IDLE; - } - - apStatus(data) { - return data.active ? "Active" : "Inactive"; - } - - createListItems(data, classes) { - return ( - - - - - - - - - - - - - IP - - - - - - - - - - - - - - - - - - - - - - - - ); - } - - renderAPStatus(data, classes) { - return ( -
- - {this.createListItems(data, classes)} - - -
- ); - } - - render() { - const { fetched, errorMessage, data, loadData, classes } = this.props; - return ( - - this.renderAPStatus(data, classes) - } - /> - - ) - } -} - -export default restComponent(AP_STATUS_ENDPOINT, withStyles(styles)(APStatus)); diff --git a/interface/src/containers/ManageUsers.js b/interface/src/containers/ManageUsers.js deleted file mode 100644 index 6b91556..0000000 --- a/interface/src/containers/ManageUsers.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, { Component } from 'react'; - -import { SECURITY_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import ManageUsersForm from '../forms/ManageUsersForm'; - -class ManageUsers extends Component { - - componentDidMount() { - this.props.loadData(); - } - - render() { - const { fetched, errorMessage, data, saveData, loadData, setData, handleValueChange } = this.props; - return ( - - - - } - /> - - ) - } - -} - -export default restComponent(SECURITY_SETTINGS_ENDPOINT, ManageUsers); diff --git a/interface/src/containers/NTPSettings.js b/interface/src/containers/NTPSettings.js deleted file mode 100644 index 6d1b968..0000000 --- a/interface/src/containers/NTPSettings.js +++ /dev/null @@ -1,40 +0,0 @@ -import React, { Component } from 'react'; - -import { NTP_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import NTPSettingsForm from '../forms/NTPSettingsForm'; - -class NTPSettings extends Component { - - componentDidMount() { - this.props.loadData(); - } - - render() { - const { fetched, errorMessage, data, saveData, setData, loadData, handleValueChange, handleCheckboxChange } = this.props; - return ( - - - - } - /> - - ) - } - -} - -export default restComponent(NTP_SETTINGS_ENDPOINT, NTPSettings); diff --git a/interface/src/containers/NTPStatus.js b/interface/src/containers/NTPStatus.js deleted file mode 100644 index 8029ee0..0000000 --- a/interface/src/containers/NTPStatus.js +++ /dev/null @@ -1,138 +0,0 @@ -import React, { Component, Fragment } from 'react'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import ListItemText from '@material-ui/core/ListItemText'; -import Avatar from '@material-ui/core/Avatar'; -import Divider from '@material-ui/core/Divider'; - -import SwapVerticalCircleIcon from '@material-ui/icons/SwapVerticalCircle'; -import AccessTimeIcon from '@material-ui/icons/AccessTime'; -import DNSIcon from '@material-ui/icons/Dns'; -import UpdateIcon from '@material-ui/icons/Update'; -import AvTimerIcon from '@material-ui/icons/AvTimer'; -import RefreshIcon from '@material-ui/icons/Refresh'; - -import { isNtpActive, ntpStatusHighlight, ntpStatus } from '../constants/NTPStatus'; -import * as Highlight from '../constants/Highlight'; -import { formatIsoDateTime } from '../constants/TimeFormat'; -import { NTP_STATUS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; - -import moment from 'moment'; - -const styles = theme => ({ - ["ntpStatus_" + Highlight.SUCCESS]: { - backgroundColor: theme.palette.highlight_success - }, - ["ntpStatus_" + Highlight.ERROR]: { - backgroundColor: theme.palette.highlight_error - }, - ["ntpStatus_" + Highlight.WARN]: { - backgroundColor: theme.palette.highlight_warn - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class NTPStatus extends Component { - - componentDidMount() { - this.props.loadData(); - } - - createListItems(data, classes) { - return ( - - - - - - - - - - - { - isNtpActive(data) && ( - - - - - - - - - - - - - - - - - - - - - )} - - - - - - - - - - - - - - - - - - - - ); - } - - renderNTPStatus(data, classes) { - return ( -
- - {this.createListItems(data, classes)} - - -
- ); - } - - render() { - const { data, fetched, errorMessage, loadData, classes } = this.props; - return ( - - this.renderNTPStatus(data, classes) - } - /> - - ); - } -} - -export default restComponent(NTP_STATUS_ENDPOINT, withStyles(styles)(NTPStatus)); diff --git a/interface/src/containers/OTASettings.js b/interface/src/containers/OTASettings.js deleted file mode 100644 index 46fd4ec..0000000 --- a/interface/src/containers/OTASettings.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, { Component } from 'react'; - -import { OTA_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import OTASettingsForm from '../forms/OTASettingsForm'; - -class OTASettings extends Component { - - componentDidMount() { - this.props.loadData(); - } - - render() { - const { fetched, errorMessage, data, saveData, loadData, handleValueChange, handleCheckboxChange } = this.props; - return ( - - - - } - /> - - ) - } - -} - -export default restComponent(OTA_SETTINGS_ENDPOINT, OTASettings); diff --git a/interface/src/containers/SecuritySettings.js b/interface/src/containers/SecuritySettings.js deleted file mode 100644 index 9ee2c55..0000000 --- a/interface/src/containers/SecuritySettings.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { Component } from 'react'; - -import { SECURITY_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SecuritySettingsForm from '../forms/SecuritySettingsForm'; -import SectionContent from '../components/SectionContent'; - -class SecuritySettings extends Component { - - componentDidMount() { - this.props.loadData(); - } - - render() { - const { data, fetched, errorMessage, saveData, loadData, handleValueChange } = this.props; - return ( - - - - } - /> - - ) - } - -} - -export default restComponent(SECURITY_SETTINGS_ENDPOINT, SecuritySettings); diff --git a/interface/src/containers/WiFiNetworkScanner.js b/interface/src/containers/WiFiNetworkScanner.js deleted file mode 100644 index 4cdb9be..0000000 --- a/interface/src/containers/WiFiNetworkScanner.js +++ /dev/null @@ -1,125 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import { withSnackbar } from 'notistack'; - -import { SCAN_NETWORKS_ENDPOINT, LIST_NETWORKS_ENDPOINT } from '../constants/Endpoints'; -import SectionContent from '../components/SectionContent'; -import WiFiNetworkSelector from '../forms/WiFiNetworkSelector'; -import { redirectingAuthorizedFetch } from '../authentication/Authentication'; - -const NUM_POLLS = 10 -const POLLING_FREQUENCY = 500 -const RETRY_EXCEPTION_TYPE = "retry" - -class WiFiNetworkScanner extends Component { - - constructor(props) { - super(props); - this.pollCount = 0; - this.state = { - scanningForNetworks: true, - errorMessage: null, - networkList: null - }; - this.pollNetworkList = this.pollNetworkList.bind(this); - this.requestNetworkScan = this.requestNetworkScan.bind(this); - } - - componentDidMount() { - this.scanNetworks(); - } - - requestNetworkScan() { - const { scanningForNetworks } = this.state; - if (!scanningForNetworks) { - this.scanNetworks(); - } - } - - scanNetworks() { - this.pollCount = 0; - this.setState({ scanningForNetworks: true, networkList: null, errorMessage: null }); - redirectingAuthorizedFetch(SCAN_NETWORKS_ENDPOINT).then(response => { - if (response.status === 202) { - this.schedulePollTimeout(); - return; - } - throw Error("Scanning for networks returned unexpected response code: " + response.status); - }).catch(error => { - this.props.enqueueSnackbar("Problem scanning: " + error.message, { - variant: 'error', - }); - this.setState({ scanningForNetworks: false, networkList: null, errorMessage: error.message }); - }); - } - - schedulePollTimeout() { - setTimeout(this.pollNetworkList, POLLING_FREQUENCY); - } - - retryError() { - return { - name: RETRY_EXCEPTION_TYPE, - message: "Network list not ready, will retry in " + POLLING_FREQUENCY + "ms." - }; - } - - compareNetworks(network1, network2) { - if (network1.rssi < network2.rssi) - return 1; - if (network1.rssi > network2.rssi) - return -1; - return 0; - } - - pollNetworkList() { - redirectingAuthorizedFetch(LIST_NETWORKS_ENDPOINT) - .then(response => { - if (response.status === 200) { - return response.json(); - } - if (response.status === 202) { - if (++this.pollCount < NUM_POLLS) { - this.schedulePollTimeout(); - throw this.retryError(); - } else { - throw Error("Device did not return network list in timely manner."); - } - } - throw Error("Device returned unexpected response code: " + response.status); - }) - .then(json => { - json.networks.sort(this.compareNetworks) - this.setState({ scanningForNetworks: false, networkList: json, errorMessage: null }) - }) - .catch(error => { - if (error.name !== RETRY_EXCEPTION_TYPE) { - this.props.enqueueSnackbar("Problem scanning: " + error.message, { - variant: 'error', - }); - this.setState({ scanningForNetworks: false, networkList: null, errorMessage: error.message }); - } - }); - } - - render() { - const { scanningForNetworks, networkList, errorMessage } = this.state; - return ( - - - - ) - } - -} - -WiFiNetworkScanner.propTypes = { - selectNetwork: PropTypes.func.isRequired -}; - -export default withSnackbar(WiFiNetworkScanner); diff --git a/interface/src/containers/WiFiSettings.js b/interface/src/containers/WiFiSettings.js deleted file mode 100644 index 9c0802d..0000000 --- a/interface/src/containers/WiFiSettings.js +++ /dev/null @@ -1,69 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { WIFI_SETTINGS_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import WiFiSettingsForm from '../forms/WiFiSettingsForm'; - -class WiFiSettings extends Component { - - constructor(props) { - super(props); - - this.deselectNetworkAndLoadData = this.deselectNetworkAndLoadData.bind(this); - } - - componentDidMount() { - const { selectedNetwork } = this.props; - if (selectedNetwork) { - var wifiSettings = { - ssid: selectedNetwork.ssid, - password: "", - hostname: "esp8266-react", - static_ip_config: false, - } - this.props.setData(wifiSettings); - } else { - this.props.loadData(); - } - } - - deselectNetworkAndLoadData() { - this.props.deselectNetwork(); - this.props.loadData(); - } - - render() { - const { data, fetched, errorMessage, saveData, loadData, handleValueChange, handleCheckboxChange, selectedNetwork, deselectNetwork } = this.props; - return ( - - - - } - /> - - ) - } - -} - -WiFiSettings.propTypes = { - deselectNetwork: PropTypes.func, - selectedNetwork: PropTypes.object -}; - -export default restComponent(WIFI_SETTINGS_ENDPOINT, WiFiSettings); diff --git a/interface/src/forms/APSettingsForm.js b/interface/src/forms/APSettingsForm.js deleted file mode 100644 index e8d1521..0000000 --- a/interface/src/forms/APSettingsForm.js +++ /dev/null @@ -1,84 +0,0 @@ -import React, { Fragment } from 'react'; -import PropTypes from 'prop-types'; -import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator'; - -import { isAPEnabled } from '../constants/WiFiAPModes'; -import PasswordValidator from '../components/PasswordValidator'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import MenuItem from '@material-ui/core/MenuItem'; -import SaveIcon from '@material-ui/icons/Save'; - -const styles = theme => ({ - textField: { - width: "100%" - }, - selectField: { - width: "100%", - marginTop: theme.spacing(2), - marginBottom: theme.spacing(0.5) - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class APSettingsForm extends React.Component { - - render() { - const { classes, apSettings, handleValueChange, onSubmit, onReset } = this.props; - return ( - - - Always - When WiFi Disconnected - Never - - { - isAPEnabled(apSettings.provision_mode) && - - - - - } - - - - ); - } -} - -APSettingsForm.propTypes = { - classes: PropTypes.object.isRequired, - apSettings: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired -}; - -export default withStyles(styles)(APSettingsForm); diff --git a/interface/src/forms/NTPSettingsForm.js b/interface/src/forms/NTPSettingsForm.js deleted file mode 100644 index 1079b3e..0000000 --- a/interface/src/forms/NTPSettingsForm.js +++ /dev/null @@ -1,105 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator'; - -import { withStyles } from '@material-ui/core/styles'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import MenuItem from '@material-ui/core/MenuItem'; -import Switch from '@material-ui/core/Switch'; -import Button from '@material-ui/core/Button'; -import SaveIcon from '@material-ui/icons/Save'; - -import isIP from '../validators/isIP'; -import isHostname from '../validators/isHostname'; -import or from '../validators/or'; -import { timeZoneSelectItems, selectedTimeZone, TIME_ZONES } from '../constants/TZ'; - -const styles = theme => ({ - switchControl: { - width: "100%", - marginTop: theme.spacing(2), - marginBottom: theme.spacing(0.5) - }, - textField: { - width: "100%" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class NTPSettingsForm extends React.Component { - - componentWillMount() { - ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); - } - - changeTimeZone = (event) => { - const { ntpSettings, setData } = this.props; - setData({ - ...ntpSettings, - tz_label: event.target.value, - tz_format: TIME_ZONES[event.target.value] - }); - } - - render() { - const { classes, ntpSettings, handleValueChange, handleCheckboxChange, onSubmit, onReset } = this.props; - return ( - - - } - label="Enable NTP?" - /> - - - Time zone... - {timeZoneSelectItems()} - - - - - ); - } -} - -NTPSettingsForm.propTypes = { - classes: PropTypes.object.isRequired, - ntpSettings: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, -}; - -export default withStyles(styles)(NTPSettingsForm); diff --git a/interface/src/forms/OTASettingsForm.js b/interface/src/forms/OTASettingsForm.js deleted file mode 100644 index 1d980bf..0000000 --- a/interface/src/forms/OTASettingsForm.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import Switch from '@material-ui/core/Switch'; -import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import SaveIcon from '@material-ui/icons/Save'; - -import isIP from '../validators/isIP'; -import isHostname from '../validators/isHostname'; -import or from '../validators/or'; -import PasswordValidator from '../components/PasswordValidator'; - -const styles = theme => ({ - switchControl: { - width: "100%", - marginTop: theme.spacing(2), - marginBottom: theme.spacing(0.5) - }, - textField: { - width: "100%" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class OTASettingsForm extends React.Component { - - componentWillMount() { - ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); - } - - render() { - const { classes, otaSettings, handleValueChange, handleCheckboxChange, onSubmit, onReset } = this.props; - return ( - - - } - label="Enable OTA Updates?" - /> - - - - - - ); - } -} - -OTASettingsForm.propTypes = { - classes: PropTypes.object.isRequired, - otaSettings: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, - handleCheckboxChange: PropTypes.func.isRequired, -}; - -export default withStyles(styles)(OTASettingsForm); diff --git a/interface/src/forms/SecuritySettingsForm.js b/interface/src/forms/SecuritySettingsForm.js deleted file mode 100644 index 7582686..0000000 --- a/interface/src/forms/SecuritySettingsForm.js +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { ValidatorForm } from 'react-material-ui-form-validator'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import Typography from '@material-ui/core/Typography'; -import Box from '@material-ui/core/Box'; -import SaveIcon from '@material-ui/icons/Save'; - -import PasswordValidator from '../components/PasswordValidator'; -import { withAuthenticationContext } from '../authentication/Context'; - -const styles = theme => ({ - textField: { - width: "100%" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class SecuritySettingsForm extends React.Component { - - onSubmit = () => { - this.props.onSubmit(); - this.props.authenticationContext.refresh(); - } - - render() { - const { classes, securitySettings, handleValueChange, onReset } = this.props; - return ( - - - - - If you modify the JWT Secret, all users will be logged out. - - - - - - ); - } -} - -SecuritySettingsForm.propTypes = { - classes: PropTypes.object.isRequired, - securitySettings: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, - authenticationContext: PropTypes.object.isRequired, -}; - -export default withAuthenticationContext(withStyles(styles)(SecuritySettingsForm)); diff --git a/interface/src/forms/UserForm.js b/interface/src/forms/UserForm.js deleted file mode 100644 index 364feb3..0000000 --- a/interface/src/forms/UserForm.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; - -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import Switch from '@material-ui/core/Switch'; -import FormGroup from '@material-ui/core/FormGroup'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import Dialog from '@material-ui/core/Dialog'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogActions from '@material-ui/core/DialogActions'; - -import PasswordValidator from '../components/PasswordValidator'; - -const styles = theme => ({ - textField: { - width: "100%" - }, - button: { - margin: theme.spacing(0.5) - } -}); - -class UserForm extends React.Component { - - constructor(props) { - super(props); - this.formRef = React.createRef(); - } - - componentWillMount() { - ValidatorForm.addValidationRule('uniqueUsername', this.props.uniqueUsername); - } - - submit = () => { - this.formRef.current.submit(); - } - - render() { - const { classes, user, creating, handleValueChange, handleCheckboxChange, onDoneEditing, onCancelEditing } = this.props; - return ( - - - {creating ? 'Add' : 'Modify'} User - - - - - } - label="Admin?" - /> - - - - - - - - - ); - } -} - -UserForm.propTypes = { - classes: PropTypes.object.isRequired, - user: PropTypes.object.isRequired, - creating: PropTypes.bool.isRequired, - onDoneEditing: PropTypes.func.isRequired, - onCancelEditing: PropTypes.func.isRequired, - uniqueUsername: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, - handleCheckboxChange: PropTypes.func.isRequired -}; - -export default withStyles(styles)(UserForm); diff --git a/interface/src/forms/WiFiNetworkSelector.js b/interface/src/forms/WiFiNetworkSelector.js deleted file mode 100644 index 5824da5..0000000 --- a/interface/src/forms/WiFiNetworkSelector.js +++ /dev/null @@ -1,107 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import LinearProgress from '@material-ui/core/LinearProgress'; -import Typography from '@material-ui/core/Typography'; - -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; - -import Avatar from '@material-ui/core/Avatar'; -import Badge from '@material-ui/core/Badge'; - -import WifiIcon from '@material-ui/icons/Wifi'; -import LockIcon from '@material-ui/icons/Lock'; -import LockOpenIcon from '@material-ui/icons/LockOpen'; -import PermScanWifiIcon from '@material-ui/icons/PermScanWifi'; - -import { isNetworkOpen, networkSecurityMode } from '../constants/WiFiSecurityModes'; - -const styles = theme => ({ - scanningProgress: { - margin: theme.spacing(4), - textAlign: "center" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class WiFiNetworkSelector extends Component { - - constructor(props) { - super(props); - - this.renderNetwork = this.renderNetwork.bind(this); - } - - renderNetwork(network) { - return ( - this.props.selectNetwork(network)}> - - - {isNetworkOpen(network) ? : } - - - - - - - - - - ); - } - - render() { - const { classes, scanningForNetworks, networkList, errorMessage, requestNetworkScan } = this.props; - return ( -
- { - scanningForNetworks ? -
- - - Scanning... - -
- : - networkList ? - - {networkList.networks.map(this.renderNetwork)} - - : -
- - {errorMessage} - -
- } - - -
- ); - } -} - -WiFiNetworkSelector.propTypes = { - classes: PropTypes.object.isRequired, - selectNetwork: PropTypes.func.isRequired, - scanningForNetworks: PropTypes.bool.isRequired, - errorMessage: PropTypes.string, - networkList: PropTypes.object, - requestNetworkScan: PropTypes.func.isRequired -}; - -export default withStyles(styles)(WiFiNetworkSelector); diff --git a/interface/src/forms/WiFiSettingsForm.js b/interface/src/forms/WiFiSettingsForm.js deleted file mode 100644 index 0bf2859..0000000 --- a/interface/src/forms/WiFiSettingsForm.js +++ /dev/null @@ -1,201 +0,0 @@ -import React, { Fragment } from 'react'; -import PropTypes from 'prop-types'; - -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import Checkbox from '@material-ui/core/Checkbox'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; - -import Avatar from '@material-ui/core/Avatar'; -import IconButton from '@material-ui/core/IconButton'; -import LockIcon from '@material-ui/icons/Lock'; -import LockOpenIcon from '@material-ui/icons/LockOpen'; -import DeleteIcon from '@material-ui/icons/Delete'; -import SaveIcon from '@material-ui/icons/Save'; - -import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; -import { isNetworkOpen, networkSecurityMode } from '../constants/WiFiSecurityModes'; - -import isIP from '../validators/isIP'; -import isHostname from '../validators/isHostname'; -import optional from '../validators/optional'; -import PasswordValidator from '../components/PasswordValidator'; - -const styles = theme => ({ - textField: { - width: "100%" - }, - checkboxControl: { - width: "100%" - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); - -class WiFiSettingsForm extends React.Component { - - componentWillMount() { - ValidatorForm.addValidationRule('isIP', isIP); - ValidatorForm.addValidationRule('isHostname', isHostname); - ValidatorForm.addValidationRule('isOptionalIP', optional(isIP)); - } - - renderSelectedNetwork() { - const { selectedNetwork, deselectNetwork } = this.props; - return ( - - - - - {isNetworkOpen(selectedNetwork) ? : } - - - - - - - - - - - ); - } - - render() { - const { classes, wifiSettings, selectedNetwork, handleValueChange, handleCheckboxChange, onSubmit, onReset } = this.props; - return ( - - { - selectedNetwork ? this.renderSelectedNetwork() : - - } - { - !isNetworkOpen(selectedNetwork) && - - } - - - } - label="Static IP Config?" - /> - { - wifiSettings.static_ip_config && - - - - - - - - } - - - - ); - } -} - -WiFiSettingsForm.propTypes = { - classes: PropTypes.object.isRequired, - wifiSettings: PropTypes.object, - deselectNetwork: PropTypes.func, - selectedNetwork: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, - handleCheckboxChange: PropTypes.func.isRequired -}; - -export default withStyles(styles)(WiFiSettingsForm); diff --git a/interface/src/history.js b/interface/src/history.ts similarity index 100% rename from interface/src/history.js rename to interface/src/history.ts diff --git a/interface/src/index.js b/interface/src/index.tsx similarity index 100% rename from interface/src/index.js rename to interface/src/index.tsx diff --git a/interface/src/ntp/NTPSettingsController.tsx b/interface/src/ntp/NTPSettingsController.tsx new file mode 100644 index 0000000..78f5f63 --- /dev/null +++ b/interface/src/ntp/NTPSettingsController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { NTP_SETTINGS_ENDPOINT } from '../api'; + +import NTPSettingsForm from './NTPSettingsForm'; +import { NTPSettings } from './types'; + +type NTPSettingsControllerProps = RestControllerProps; + +class NTPSettingsController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ) + } + +} + +export default restController(NTP_SETTINGS_ENDPOINT, NTPSettingsController); diff --git a/interface/src/ntp/NTPSettingsForm.tsx b/interface/src/ntp/NTPSettingsForm.tsx new file mode 100644 index 0000000..ba82a70 --- /dev/null +++ b/interface/src/ntp/NTPSettingsForm.tsx @@ -0,0 +1,84 @@ +import React from 'react'; +import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator'; + +import { Checkbox, MenuItem } from '@material-ui/core'; +import SaveIcon from '@material-ui/icons/Save'; + +import { RestFormProps, FormActions, FormButton, BlockFormControlLabel } from '../components'; +import { isIP, isHostname, or } from '../validators'; + +import { TIME_ZONES, timeZoneSelectItems, selectedTimeZone } from './TZ'; +import { NTPSettings } from './types'; + +type NTPSettingsFormProps = RestFormProps; + +class NTPSettingsForm extends React.Component { + + componentDidMount() { + ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); + } + + changeTimeZone = (event: React.ChangeEvent) => { + const { data, setData } = this.props; + setData({ + ...data, + tz_label: event.target.value, + tz_format: TIME_ZONES[event.target.value] + }); + } + + render() { + const { data, handleValueChange, handleCheckboxChange, saveData, loadData } = this.props; + return ( + + + } + label="Enable NTP?" + /> + + + Time zone... + {timeZoneSelectItems()} + + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); + } +} + +export default NTPSettingsForm; diff --git a/interface/src/ntp/NTPStatus.ts b/interface/src/ntp/NTPStatus.ts new file mode 100644 index 0000000..21601f9 --- /dev/null +++ b/interface/src/ntp/NTPStatus.ts @@ -0,0 +1,29 @@ +import { Theme } from "@material-ui/core"; +import { NTPStatus } from "./types"; + +export const NTP_INACTIVE = 0; +export const NTP_ACTIVE = 1; + +export const isNtpActive = ({ status }: NTPStatus) => status === NTP_ACTIVE; + +export const ntpStatusHighlight = ({ status }: NTPStatus, theme: Theme) => { + switch (status) { + case NTP_INACTIVE: + return theme.palette.info.main; + case NTP_ACTIVE: + return theme.palette.success.main; + default: + return theme.palette.error.main; + } +} + +export const ntpStatus = ({ status }: NTPStatus) => { + switch (status) { + case NTP_INACTIVE: + return "Inactive"; + case NTP_ACTIVE: + return "Active"; + default: + return "Unknown"; + } +} diff --git a/interface/src/ntp/NTPStatusController.tsx b/interface/src/ntp/NTPStatusController.tsx new file mode 100644 index 0000000..25ea4de --- /dev/null +++ b/interface/src/ntp/NTPStatusController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import { restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { NTP_STATUS_ENDPOINT } from '../api'; + +import NTPStatusForm from './NTPStatusForm'; +import { NTPStatus } from './types'; + +type NTPStatusControllerProps = RestControllerProps; + +class NTPStatusController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(NTP_STATUS_ENDPOINT, NTPStatusController); diff --git a/interface/src/ntp/NTPStatusForm.tsx b/interface/src/ntp/NTPStatusForm.tsx new file mode 100644 index 0000000..72b4500 --- /dev/null +++ b/interface/src/ntp/NTPStatusForm.tsx @@ -0,0 +1,89 @@ +import React, { Component, Fragment } from 'react'; +import moment from 'moment'; + +import { WithTheme, withTheme } from '@material-ui/core/styles'; +import { Avatar, Divider, List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'; + +import SwapVerticalCircleIcon from '@material-ui/icons/SwapVerticalCircle'; +import AccessTimeIcon from '@material-ui/icons/AccessTime'; +import DNSIcon from '@material-ui/icons/Dns'; +import UpdateIcon from '@material-ui/icons/Update'; +import AvTimerIcon from '@material-ui/icons/AvTimer'; +import RefreshIcon from '@material-ui/icons/Refresh'; + +import { RestFormProps, FormActions, FormButton, HighlightAvatar } from '../components'; + +import { isNtpActive, ntpStatusHighlight, ntpStatus } from './NTPStatus'; +import { formatIsoDateTime } from './TimeFormat'; +import { NTPStatus } from './types'; + +type NTPStatusFormProps = RestFormProps & WithTheme; + +class NTPStatusForm extends Component { + + render() { + const { data, theme } = this.props + return ( + + + + + + + + + + + + {isNtpActive(data) && ( + + + + + + + + + + + + + + + + + + + + + )} + + + + + + + + + + + + + + + + + + + + + } variant="contained" color="secondary" onClick={this.props.loadData}> + Refresh + + + + ); + } +} + +export default withTheme(NTPStatusForm); diff --git a/interface/src/ntp/NetworkTime.tsx b/interface/src/ntp/NetworkTime.tsx new file mode 100644 index 0000000..8855c7b --- /dev/null +++ b/interface/src/ntp/NetworkTime.tsx @@ -0,0 +1,39 @@ +import React, { Component } from 'react'; +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { withAuthenticatedContext, AuthenticatedContextProps, AuthenticatedRoute } from '../authentication'; +import { MenuAppBar } from '../components'; + +import NTPStatusController from './NTPStatusController'; +import NTPSettingsController from './NTPSettingsController'; + +type NetworkTimeProps = AuthenticatedContextProps & RouteComponentProps; + +class NetworkTime extends Component { + + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { + this.props.history.push(path); + }; + + render() { + const { authenticatedContext } = this.props; + return ( + + + + + + + + + + + + ) + } + +} + +export default withAuthenticatedContext(NetworkTime) diff --git a/interface/src/constants/TZ.js b/interface/src/ntp/TZ.tsx similarity index 99% rename from interface/src/constants/TZ.js rename to interface/src/ntp/TZ.tsx index bb410ff..1f5ea9d 100644 --- a/interface/src/constants/TZ.js +++ b/interface/src/ntp/TZ.tsx @@ -1,7 +1,11 @@ import React from 'react'; import MenuItem from '@material-ui/core/MenuItem'; -export const TIME_ZONES = { +type TimeZones = { + [name: string]: string +}; + +export const TIME_ZONES: TimeZones = { "Africa/Abidjan": "GMT0", "Africa/Accra": "GMT0", "Africa/Addis_Ababa": "EAT-3", @@ -464,7 +468,7 @@ export const TIME_ZONES = { "Etc/Zulu": "UTC0" } -export function selectedTimeZone(label, format){ +export function selectedTimeZone(label: string, format: string) { return TIME_ZONES[label] === format ? label : undefined; } diff --git a/interface/src/ntp/TimeFormat.ts b/interface/src/ntp/TimeFormat.ts new file mode 100644 index 0000000..9319e3a --- /dev/null +++ b/interface/src/ntp/TimeFormat.ts @@ -0,0 +1,3 @@ +import moment from 'moment'; + +export const formatIsoDateTime = (isoDateString: string) => moment.parseZone(isoDateString).format('ll @ HH:mm:ss'); diff --git a/interface/src/ntp/types.ts b/interface/src/ntp/types.ts new file mode 100644 index 0000000..2b36802 --- /dev/null +++ b/interface/src/ntp/types.ts @@ -0,0 +1,14 @@ +export interface NTPStatus { + status: number; + time_utc: string; + time_local: string; + server: string; + uptime: number; +} + +export interface NTPSettings { + enabled: boolean; + server: string; + tz_label: string; + tz_format: string; +} diff --git a/interface/src/project/DemoController.js b/interface/src/project/DemoController.js deleted file mode 100644 index 0624c3a..0000000 --- a/interface/src/project/DemoController.js +++ /dev/null @@ -1,83 +0,0 @@ -import React, { Component } from 'react'; -import { ValidatorForm } from 'react-material-ui-form-validator'; - -import { ENDPOINT_ROOT } from '../constants/Env'; -import SectionContent from '../components/SectionContent'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; - -import Button from '@material-ui/core/Button'; -import Typography from '@material-ui/core/Typography'; -import Slider from '@material-ui/core/Slider'; -import { makeStyles } from '@material-ui/core/styles'; -import SaveIcon from '@material-ui/icons/Save'; - -export const DEMO_SETTINGS_ENDPOINT = ENDPOINT_ROOT + "demoSettings"; - -const valueToPercentage = (value) => `${Math.round(value / 255 * 100)}%`; - -class DemoController extends Component { - componentDidMount() { - this.props.loadData(); - } - - render() { - const { data, fetched, errorMessage, saveData, loadData, handleSliderChange } = this.props; - return ( - - - - } - /> - - ) - } -} - -const useStyles = makeStyles(theme => ({ - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - }, - blinkSpeedLabel: { - marginBottom: theme.spacing(5), - } -})); - -function DemoControllerForm(props) { - const { demoSettings, onSubmit, onReset, handleSliderChange } = props; - const classes = useStyles(); - return ( - - - Blink Speed - - - - - - ); -} - -export default restComponent(DEMO_SETTINGS_ENDPOINT, DemoController); diff --git a/interface/src/project/DemoController.tsx b/interface/src/project/DemoController.tsx new file mode 100644 index 0000000..2ff971a --- /dev/null +++ b/interface/src/project/DemoController.tsx @@ -0,0 +1,75 @@ +import React, { Component } from 'react'; +import { ValidatorForm } from 'react-material-ui-form-validator'; + +import { Typography, Slider, Box } from '@material-ui/core'; +import SaveIcon from '@material-ui/icons/Save'; + +import { ENDPOINT_ROOT } from '../api'; +import { restController, RestControllerProps, RestFormLoader, RestFormProps, FormActions, FormButton, SectionContent } from '../components'; + +export const DEMO_SETTINGS_ENDPOINT = ENDPOINT_ROOT + "demoSettings"; + +interface DemoSettings { + blink_speed: number; +} + +type DemoControllerProps = RestControllerProps; + +class DemoController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + ( + + )} + /> + + ) + } + +} + +export default restController(DEMO_SETTINGS_ENDPOINT, DemoController); + +const valueToPercentage = (value: number) => `${Math.round(value / 255 * 100)}%`; + +type DemoControllerFormProps = RestFormProps; + +function DemoControllerForm(props: DemoControllerFormProps) { + const { data, saveData, loadData, handleSliderChange } = props; + return ( + + + Blink Speed + + + + + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); +} + + diff --git a/interface/src/project/DemoInformation.js b/interface/src/project/DemoInformation.tsx similarity index 64% rename from interface/src/project/DemoInformation.js rename to interface/src/project/DemoInformation.tsx index f42b81c..fd3fde2 100644 --- a/interface/src/project/DemoInformation.js +++ b/interface/src/project/DemoInformation.tsx @@ -1,29 +1,14 @@ import React, { Component } from 'react'; - -import { withStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableHead from '@material-ui/core/TableHead'; -import TableCell from '@material-ui/core/TableCell'; -import TableBody from '@material-ui/core/TableBody'; -import TableRow from '@material-ui/core/TableRow'; -import Typography from '@material-ui/core/Typography'; - -import SectionContent from '../components/SectionContent'; - -const styles = theme => ({ - fileTable: { - marginBottom: theme.spacing(2) - } -}); +import { Typography, TableRow, TableBody, TableCell, TableHead, Table, Box } from '@material-ui/core'; +import { SectionContent } from '../components'; class DemoInformation extends Component { render() { - const { classes } = this.props; return ( - + - This simple demo project allows you to control the blink speed of the built-in LED. + This simple demo project allows you to control the blink speed of the built-in LED. It demonstrates how the esp8266-react framework may be extended for your own IoT project. @@ -34,7 +19,7 @@ class DemoInformation extends Component { The demo project interface code stored in the interface/project directory: - +
@@ -48,7 +33,7 @@ class DemoInformation extends Component { - ProjectMenu.js + ProjectMenu.tsx You can add your project's screens to the side bar here. @@ -56,7 +41,7 @@ class DemoInformation extends Component { - ProjectRouting.js + ProjectRouting.tsx The routing which controls the screens of your project. @@ -64,7 +49,7 @@ class DemoInformation extends Component { - DemoProject.js + DemoProject.tsx This screen, with tabs and tab routing. @@ -72,29 +57,31 @@ class DemoInformation extends Component { - DemoInformation.js + DemoInformation.tsx - The demo information tab. + The demo information page. - DemoController.js + DemoController.tsx The demo controller tab, to control the built-in LED. - +
- - See the project README for a full description of the demo project. - + + + See the project README for a full description of the demo project. + +
) } } -export default withStyles(styles)(DemoInformation); +export default DemoInformation; diff --git a/interface/src/project/DemoProject.js b/interface/src/project/DemoProject.tsx similarity index 57% rename from interface/src/project/DemoProject.js rename to interface/src/project/DemoProject.tsx index 6f201da..99bdd19 100644 --- a/interface/src/project/DemoProject.js +++ b/interface/src/project/DemoProject.tsx @@ -1,36 +1,36 @@ import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { PROJECT_PATH } from '../api'; +import { MenuAppBar } from '../components'; +import { AuthenticatedRoute } from '../authentication'; -import { PROJECT_PATH } from '../constants/Env'; -import MenuAppBar from '../components/MenuAppBar'; -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; import DemoInformation from './DemoInformation'; import DemoController from './DemoController'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; +class DemoProject extends Component { -class DemoProject extends Component { - - handleTabChange = (event, path) => { + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { this.props.history.push(path); }; render() { return ( - - - + + + - + ) - } + } } diff --git a/interface/src/project/ProjectMenu.js b/interface/src/project/ProjectMenu.tsx similarity index 60% rename from interface/src/project/ProjectMenu.js rename to interface/src/project/ProjectMenu.tsx index 721c799..b7d2739 100644 --- a/interface/src/project/ProjectMenu.js +++ b/interface/src/project/ProjectMenu.tsx @@ -1,15 +1,12 @@ import React, { Component } from 'react'; -import { Link, withRouter } from 'react-router-dom'; +import { Link, withRouter, RouteComponentProps } from 'react-router-dom'; -import { PROJECT_PATH } from '../constants/Env'; - -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; +import {List, ListItem, ListItemIcon, ListItemText} from '@material-ui/core'; import SettingsRemoteIcon from '@material-ui/icons/SettingsRemote'; -class ProjectMenu extends Component { +import { PROJECT_PATH } from '../api'; + +class ProjectMenu extends Component { render() { const path = this.props.match.url; diff --git a/interface/src/project/ProjectRouting.js b/interface/src/project/ProjectRouting.tsx similarity index 86% rename from interface/src/project/ProjectRouting.js rename to interface/src/project/ProjectRouting.tsx index 5086757..fc378e6 100644 --- a/interface/src/project/ProjectRouting.js +++ b/interface/src/project/ProjectRouting.tsx @@ -1,8 +1,9 @@ import React, { Component } from 'react'; import { Redirect, Switch } from 'react-router'; -import { PROJECT_PATH } from '../constants/Env'; -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; +import { PROJECT_PATH } from '../api'; +import { AuthenticatedRoute } from '../authentication'; + import DemoProject from './DemoProject'; class ProjectRouting extends Component { diff --git a/interface/src/react-app-env.d.ts b/interface/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/interface/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/interface/src/sections/AccessPoint.js b/interface/src/sections/AccessPoint.js deleted file mode 100644 index 011b673..0000000 --- a/interface/src/sections/AccessPoint.js +++ /dev/null @@ -1,37 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' - -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; -import MenuAppBar from '../components/MenuAppBar'; -import APSettings from '../containers/APSettings'; -import APStatus from '../containers/APStatus'; -import { withAuthenticationContext } from '../authentication/Context.js'; - -class AccessPoint extends Component { - - handleTabChange = (event, path) => { - this.props.history.push(path); - }; - - render() { - const { authenticationContext } = this.props; - return ( - - - - - - - - - - - - ) - } -} - -export default withAuthenticationContext(AccessPoint); diff --git a/interface/src/sections/NetworkTime.js b/interface/src/sections/NetworkTime.js deleted file mode 100644 index 4b11c25..0000000 --- a/interface/src/sections/NetworkTime.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' - -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; -import MenuAppBar from '../components/MenuAppBar'; -import NTPSettings from '../containers/NTPSettings'; -import NTPStatus from '../containers/NTPStatus'; -import { withAuthenticationContext } from '../authentication/Context.js'; - -class NetworkTime extends Component { - - handleTabChange = (event, path) => { - this.props.history.push(path); - }; - - render() { - const { authenticationContext } = this.props; - return ( - - - - - - - - - - - - ) - } - -} - -export default withAuthenticationContext(NetworkTime) diff --git a/interface/src/sections/Security.js b/interface/src/sections/Security.js deleted file mode 100644 index c2f619c..0000000 --- a/interface/src/sections/Security.js +++ /dev/null @@ -1,35 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' - -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; -import MenuAppBar from '../components/MenuAppBar'; -import ManageUsers from '../containers/ManageUsers'; -import SecuritySettings from '../containers/SecuritySettings'; - -class Security extends Component { - - handleTabChange = (event, path) => { - this.props.history.push(path); - }; - - render() { - return ( - - - - - - - - - - - - ) - } -} - -export default Security; diff --git a/interface/src/sections/System.js b/interface/src/sections/System.js deleted file mode 100644 index 2aca1cd..0000000 --- a/interface/src/sections/System.js +++ /dev/null @@ -1,37 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' - -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; -import MenuAppBar from '../components/MenuAppBar'; -import OTASettings from '../containers/OTASettings'; -import SystemStatus from '../containers/SystemStatus'; -import { withAuthenticationContext } from '../authentication/Context.js'; - -class System extends Component { - - handleTabChange = (event, path) => { - this.props.history.push(path); - }; - - render() { - const { authenticationContext } = this.props; - return ( - - - - - - - - - - - - ) - } -} - -export default withAuthenticationContext(System); diff --git a/interface/src/sections/WiFiConnection.js b/interface/src/sections/WiFiConnection.js deleted file mode 100644 index 1bb2b9b..0000000 --- a/interface/src/sections/WiFiConnection.js +++ /dev/null @@ -1,74 +0,0 @@ -import React, { Component } from 'react'; -import { Redirect, Switch } from 'react-router-dom' - -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -import AuthenticatedRoute from '../authentication/AuthenticatedRoute'; -import MenuAppBar from '../components/MenuAppBar'; -import WiFiNetworkScanner from '../containers/WiFiNetworkScanner'; -import WiFiSettings from '../containers/WiFiSettings'; -import WiFiStatus from '../containers/WiFiStatus'; -import { withAuthenticationContext } from '../authentication/Context.js'; - -class WiFiConnection extends Component { - - constructor(props) { - super(props); - this.state = { - selectedNetwork: null - }; - this.selectNetwork = this.selectNetwork.bind(this); - this.deselectNetwork = this.deselectNetwork.bind(this); - } - - selectNetwork(network) { - this.setState({ selectedNetwork: network }); - this.props.history.push('/wifi/settings'); - } - - deselectNetwork(network) { - this.setState({ selectedNetwork: null }); - } - - handleTabChange = (event, path) => { - this.props.history.push(path); - }; - - render() { - const { authenticationContext } = this.props; - const ConfiguredWiFiNetworkScanner = (props) => { - return ( - - ); - }; - const ConfiguredWiFiSettings = (props) => { - return ( - - ); - }; - return ( - - - - - - - - - - - - - - ) - } -} - -export default withAuthenticationContext(WiFiConnection); diff --git a/interface/src/security/ManageUsersController.tsx b/interface/src/security/ManageUsersController.tsx new file mode 100644 index 0000000..ccd3cde --- /dev/null +++ b/interface/src/security/ManageUsersController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { SECURITY_SETTINGS_ENDPOINT } from '../api'; + +import ManageUsersForm from './ManageUsersForm'; +import { SecuritySettings } from './types'; + +type ManageUsersControllerProps = RestControllerProps; + +class ManageUsersController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ) + } + +} + +export default restController(SECURITY_SETTINGS_ENDPOINT, ManageUsersController); diff --git a/interface/src/forms/ManageUsersForm.js b/interface/src/security/ManageUsersForm.tsx similarity index 55% rename from interface/src/forms/ManageUsersForm.js rename to interface/src/security/ManageUsersForm.tsx index 5368a87..c6fc783 100644 --- a/interface/src/forms/ManageUsersForm.js +++ b/interface/src/security/ManageUsersForm.tsx @@ -1,18 +1,9 @@ import React, { Fragment } from 'react'; -import PropTypes from 'prop-types'; - import { ValidatorForm } from 'react-material-ui-form-validator'; -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import Typography from '@material-ui/core/Typography'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import TableCell from '@material-ui/core/TableCell'; -import TableFooter from '@material-ui/core/TableFooter'; -import TableHead from '@material-ui/core/TableHead'; -import TableRow from '@material-ui/core/TableRow'; -import Box from '@material-ui/core/Box'; +import { Table, TableBody, TableCell, TableHead, TableFooter, TableRow } from '@material-ui/core'; +import { Box, Button, Typography, } from '@material-ui/core'; + import EditIcon from '@material-ui/icons/Edit'; import DeleteIcon from '@material-ui/icons/Delete'; import CloseIcon from '@material-ui/icons/Close'; @@ -21,20 +12,13 @@ import IconButton from '@material-ui/core/IconButton'; import SaveIcon from '@material-ui/icons/Save'; import PersonAddIcon from '@material-ui/icons/PersonAdd'; +import { withAuthenticatedContext, AuthenticatedContextProps } from '../authentication'; +import { RestFormProps, FormActions, FormButton } from '../components'; + import UserForm from './UserForm'; -import { withAuthenticationContext } from '../authentication/Context'; +import { SecuritySettings, User } from './types'; -const styles = theme => ({ - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - }, - table: { - '& td, & th': { padding: theme.spacing(0.5) } - } -}); - -function compareUsers(a, b) { +function compareUsers(a: User, b: User) { if (a.username < b.username) { return -1; } @@ -44,12 +28,18 @@ function compareUsers(a, b) { return 0; } -class ManageUsersForm extends React.Component { +type ManageUsersFormProps = RestFormProps & AuthenticatedContextProps; - constructor(props) { - super(props); - this.state = {}; - } +type ManageUsersFormState = { + creating: boolean; + user?: User; +} + +class ManageUsersForm extends React.Component { + + state: ManageUsersFormState = { + creating: false + }; createUser = () => { this.setState({ @@ -62,21 +52,21 @@ class ManageUsersForm extends React.Component { }); }; - uniqueUsername = username => { - return !this.props.userData.users.find(u => u.username === username); + uniqueUsername = (username: string) => { + return !this.props.data.users.find(u => u.username === username); } noAdminConfigured = () => { - return !this.props.userData.users.find(u => u.admin); + return !this.props.data.users.find(u => u.admin); } - removeUser = user => { - const { userData } = this.props; - const users = userData.users.filter(u => u.username !== user.username); - this.props.setData({ ...userData, users }); + removeUser = (user: User) => { + const { data } = this.props; + const users = data.users.filter(u => u.username !== user.username); + this.props.setData({ ...data, users }); } - startEditingUser = user => { + startEditingUser = (user: User) => { this.setState({ creating: false, user @@ -91,45 +81,37 @@ class ManageUsersForm extends React.Component { doneEditingUser = () => { const { user } = this.state; - const { userData } = this.props; - const users = userData.users.filter(u => u.username !== user.username); - users.push(user); - this.props.setData({ ...userData, users }); - this.setState({ - user: undefined - }); + if (user) { + const { data } = this.props; + const users = data.users.filter(u => u.username !== user.username); + users.push(user); + this.props.setData({ ...data, users }); + this.setState({ + user: undefined + }); + } }; - handleUserValueChange = name => event => { - const { user } = this.state; - this.setState({ - user: { - ...user, [name]: event.target.value - } - }); + handleUserValueChange = (name: keyof User) => (event: React.ChangeEvent) => { + this.setState({ user: { ...this.state.user!, [name]: event.target.value } }); }; - handleUserCheckboxChange = name => event => { - const { user } = this.state; - this.setState({ - user: { - ...user, [name]: event.target.checked - } - }); + handleUserCheckboxChange = (name: keyof User) => (event: React.ChangeEvent) => { + this.setState({ user: { ...this.state.user!, [name]: event.target.checked } }); } onSubmit = () => { - this.props.onSubmit(); - this.props.authenticationContext.refresh(); + this.props.saveData(); + this.props.authenticatedContext.refresh(); } render() { - const { classes, userData, onReset } = this.props; + const { data, loadData } = this.props; const { user, creating } = this.state; return ( - +
Username @@ -138,7 +120,7 @@ class ManageUsersForm extends React.Component { - {userData.users.sort(compareUsers).map(user => ( + {data.users.sort(compareUsers).map(user => ( {user.username} @@ -178,12 +160,14 @@ class ManageUsersForm extends React.Component { } - - + + } variant="contained" color="primary" type="submit" disabled={this.noAdminConfigured()}> + Save + + + Reset + + { user && @@ -203,14 +187,4 @@ class ManageUsersForm extends React.Component { } -ManageUsersForm.propTypes = { - classes: PropTypes.object.isRequired, - userData: PropTypes.object, - onSubmit: PropTypes.func.isRequired, - onReset: PropTypes.func.isRequired, - setData: PropTypes.func.isRequired, - handleValueChange: PropTypes.func.isRequired, - authenticationContext: PropTypes.object.isRequired, -}; - -export default withAuthenticationContext(withStyles(styles)(ManageUsersForm)); +export default withAuthenticatedContext(ManageUsersForm); diff --git a/interface/src/security/Security.tsx b/interface/src/security/Security.tsx new file mode 100644 index 0000000..4371efa --- /dev/null +++ b/interface/src/security/Security.tsx @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { AuthenticatedContextProps, AuthenticatedRoute } from '../authentication'; +import { MenuAppBar } from '../components'; + +import ManageUsersController from './ManageUsersController'; +import SecuritySettingsController from './SecuritySettingsController'; + +type SecurityProps = AuthenticatedContextProps & RouteComponentProps; + +class Security extends Component { + + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { + this.props.history.push(path); + }; + + render() { + return ( + + + + + + + + + + + + ) + } +} + +export default Security; diff --git a/interface/src/security/SecuritySettingsController.tsx b/interface/src/security/SecuritySettingsController.tsx new file mode 100644 index 0000000..d42328a --- /dev/null +++ b/interface/src/security/SecuritySettingsController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { SECURITY_SETTINGS_ENDPOINT } from '../api'; + +import SecuritySettingsForm from './SecuritySettingsForm'; +import { SecuritySettings } from './types'; + +type SecuritySettingsControllerProps = RestControllerProps; + +class SecuritySettingsController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(SECURITY_SETTINGS_ENDPOINT, SecuritySettingsController); diff --git a/interface/src/security/SecuritySettingsForm.tsx b/interface/src/security/SecuritySettingsForm.tsx new file mode 100644 index 0000000..22d23b5 --- /dev/null +++ b/interface/src/security/SecuritySettingsForm.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { ValidatorForm } from 'react-material-ui-form-validator'; + +import { Box, Typography } from '@material-ui/core'; +import SaveIcon from '@material-ui/icons/Save'; + +import { withAuthenticatedContext, AuthenticatedContextProps } from '../authentication'; +import { RestFormProps, PasswordValidator, FormActions, FormButton } from '../components'; + +import { SecuritySettings } from './types'; + +type SecuritySettingsFormProps = RestFormProps & AuthenticatedContextProps; + +class SecuritySettingsForm extends React.Component { + + onSubmit = () => { + this.props.saveData(); + this.props.authenticatedContext.refresh(); + } + + render() { + const { data, handleValueChange, loadData } = this.props; + return ( + + + + + If you modify the JWT Secret, all users will be logged out. + + + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); + } + +} + +export default withAuthenticatedContext(SecuritySettingsForm); diff --git a/interface/src/security/UserForm.tsx b/interface/src/security/UserForm.tsx new file mode 100644 index 0000000..92b7c67 --- /dev/null +++ b/interface/src/security/UserForm.tsx @@ -0,0 +1,87 @@ +import React, { RefObject } from 'react'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; + +import { Dialog, DialogTitle, DialogContent, DialogActions, Checkbox } from '@material-ui/core'; + +import { PasswordValidator, BlockFormControlLabel, FormButton } from '../components'; + +import { User } from './types'; + +interface UserFormProps { + creating: boolean; + user: User; + uniqueUsername: (value: any) => boolean; + handleValueChange: (name: keyof User) => (event: React.ChangeEvent) => void; + handleCheckboxChange: (name: keyof User) => (event: React.ChangeEvent, checked: boolean) => void; + onDoneEditing: () => void; + onCancelEditing: () => void; +} + +class UserForm extends React.Component { + + formRef: RefObject = React.createRef(); + + componentDidMount() { + ValidatorForm.addValidationRule('uniqueUsername', this.props.uniqueUsername); + } + + submit = () => { + this.formRef.current.submit(); + } + + render() { + const { user, creating, handleValueChange, handleCheckboxChange, onDoneEditing, onCancelEditing } = this.props; + return ( + + + {creating ? 'Add' : 'Modify'} User + + + + + } + label="Admin?" + /> + + + + Done + + + Cancel + + + + + ); + } +} + +export default UserForm; diff --git a/interface/src/security/types.ts b/interface/src/security/types.ts new file mode 100644 index 0000000..99d54de --- /dev/null +++ b/interface/src/security/types.ts @@ -0,0 +1,11 @@ +export interface User { + username: string; + password: string; + admin: boolean; +} + +export interface SecuritySettings { + users: User[]; + jwt_secret: string; +} + diff --git a/interface/src/serviceWorker.ts b/interface/src/serviceWorker.ts new file mode 100644 index 0000000..d5f0275 --- /dev/null +++ b/interface/src/serviceWorker.ts @@ -0,0 +1,145 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +type Config = { + onSuccess?: (registration: ServiceWorkerRegistration) => void; + onUpdate?: (registration: ServiceWorkerRegistration) => void; +}; + +export function register(config?: Config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL( + process.env.PUBLIC_URL, + window.location.href + ); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl: string, config?: Config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl: string, config?: Config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' } + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/interface/src/system/OTASettingsController.tsx b/interface/src/system/OTASettingsController.tsx new file mode 100644 index 0000000..2f683b3 --- /dev/null +++ b/interface/src/system/OTASettingsController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { OTA_SETTINGS_ENDPOINT } from '../api'; + +import OTASettingsForm from './OTASettingsForm'; +import { OTASettings } from './types'; + +type OTASettingsControllerProps = RestControllerProps; + +class OTASettingsController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(OTA_SETTINGS_ENDPOINT, OTASettingsController); diff --git a/interface/src/system/OTASettingsForm.tsx b/interface/src/system/OTASettingsForm.tsx new file mode 100644 index 0000000..22947e6 --- /dev/null +++ b/interface/src/system/OTASettingsForm.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; + +import { Checkbox } from '@material-ui/core'; +import SaveIcon from '@material-ui/icons/Save'; + +import { RestFormProps, BlockFormControlLabel, PasswordValidator, FormButton, FormActions } from '../components'; +import {isIP,isHostname,or} from '../validators'; + +import { OTASettings } from './types'; + +type OTASettingsFormProps = RestFormProps; + +class OTASettingsForm extends React.Component { + + componentDidMount() { + ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); + } + + render() { + const { data, handleValueChange, handleCheckboxChange, saveData, loadData } = this.props; + return ( + + + } + label="Enable OTA Updates?" + /> + + + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); + } +} + +export default OTASettingsForm; diff --git a/interface/src/system/System.tsx b/interface/src/system/System.tsx new file mode 100644 index 0000000..c425e9b --- /dev/null +++ b/interface/src/system/System.tsx @@ -0,0 +1,38 @@ +import React, { Component } from 'react'; +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { withAuthenticatedContext, AuthenticatedContextProps, AuthenticatedRoute } from '../authentication'; +import { MenuAppBar } from '../components'; + +import SystemStatusController from './SystemStatusController'; +import OTASettingsController from './OTASettingsController'; + +type SystemProps = AuthenticatedContextProps & RouteComponentProps; + +class System extends Component { + + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { + this.props.history.push(path); + }; + + render() { + const { authenticatedContext } = this.props; + return ( + + + + + + + + + + + + ) + } +} + +export default withAuthenticatedContext(System); diff --git a/interface/src/system/SystemStatusController.tsx b/interface/src/system/SystemStatusController.tsx new file mode 100644 index 0000000..abee0b5 --- /dev/null +++ b/interface/src/system/SystemStatusController.tsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import { SYSTEM_STATUS_ENDPOINT } from '../api'; + +import SystemStatusForm from './SystemStatusForm'; +import { SystemStatus } from './types'; + +type SystemStatusControllerProps = RestControllerProps; + +class SystemStatusController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(SYSTEM_STATUS_ENDPOINT, SystemStatusController); diff --git a/interface/src/containers/SystemStatus.js b/interface/src/system/SystemStatusForm.tsx similarity index 61% rename from interface/src/containers/SystemStatus.js rename to interface/src/system/SystemStatusForm.tsx index b502cfd..25d2744 100644 --- a/interface/src/containers/SystemStatus.js +++ b/interface/src/system/SystemStatusForm.tsx @@ -1,18 +1,7 @@ import React, { Component, Fragment } from 'react'; -import { withSnackbar } from 'notistack'; -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import ListItemText from '@material-ui/core/ListItemText'; -import Avatar from '@material-ui/core/Avatar'; -import Divider from '@material-ui/core/Divider'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import DialogContent from '@material-ui/core/DialogContent'; +import { Avatar, Button, Divider, Dialog, DialogTitle, DialogContent, DialogActions } from '@material-ui/core'; +import { List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'; import DevicesIcon from '@material-ui/icons/Devices'; import MemoryIcon from '@material-ui/icons/Memory'; @@ -22,36 +11,28 @@ import DataUsageIcon from '@material-ui/icons/DataUsage'; import AutorenewIcon from '@material-ui/icons/Autorenew'; import RefreshIcon from '@material-ui/icons/Refresh'; -import { SYSTEM_STATUS_ENDPOINT, RESTART_ENDPOINT } from '../constants/Endpoints'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; -import SectionContent from '../components/SectionContent'; -import { redirectingAuthorizedFetch } from '../authentication/Authentication'; +import { redirectingAuthorizedFetch } from '../authentication'; +import { RestFormProps, FormButton, FormActions } from '../components'; +import { RESTART_ENDPOINT } from '../api'; -const styles = theme => ({ - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); +import { SystemStatus } from './types'; -class SystemStatus extends Component { +interface SystemStatusFormState { + confirmRestart: boolean; + processing: boolean; +} +type SystemStatusFormProps = RestFormProps; - constructor(props) { - super(props); +class SystemStatusForm extends Component { - this.state = { - confirmRestart: false, - processing: false - } + state: SystemStatusFormState = { + confirmRestart: false, + processing: false } - componentDidMount() { - this.props.loadData(); - } - - createListItems(data, classes) { + createListItems() { + const { data } = this.props return ( @@ -103,20 +84,26 @@ class SystemStatus extends Component { ); } - renderSystemStatus(data, classes) { + renderRestartDialog() { return ( -
- - {this.createListItems(data, classes)} - - - -
- ); + + Confirm Restart + + Are you sure you want to restart the device? + + + + + + + ) } onRestart = () => { @@ -144,45 +131,25 @@ class SystemStatus extends Component { }); } - renderRestartDialog() { - return ( - - Confirm Restart - - Are you sure you want to restart the device? - - - - - - - ) - } - render() { - const { data, fetched, errorMessage, loadData, classes } = this.props; return ( - - this.renderSystemStatus(data, classes) - } - /> + + + {this.createListItems()} + + + } variant="contained" color="secondary" onClick={this.props.loadData}> + Refresh + + } variant="contained" color="primary" onClick={this.onRestart}> + Restart + + {this.renderRestartDialog()} - - ) +
+ ); } } -export default withSnackbar(restComponent(SYSTEM_STATUS_ENDPOINT, withStyles(styles)(SystemStatus))); +export default SystemStatusForm; diff --git a/interface/src/system/types.ts b/interface/src/system/types.ts new file mode 100644 index 0000000..7159839 --- /dev/null +++ b/interface/src/system/types.ts @@ -0,0 +1,14 @@ +export interface SystemStatus { + esp_platform: string; + cpu_freq_mhz: number; + free_heap: number; + sketch_size: number; + free_sketch_space: number; + flash_chip_size: number; +} + +export interface OTASettings { + enabled: boolean; + port: number; + password: string; +} diff --git a/interface/src/validators/index.ts b/interface/src/validators/index.ts new file mode 100644 index 0000000..82aafa8 --- /dev/null +++ b/interface/src/validators/index.ts @@ -0,0 +1,4 @@ +export { default as isHostname } from './isHostname'; +export { default as isIP } from './isIP'; +export { default as optional } from './optional'; +export { default as or } from './or'; diff --git a/interface/src/validators/isHostname.js b/interface/src/validators/isHostname.ts similarity index 82% rename from interface/src/validators/isHostname.js rename to interface/src/validators/isHostname.ts index 557903e..7c1ca25 100644 --- a/interface/src/validators/isHostname.js +++ b/interface/src/validators/isHostname.ts @@ -1,6 +1,6 @@ const hostnameLengthRegex = /^.{0,32}$/ const hostnamePatternRegex = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/ -export default function isHostname(hostname) { +export default function isHostname(hostname: string) { return hostnameLengthRegex.test(hostname) && hostnamePatternRegex.test(hostname); } diff --git a/interface/src/validators/isIP.js b/interface/src/validators/isIP.ts similarity index 81% rename from interface/src/validators/isIP.js rename to interface/src/validators/isIP.ts index 1225154..439c57c 100644 --- a/interface/src/validators/isIP.js +++ b/interface/src/validators/isIP.ts @@ -1,5 +1,5 @@ const ipAddressRegexp = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ -export default function isIp(ipAddress) { +export default function isIp(ipAddress: string) { return ipAddressRegexp.test(ipAddress); } \ No newline at end of file diff --git a/interface/src/validators/optional.js b/interface/src/validators/optional.js deleted file mode 100644 index 583bc45..0000000 --- a/interface/src/validators/optional.js +++ /dev/null @@ -1 +0,0 @@ -export default validator => value => !value || validator(value); diff --git a/interface/src/validators/optional.ts b/interface/src/validators/optional.ts new file mode 100644 index 0000000..841c57b --- /dev/null +++ b/interface/src/validators/optional.ts @@ -0,0 +1 @@ +export default (validator: (value: any) => boolean) => (value: any) => !value || validator(value); diff --git a/interface/src/validators/or.js b/interface/src/validators/or.js deleted file mode 100644 index 96543f7..0000000 --- a/interface/src/validators/or.js +++ /dev/null @@ -1 +0,0 @@ -export default (validator1, validator2) => value => validator1(value) || validator2(value); diff --git a/interface/src/validators/or.ts b/interface/src/validators/or.ts new file mode 100644 index 0000000..047ecf0 --- /dev/null +++ b/interface/src/validators/or.ts @@ -0,0 +1,3 @@ +export default (validator1: (value: any) => boolean, validator2: (value: any) => boolean) => { + return (value: any) => validator1(value) || validator2(value); +} diff --git a/interface/src/wifi/WiFiConnection.tsx b/interface/src/wifi/WiFiConnection.tsx new file mode 100644 index 0000000..506aefa --- /dev/null +++ b/interface/src/wifi/WiFiConnection.tsx @@ -0,0 +1,62 @@ +import React, { Component } from 'react'; +import { Redirect, Switch, RouteComponentProps } from 'react-router-dom' + +import { Tabs, Tab } from '@material-ui/core'; + +import { withAuthenticatedContext, AuthenticatedContextProps, AuthenticatedRoute } from '../authentication'; +import { MenuAppBar } from '../components'; + +import WiFiStatusController from './WiFiStatusController'; +import WiFiSettingsController from './WiFiSettingsController'; +import WiFiNetworkScanner from './WiFiNetworkScanner'; +import { WiFiConnectionContext } from './WiFiConnectionContext'; +import { WiFiNetwork } from './types'; + +type WiFiConnectionProps = AuthenticatedContextProps & RouteComponentProps; + +class WiFiConnection extends Component { + + constructor(props: WiFiConnectionProps) { + super(props); + this.state = { + selectNetwork: this.selectNetwork, + deselectNetwork: this.deselectNetwork + }; + } + + selectNetwork = (network: WiFiNetwork) => { + this.setState({ selectedNetwork: network }); + this.props.history.push('/wifi/settings'); + } + + deselectNetwork = () => { + this.setState({ selectedNetwork: undefined }); + } + + handleTabChange = (event: React.ChangeEvent<{}>, path: string) => { + this.props.history.push(path); + }; + + render() { + const { authenticatedContext } = this.props; + return ( + + + + + + + + + + + + + + + + ) + } +} + +export default withAuthenticatedContext(WiFiConnection); diff --git a/interface/src/wifi/WiFiConnectionContext.tsx b/interface/src/wifi/WiFiConnectionContext.tsx new file mode 100644 index 0000000..85b0c17 --- /dev/null +++ b/interface/src/wifi/WiFiConnectionContext.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { WiFiNetwork } from './types'; + +export interface WiFiConnectionContext { + selectedNetwork?: WiFiNetwork; + selectNetwork: (network: WiFiNetwork) => void; + deselectNetwork: () => void; +} + +const WiFiConnectionContextDefaultValue = {} as WiFiConnectionContext +export const WiFiConnectionContext = React.createContext( + WiFiConnectionContextDefaultValue +); diff --git a/interface/src/wifi/WiFiNetworkScanner.tsx b/interface/src/wifi/WiFiNetworkScanner.tsx new file mode 100644 index 0000000..c1be649 --- /dev/null +++ b/interface/src/wifi/WiFiNetworkScanner.tsx @@ -0,0 +1,168 @@ +import React, { Component } from 'react'; +import { withSnackbar, WithSnackbarProps } from 'notistack'; + +import { createStyles, WithStyles, Theme, withStyles, Typography, LinearProgress } from '@material-ui/core'; +import PermScanWifiIcon from '@material-ui/icons/PermScanWifi'; + +import { FormActions, FormButton, SectionContent } from '../components'; +import { redirectingAuthorizedFetch } from '../authentication'; +import { SCAN_NETWORKS_ENDPOINT, LIST_NETWORKS_ENDPOINT } from '../api'; + +import WiFiNetworkSelector from './WiFiNetworkSelector'; +import { WiFiNetworkList, WiFiNetwork } from './types'; + +const NUM_POLLS = 10 +const POLLING_FREQUENCY = 500 +const RETRY_EXCEPTION_TYPE = "retry" + +interface WiFiNetworkScannerState { + scanningForNetworks: boolean; + errorMessage?: string; + networkList?: WiFiNetworkList; +} + +const styles = (theme: Theme) => createStyles({ + scanningSettings: { + margin: theme.spacing(0.5), + }, + scanningSettingsDetails: { + margin: theme.spacing(4), + textAlign: "center" + }, + scanningProgress: { + margin: theme.spacing(4), + textAlign: "center" + } +}); + +type WiFiNetworkScannerProps = WithSnackbarProps & WithStyles; + +class WiFiNetworkScanner extends Component { + + pollCount: number = 0; + + state: WiFiNetworkScannerState = { + scanningForNetworks: false, + }; + + componentDidMount() { + this.scanNetworks(); + } + + requestNetworkScan = () => { + const { scanningForNetworks } = this.state; + if (!scanningForNetworks) { + this.scanNetworks(); + } + } + + scanNetworks() { + this.pollCount = 0; + this.setState({ scanningForNetworks: true, networkList: undefined, errorMessage: undefined }); + redirectingAuthorizedFetch(SCAN_NETWORKS_ENDPOINT).then(response => { + if (response.status === 202) { + this.schedulePollTimeout(); + return; + } + throw Error("Scanning for networks returned unexpected response code: " + response.status); + }).catch(error => { + this.props.enqueueSnackbar("Problem scanning: " + error.message, { + variant: 'error', + }); + this.setState({ scanningForNetworks: false, networkList: undefined, errorMessage: error.message }); + }); + } + + schedulePollTimeout() { + setTimeout(this.pollNetworkList, POLLING_FREQUENCY); + } + + retryError() { + return { + name: RETRY_EXCEPTION_TYPE, + message: "Network list not ready, will retry in " + POLLING_FREQUENCY + "ms." + }; + } + + compareNetworks(network1: WiFiNetwork, network2: WiFiNetwork) { + if (network1.rssi < network2.rssi) + return 1; + if (network1.rssi > network2.rssi) + return -1; + return 0; + } + + pollNetworkList = () => { + redirectingAuthorizedFetch(LIST_NETWORKS_ENDPOINT) + .then(response => { + if (response.status === 200) { + return response.json(); + } + if (response.status === 202) { + if (++this.pollCount < NUM_POLLS) { + this.schedulePollTimeout(); + throw this.retryError(); + } else { + throw Error("Device did not return network list in timely manner."); + } + } + throw Error("Device returned unexpected response code: " + response.status); + }) + .then(json => { + json.networks.sort(this.compareNetworks) + this.setState({ scanningForNetworks: false, networkList: json, errorMessage: undefined }) + }) + .catch(error => { + if (error.name !== RETRY_EXCEPTION_TYPE) { + this.props.enqueueSnackbar("Problem scanning: " + error.message, { + variant: 'error', + }); + this.setState({ scanningForNetworks: false, networkList: undefined, errorMessage: error.message }); + } + }); + } + + renderNetworkScanner() { + const { classes } = this.props; + const { scanningForNetworks, networkList, errorMessage } = this.state; + if (scanningForNetworks || !networkList) { + return ( +
+ + + Scanning... + +
+ ); + } + if (errorMessage) { + return ( +
+ + {errorMessage} + +
+ ); + } + return ( + + ); + } + + render() { + const { scanningForNetworks } = this.state; + return ( + + {this.renderNetworkScanner()} + + } variant="contained" color="secondary" onClick={this.requestNetworkScan} disabled={scanningForNetworks}> + Scan again... + + + + ); + } + +} + +export default withSnackbar(withStyles(styles)(WiFiNetworkScanner)); diff --git a/interface/src/wifi/WiFiNetworkSelector.tsx b/interface/src/wifi/WiFiNetworkSelector.tsx new file mode 100644 index 0000000..2043651 --- /dev/null +++ b/interface/src/wifi/WiFiNetworkSelector.tsx @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; + +import { Avatar, Badge } from '@material-ui/core'; +import { List, ListItem, ListItemIcon, ListItemText, ListItemAvatar } from '@material-ui/core'; + +import WifiIcon from '@material-ui/icons/Wifi'; +import LockIcon from '@material-ui/icons/Lock'; +import LockOpenIcon from '@material-ui/icons/LockOpen'; + +import { isNetworkOpen, networkSecurityMode } from './WiFiSecurityModes'; +import { WiFiConnectionContext } from './WiFiConnectionContext'; +import { WiFiNetwork, WiFiNetworkList } from './types'; + +interface WiFiNetworkSelectorProps { + networkList: WiFiNetworkList; +} + +class WiFiNetworkSelector extends Component { + + static contextType = WiFiConnectionContext; + context!: React.ContextType; + + renderNetwork = (network: WiFiNetwork) => { + return ( + this.context.selectNetwork(network)}> + + + {isNetworkOpen(network) ? : } + + + + + + + + + + ); + } + + render() { + return ( + + {this.props.networkList.networks.map(this.renderNetwork)} + + ); + } + +} + +export default WiFiNetworkSelector; diff --git a/interface/src/constants/WiFiSecurityModes.js b/interface/src/wifi/WiFiSecurityModes.ts similarity index 65% rename from interface/src/constants/WiFiSecurityModes.js rename to interface/src/wifi/WiFiSecurityModes.ts index db33d4c..06c7bdb 100644 --- a/interface/src/constants/WiFiSecurityModes.js +++ b/interface/src/wifi/WiFiSecurityModes.ts @@ -1,3 +1,5 @@ +import { WiFiNetwork } from "./types"; + export const WIFI_AUTH_OPEN = 0; export const WIFI_AUTH_WEP = 1; export const WIFI_AUTH_WEP_PSK = 2; @@ -5,10 +7,10 @@ export const WIFI_AUTH_WEP2_PSK = 3; export const WIFI_AUTH_WPA_WPA2_PSK = 4; export const WIFI_AUTH_WPA2_ENTERPRISE = 5; -export const isNetworkOpen = selectedNetwork => selectedNetwork && selectedNetwork.encryption_type === WIFI_AUTH_OPEN; +export const isNetworkOpen = ({ encryption_type }: WiFiNetwork) => encryption_type === WIFI_AUTH_OPEN; -export const networkSecurityMode = selectedNetwork => { - switch (selectedNetwork.encryption_type){ +export const networkSecurityMode = ({ encryption_type }: WiFiNetwork) => { + switch (encryption_type) { case WIFI_AUTH_WEP: case WIFI_AUTH_WEP_PSK: return "WEP"; @@ -17,7 +19,7 @@ export const networkSecurityMode = selectedNetwork => { case WIFI_AUTH_WPA_WPA2_PSK: return "WPA/WEP2"; case WIFI_AUTH_WPA2_ENTERPRISE: - return "WEP2 Enterprise"; + return "WEP2 Enterprise"; case WIFI_AUTH_OPEN: return "None"; default: diff --git a/interface/src/wifi/WiFiSettingsController.tsx b/interface/src/wifi/WiFiSettingsController.tsx new file mode 100644 index 0000000..b5ad0f8 --- /dev/null +++ b/interface/src/wifi/WiFiSettingsController.tsx @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import WiFiSettingsForm from './WiFiSettingsForm'; +import { WiFiConnectionContext } from './WiFiConnectionContext'; +import { WIFI_SETTINGS_ENDPOINT } from '../api'; +import { WiFiSettings } from './types'; + +type WiFiSettingsControllerProps = RestControllerProps; + +class WiFiSettingsController extends Component { + + static contextType = WiFiConnectionContext; + context!: React.ContextType; + + componentDidMount() { + const { selectedNetwork } = this.context; + if (selectedNetwork) { + const wifiSettings: WiFiSettings = { + ssid: selectedNetwork.ssid, + password: "", + hostname: "esp8266-react", + static_ip_config: false, + } + this.props.setData(wifiSettings); + } else { + this.props.loadData(); + } + } + + deselectNetworkAndLoadData = () => { + this.context.deselectNetwork(); + this.props.loadData(); + } + + componentWillUnmount() { + this.context.deselectNetwork(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(WIFI_SETTINGS_ENDPOINT, WiFiSettingsController); diff --git a/interface/src/wifi/WiFiSettingsForm.tsx b/interface/src/wifi/WiFiSettingsForm.tsx new file mode 100644 index 0000000..ddaea91 --- /dev/null +++ b/interface/src/wifi/WiFiSettingsForm.tsx @@ -0,0 +1,179 @@ +import React, { Fragment } from 'react'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; + +import { Checkbox, List, ListItem, ListItemText, ListItemAvatar, ListItemSecondaryAction } from '@material-ui/core'; + +import Avatar from '@material-ui/core/Avatar'; +import IconButton from '@material-ui/core/IconButton'; +import LockIcon from '@material-ui/icons/Lock'; +import LockOpenIcon from '@material-ui/icons/LockOpen'; +import DeleteIcon from '@material-ui/icons/Delete'; +import SaveIcon from '@material-ui/icons/Save'; + +import { RestFormProps, PasswordValidator, BlockFormControlLabel, FormActions, FormButton } from '../components'; +import { isIP, isHostname, optional } from '../validators'; + +import { WiFiConnectionContext } from './WiFiConnectionContext'; +import { isNetworkOpen, networkSecurityMode } from './WiFiSecurityModes'; +import { WiFiSettings } from './types'; + +type WiFiStatusFormProps = RestFormProps; + +class WiFiSettingsForm extends React.Component { + + static contextType = WiFiConnectionContext; + context!: React.ContextType; + + componentWillMount() { + ValidatorForm.addValidationRule('isIP', isIP); + ValidatorForm.addValidationRule('isHostname', isHostname); + ValidatorForm.addValidationRule('isOptionalIP', optional(isIP)); + } + + render() { + const { selectedNetwork, deselectNetwork } = this.context; + const { data, handleValueChange, handleCheckboxChange, saveData, loadData } = this.props; + return ( + + { + selectedNetwork ? + + + + + {isNetworkOpen(selectedNetwork) ? : } + + + + + + + + + + + : + + } + { + (!selectedNetwork || !isNetworkOpen(selectedNetwork)) && + + } + + + } + label="Static IP Config?" + /> + { + data.static_ip_config && + + + + + + + + } + + } variant="contained" color="primary" type="submit"> + Save + + + Reset + + + + ); + } +} + +export default WiFiSettingsForm; diff --git a/interface/src/constants/WiFiConnectionStatus.js b/interface/src/wifi/WiFiStatus.ts similarity index 63% rename from interface/src/constants/WiFiConnectionStatus.js rename to interface/src/wifi/WiFiStatus.ts index b7ba819..bbab81f 100644 --- a/interface/src/constants/WiFiConnectionStatus.js +++ b/interface/src/wifi/WiFiStatus.ts @@ -1,4 +1,5 @@ -import * as Highlight from '../constants/Highlight'; +import { Theme } from '@material-ui/core'; +import { WiFiStatus } from './types'; export const WIFI_STATUS_IDLE = 0; export const WIFI_STATUS_NO_SSID_AVAIL = 1; @@ -7,25 +8,25 @@ export const WIFI_STATUS_CONNECT_FAILED = 4; export const WIFI_STATUS_CONNECTION_LOST = 5; export const WIFI_STATUS_DISCONNECTED = 6; -export const isConnected = wifiStatus => wifiStatus && wifiStatus.status === WIFI_STATUS_CONNECTED; +export const isConnected = ({ status }: WiFiStatus) => status === WIFI_STATUS_CONNECTED; -export const connectionStatusHighlight = wifiStatus => { - switch (wifiStatus.status){ +export const wifiStatusHighlight = ({ status }: WiFiStatus, theme: Theme) => { + switch (status) { case WIFI_STATUS_IDLE: case WIFI_STATUS_DISCONNECTED: - return Highlight.IDLE; + return theme.palette.info.main; case WIFI_STATUS_CONNECTED: - return Highlight.SUCCESS; + return theme.palette.success.main; case WIFI_STATUS_CONNECT_FAILED: case WIFI_STATUS_CONNECTION_LOST: - return Highlight.ERROR; + return theme.palette.error.main; default: - return Highlight.WARN; + return theme.palette.warning.main; } } -export const connectionStatus = wifiStatus => { - switch (wifiStatus.status){ +export const wifiStatus = ({ status }: WiFiStatus) => { + switch (status) { case WIFI_STATUS_IDLE: return "Idle"; case WIFI_STATUS_NO_SSID_AVAIL: diff --git a/interface/src/wifi/WiFiStatusController.tsx b/interface/src/wifi/WiFiStatusController.tsx new file mode 100644 index 0000000..2220595 --- /dev/null +++ b/interface/src/wifi/WiFiStatusController.tsx @@ -0,0 +1,29 @@ +import React, { Component } from 'react'; + +import {restController, RestControllerProps, RestFormLoader, SectionContent } from '../components'; +import WiFiStatusForm from './WiFiStatusForm'; +import { WIFI_STATUS_ENDPOINT } from '../api'; +import { WiFiStatus } from './types'; + +type WiFiStatusControllerProps = RestControllerProps; + +class WiFiStatusController extends Component { + + componentDidMount() { + this.props.loadData(); + } + + render() { + return ( + + } + /> + + ); + } + +} + +export default restController(WIFI_STATUS_ENDPOINT, WiFiStatusController); diff --git a/interface/src/containers/WiFiStatus.js b/interface/src/wifi/WiFiStatusForm.tsx similarity index 54% rename from interface/src/containers/WiFiStatus.js rename to interface/src/wifi/WiFiStatusForm.tsx index 419105c..5b60dc6 100644 --- a/interface/src/containers/WiFiStatus.js +++ b/interface/src/wifi/WiFiStatusForm.tsx @@ -1,69 +1,41 @@ import React, { Component, Fragment } from 'react'; -import { withStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemText from '@material-ui/core/ListItemText'; -import ListItemAvatar from '@material-ui/core/ListItemAvatar'; -import Avatar from '@material-ui/core/Avatar'; -import Divider from '@material-ui/core/Divider'; -import WifiIcon from '@material-ui/icons/Wifi'; +import { WithTheme, withTheme } from '@material-ui/core/styles'; +import { Avatar, Divider, List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core'; + import DNSIcon from '@material-ui/icons/Dns'; +import WifiIcon from '@material-ui/icons/Wifi'; import SettingsInputComponentIcon from '@material-ui/icons/SettingsInputComponent'; import SettingsInputAntennaIcon from '@material-ui/icons/SettingsInputAntenna'; import DeviceHubIcon from '@material-ui/icons/DeviceHub'; import RefreshIcon from '@material-ui/icons/Refresh'; -import SectionContent from '../components/SectionContent'; -import { WIFI_STATUS_ENDPOINT } from '../constants/Endpoints'; -import { isConnected, connectionStatus, connectionStatusHighlight } from '../constants/WiFiConnectionStatus'; -import * as Highlight from '../constants/Highlight'; -import { restComponent } from '../components/RestComponent'; -import LoadingNotification from '../components/LoadingNotification'; +import { RestFormProps, FormActions, FormButton, HighlightAvatar } from '../components'; +import { wifiStatus, wifiStatusHighlight, isConnected } from './WiFiStatus'; +import { WiFiStatus } from './types'; -const styles = theme => ({ - ["wifiStatus_" + Highlight.IDLE]: { - backgroundColor: theme.palette.highlight_idle - }, - ["wifiStatus_" + Highlight.SUCCESS]: { - backgroundColor: theme.palette.highlight_success - }, - ["wifiStatus_" + Highlight.ERROR]: { - backgroundColor: theme.palette.highlight_error - }, - ["wifiStatus_" + Highlight.WARN]: { - backgroundColor: theme.palette.highlight_warn - }, - button: { - marginRight: theme.spacing(2), - marginTop: theme.spacing(2), - } -}); +type WiFiStatusFormProps = RestFormProps & WithTheme; -class WiFiStatus extends Component { +class WiFiStatusForm extends Component { - componentDidMount() { - this.props.loadData(); - } - - dnsServers(status) { + dnsServers(status: WiFiStatus) { if (!status.dns_ip_1) { return "none"; } return status.dns_ip_1 + (status.dns_ip_2 ? ',' + status.dns_ip_2 : ''); } - createListItems(data, classes) { + createListItems() { + const { data, theme } = this.props return ( - + - + - + { @@ -125,35 +97,21 @@ class WiFiStatus extends Component { ); } - renderWiFiStatus(data, classes) { - return ( -
- - {this.createListItems(data, classes)} - - -
- ); - } - render() { - const { data, fetched, errorMessage, loadData, classes } = this.props; return ( - - this.renderWiFiStatus(data, classes) - } - /> - + + + {this.createListItems()} + + + } variant="contained" color="secondary" onClick={this.props.loadData}> + Refresh + + + ); } } -export default restComponent(WIFI_STATUS_ENDPOINT, withStyles(styles)(WiFiStatus)); +export default withTheme(WiFiStatusForm); diff --git a/interface/src/wifi/types.ts b/interface/src/wifi/types.ts new file mode 100644 index 0000000..2e5ec9f --- /dev/null +++ b/interface/src/wifi/types.ts @@ -0,0 +1,37 @@ +export interface WiFiStatus { + status: number; + local_ip: string; + mac_address: string; + rssi: number; + ssid: string; + bssid: string; + channel: number; + subnet_mask: string; + gateway_ip: string; + dns_ip_1: string; + dns_ip_2: string; +} + +export interface WiFiSettings { + ssid: string; + password: string; + hostname: string; + static_ip_config: boolean; + local_ip?: string; + gateway_ip?: string; + subnet_mask?: string; + dns_ip_1?: string; + dns_ip_2?: string; +} + +export interface WiFiNetworkList { + networks: WiFiNetwork[]; +} + +export interface WiFiNetwork { + rssi: number; + ssid: string; + bssid: string; + channel: number; + encryption_type: number; +} diff --git a/interface/tsconfig.json b/interface/tsconfig.json new file mode 100644 index 0000000..f2850b7 --- /dev/null +++ b/interface/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react" + }, + "include": [ + "src" + ] +} diff --git a/media/dark.png b/media/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..93d2132b2360d61f3c92b092bf452a972f6c93c8 GIT binary patch literal 64313 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 literal 0 HcmV?d00001 diff --git a/media/screenshots.png b/media/screenshots.png index 27a504e6a5bb1f910aafac307aa111335322cd4d..9b6d17cc99dafc80c6acf6735f7048699626529b 100644 GIT binary patch literal 66132 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 literal 52362 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 avrZ_Wsg3F*AD{5!j;biDKPpi)`S^dcX6}9f