From 62afe391b28a7b9c72c454fc0ab232aa99cc3e13 Mon Sep 17 00:00:00 2001 From: Sergio Betanzos Date: Wed, 20 Oct 2021 15:51:03 +0200 Subject: [PATCH] F #5422: Add new tabs to create template form (#1534) --- .../etc/sunstone/admin/vm-template-tab.yaml | 17 +- .../etc/sunstone/user/vm-template-tab.yaml | 22 +- src/fireedge/package-lock.json | 5457 +++++------------ src/fireedge/package.json | 37 +- .../src/client/apps/provision/index.js | 3 + .../src/client/apps/sunstone/index.js | 3 + .../src/client/apps/sunstone/routesOne.js | 13 +- .../client/components/DebugLog/ansiHtml.js | 2 +- .../src/client/components/Footer/index.js | 9 +- .../FormControl/AutocompleteController.js | 137 +- .../FormControl/CheckboxController.js | 102 +- .../components/FormControl/ErrorHelper.js | 48 +- .../components/FormControl/FileController.js | 114 +- .../FormControl/PasswordController.js | 5 +- .../FormControl/SelectController.js | 128 +- .../FormControl/SliderController.js | 127 +- .../FormControl/SwitchController.js | 102 +- .../components/FormControl/TableController.js | 69 +- .../components/FormControl/TextController.js | 107 +- .../FormControl/TimeController-TODO.js | 10 +- .../components/FormControl/TimeController.js | 70 +- .../FormControl/ToggleController.js | 120 + .../client/components/FormControl/Tooltip.js | 47 +- .../client/components/FormControl/index.js | 2 + .../components/FormStepper/MobileStepper.js | 12 +- .../client/components/FormStepper/Stepper.js | 9 +- .../client/components/FormStepper/index.js | 9 +- .../client/components/Forms/FormWithSchema.js | 50 +- .../CreateForm/Steps/Connection/schema.js | 6 +- .../ExtraConfiguration/booting/bootOrder.js | 228 + .../ExtraConfiguration/booting/bootSchema.js | 219 + .../booting/featuresSchema.js | 150 + .../Steps/ExtraConfiguration/booting/index.js | 102 + .../booting/kernelSchema.js | 84 + .../booting/ramdiskSchema.js | 84 + .../ExtraConfiguration/booting/schema.js | 50 + .../Steps/ExtraConfiguration/context/index.js | 40 + .../ExtraConfiguration/context/schema.js | 29 + .../Steps/ExtraConfiguration/index.js | 111 + .../ExtraConfiguration/inputOutput/index.js | 52 + .../ExtraConfiguration/inputOutput/schema.js | 143 + .../Steps/ExtraConfiguration/networking.js | 148 + .../Steps/ExtraConfiguration/numa/index.js | 51 + .../Steps/ExtraConfiguration/numa/schema.js | 178 + .../ExtraConfiguration/placement/index.js | 60 + .../ExtraConfiguration/placement/schema.js | 57 + .../ExtraConfiguration/scheduleAction.js | 130 + .../Steps/ExtraConfiguration/schema.js | 55 + .../Steps/ExtraConfiguration/storage.js | 192 + .../Steps/General/capacitySchema.js | 139 + .../CreateForm/Steps/General/index.js | 77 + .../Steps/General/informationSchema.js | 108 + .../Steps/General/ownershipSchema.js | 64 + .../CreateForm/Steps/General/schema.js | 69 + .../CreateForm/Steps/General/styles.js | 30 + .../CreateForm/Steps/General/vcenterSchema.js | 73 + .../CreateForm/Steps/General/vmGroupSchema.js | 78 + .../VmTemplate/CreateForm/Steps/index.js | 37 + .../Forms/VmTemplate/CreateForm/index.js | 83 + .../BasicConfiguration/capacitySchema.js | 4 +- .../Steps/BasicConfiguration/index.js | 9 +- .../Steps/BasicConfiguration/schema.js | 2 +- .../Steps/ExtraConfiguration/index.js | 8 +- .../components/Forms/VmTemplate/index.js | 2 + .../src/client/components/HOC/Translate.js | 29 +- .../src/client/components/Header/Zone.js | 45 +- .../src/client/components/Header/index.js | 6 +- .../Icons/{docker.js => DockerIcon.js} | 2 +- .../{opennebula.js => OpenNebulaIcon.js} | 0 .../src/client/components/Icons/index.js | 4 +- .../src/client/components/Image/index.js | 100 +- .../src/client/components/Status/Chip.js | 29 +- .../Enhanced/Utils/GlobalActions/index.js | 2 +- .../components/Tables/Enhanced/Utils/index.js | 3 +- .../components/Tables/VmTemplates/actions.js | 22 +- .../src/client/components/Tabs/index.js | 5 +- .../Widgets/TotalProviders/index.js | 5 +- .../Widgets/TotalProvisionsByState/index.js | 2 +- src/fireedge/src/client/constants/index.js | 3 +- .../src/client/constants/translates.js | 208 +- .../src/client/constants/vmTemplate.js | 19 + .../Steps/Tiers/Steps/Policies/index.js | 2 +- .../Form/Create/index.js | 2 +- .../Form/Deploy/Steps/Tiers/index.js | 2 +- .../src/client/containers/Login/schema.js | 24 +- .../src/client/containers/Settings/index.js | 2 +- .../client/containers/VmTemplates/Create.js | 54 + src/fireedge/src/client/features/One/slice.js | 4 + src/fireedge/src/client/hooks/useFetch.js | 8 +- src/fireedge/src/client/hooks/useListForm.js | 2 +- src/fireedge/src/client/models/Host.js | 42 +- src/fireedge/src/client/theme/defaults.js | 42 +- src/fireedge/src/client/utils/helpers.js | 20 +- src/fireedge/src/client/utils/index.js | 1 + src/fireedge/src/client/utils/schema.js | 46 +- src/fireedge/src/client/utils/translation.js | 96 + 96 files changed, 5932 insertions(+), 4682 deletions(-) create mode 100644 src/fireedge/src/client/components/FormControl/ToggleController.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootOrder.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/featuresSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/kernelSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/ramdiskSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/scheduleAction.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/capacitySchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/informationSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/ownershipSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/styles.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vcenterSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vmGroupSchema.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/index.js create mode 100644 src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/index.js rename src/fireedge/src/client/components/Icons/{docker.js => DockerIcon.js} (99%) rename src/fireedge/src/client/components/Icons/{opennebula.js => OpenNebulaIcon.js} (100%) create mode 100644 src/fireedge/src/client/containers/VmTemplates/Create.js create mode 100644 src/fireedge/src/client/utils/translation.js diff --git a/src/fireedge/etc/sunstone/admin/vm-template-tab.yaml b/src/fireedge/etc/sunstone/admin/vm-template-tab.yaml index c474b9a8c3..cc8d85eb53 100644 --- a/src/fireedge/etc/sunstone/admin/vm-template-tab.yaml +++ b/src/fireedge/etc/sunstone/admin/vm-template-tab.yaml @@ -87,13 +87,22 @@ dialogs: sched_action: true booting: true create_dialog: - general: true + capacity: true + ownership: true + vm_group: true vcenter: enabled: true not_on: - - vcenter - storage: - enabled: true + - kvm + - lxc + - firecracker + network: true + storage: true + placement: true + input_output: true + sched_action: true + context: true + booting: true numa: enabled: true no_on: diff --git a/src/fireedge/etc/sunstone/user/vm-template-tab.yaml b/src/fireedge/etc/sunstone/user/vm-template-tab.yaml index 83e46acfe2..c5841b0fd8 100644 --- a/src/fireedge/etc/sunstone/user/vm-template-tab.yaml +++ b/src/fireedge/etc/sunstone/user/vm-template-tab.yaml @@ -87,15 +87,25 @@ dialogs: sched_action: true booting: true create_dialog: - general: true + information: true + capacity: true + ownership: true + vm_group: true vcenter: enabled: true - hypervisor: - - vcenter - storage: - enabled: true + not_on: + - kvm + - lxc + - firecracker + network: true + storage: true + placement: true + input_output: true + sched_action: true + context: true + booting: true numa: enabled: true - hypervisors: + no_on: - vcenter - kvm diff --git a/src/fireedge/package-lock.json b/src/fireedge/package-lock.json index 656b719e2b..1b2ad4ecad 100644 --- a/src/fireedge/package-lock.json +++ b/src/fireedge/package-lock.json @@ -9,18 +9,19 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@babel/cli": "7.14.5", - "@babel/core": "7.12.13", - "@babel/node": "7.12.13", - "@babel/plugin-proposal-class-properties": "7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.13", - "@babel/plugin-proposal-object-rest-spread": "7.12.13", - "@babel/plugin-proposal-optional-chaining": "7.12.13", - "@babel/preset-env": "7.12.13", - "@babel/preset-react": "7.12.13", + "@babel/cli": "7.15.7", + "@babel/core": "7.15.8", + "@babel/node": "7.15.8", + "@babel/plugin-proposal-class-properties": "7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.14.5", + "@babel/plugin-proposal-object-rest-spread": "7.15.6", + "@babel/plugin-proposal-optional-chaining": "7.14.5", + "@babel/preset-env": "7.15.8", + "@babel/preset-react": "7.14.5", "@emotion/react": "11.4.1", "@emotion/styled": "11.3.0", - "@hookform/resolvers": "1.3.7", + "@hookform/devtools": "4.0.1", + "@hookform/resolvers": "2.8.2", "@loadable/babel-plugin": "5.13.2", "@loadable/component": "5.15.0", "@loadable/server": "5.15.1", @@ -29,9 +30,9 @@ "@mui/material": "5.0.2", "@mui/styles": "5.0.1", "@mui/system": "5.0.2", - "@reduxjs/toolkit": "1.5.1", + "@reduxjs/toolkit": "1.6.2", "atob": "2.1.2", - "axios": "0.21.1", + "axios": "0.23.0", "babel-eslint": "10.1.0", "babel-loader": "8.2.1", "babel-plugin-module-resolver": "4.0.0", @@ -74,17 +75,17 @@ "react-dom": "17.0.2", "react-flatpickr": "3.10.7", "react-flow-renderer": "9.6.0", - "react-hook-form": "6.12.0", + "react-hook-form": "7.17.4", "react-json-pretty": "2.2.0", "react-minimal-pie-chart": "8.2.0", "react-opennebula-ace": "1.0.1", - "react-redux": "7.2.4", + "react-redux": "7.2.5", "react-router": "5.2.1", "react-router-dom": "5.3.0", "react-table": "7.7.0", "react-transition-group": "4.4.1", "react-virtual": "2.7.1", - "redux": "4.1.0", + "redux": "4.1.1", "redux-thunk": "2.3.0", "rimraf": "3.0.2", "socket.io": "4.1.2", @@ -110,7 +111,7 @@ "zeromq": "5.2.0" }, "devDependencies": { - "@pmmmwh/react-refresh-webpack-plugin": "0.5.0-rc.3", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.1", "cross-env": "7.0.2", "eslint": "7.11.0", "eslint-config-prettier": "6.11.0", @@ -128,17 +129,17 @@ "opennebula-generatepotfile": "1.0.0", "opennebula-potojson": "1.0.0", "react-refresh": "0.10.0", - "webpack-dev-middleware": "5.0.0", - "webpack-hot-middleware": "2.25.0" + "webpack-dev-middleware": "5.2.1", + "webpack-hot-middleware": "2.25.1" }, "engines": { "node": ">=10.21.0" } }, "node_modules/@babel/cli": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", - "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz", + "integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==", "dependencies": { "commander": "^4.0.1", "convert-source-map": "^1.1.0", @@ -156,7 +157,7 @@ "node": ">=6.9.0" }, "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0" }, "peerDependencies": { @@ -164,9 +165,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dependencies": { "@babel/highlight": "^7.14.5" }, @@ -183,24 +184,24 @@ } }, "node_modules/@babel/core": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.13.tgz", - "integrity": "sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.13", - "@babel/helper-module-transforms": "^7.12.13", - "@babel/helpers": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@babel/types": "^7.12.13", + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "engines": { @@ -212,11 +213,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dependencies": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -264,14 +265,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", @@ -306,6 +299,24 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", @@ -375,9 +386,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", - "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dependencies": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", @@ -528,14 +539,13 @@ } }, "node_modules/@babel/node": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.12.13.tgz", - "integrity": "sha512-ACLDLxlNsJZxPnwSSwuXp87KwjKY0NAFko6QCnBjJlxd+gKUDLLG0Y49jO+/EwqMJd9D5/BkYn5Qb1bgrYnHSA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.15.8.tgz", + "integrity": "sha512-JbgTCrnx6IUECznEbQ7e2rbVYtrXKixSbEG2bxxbMkV648WdUf3tdc+ZUW2++dvnnAswcpwc76cRwf0xEQqsrw==", "dependencies": { - "@babel/register": "^7.12.13", + "@babel/register": "^7.15.3", "commander": "^4.0.1", - "core-js": "^3.2.1", - "lodash": "^4.17.19", + "core-js": "^3.16.0", "node-environment-flags": "^1.0.5", "regenerator-runtime": "^0.13.4", "v8flags": "^3.1.1" @@ -543,14 +553,17 @@ "bin": { "babel-node": "bin/babel-node.js" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -558,10 +571,26 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", - "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.15.4", @@ -575,17 +604,36 @@ } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", - "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", @@ -647,12 +695,15 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz", - "integrity": "sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -674,13 +725,18 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz", - "integrity": "sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.13" + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -702,13 +758,16 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz", - "integrity": "sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -729,6 +788,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", @@ -766,6 +842,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -879,6 +969,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -1341,12 +1445,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" }, "engines": { "node": ">=6.9.0" @@ -1427,76 +1531,86 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.13.tgz", - "integrity": "sha512-JUVlizG8SoFTz4LmVUL8++aVwzwxcvey3N0j1tRbMAXVEy95uQ/cnEkmEKHN00Bwq4voAV3imQGnQvpkLAxsrw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", "dependencies": { - "@babel/compat-data": "^7.12.13", - "@babel/helper-compilation-targets": "^7.12.13", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.12.13", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", - "@babel/plugin-proposal-optional-chaining": "^7.12.13", - "@babel/plugin-proposal-private-methods": "^7.12.13", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@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.12.13", - "@babel/plugin-transform-arrow-functions": "^7.12.13", - "@babel/plugin-transform-async-to-generator": "^7.12.13", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.12.13", - "@babel/plugin-transform-computed-properties": "^7.12.13", - "@babel/plugin-transform-destructuring": "^7.12.13", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.12.13", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.12.13", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "@babel/plugin-transform-modules-systemjs": "^7.12.13", - "@babel/plugin-transform-modules-umd": "^7.12.13", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.12.13", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.12.13", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.12.13", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.13", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1518,15 +1632,19 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", - "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.13", - "@babel/plugin-transform-react-jsx-development": "^7.12.12", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1715,15 +1833,15 @@ } }, "node_modules/@emotion/cache": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", - "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.5.0.tgz", + "integrity": "sha512-mAZ5QRpLriBtaj/k2qyrXwck6yeoz1V5lMt/jfj6igWU35yYlNKs2LziXVgvH81gnJZ+9QQNGelSsnuoAy6uIw==", "dependencies": { "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.0.0", + "@emotion/sheet": "^1.0.3", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.3" + "stylis": "^4.0.10" } }, "node_modules/@emotion/hash": { @@ -1783,9 +1901,9 @@ } }, "node_modules/@emotion/sheet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.2.tgz", - "integrity": "sha512-QQPB1B70JEVUHuNtzjHftMGv6eC3Y9wqavyarj4x4lg47RACkeSfNo5pxIOKizwS9AEFLohsqoaxGQj4p0vSIw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.3.tgz", + "integrity": "sha512-YoX5GyQ4db7LpbmXHMuc8kebtBGP6nZfRC5Z13OKJMixBEwdZrJ914D6yJv/P+ZH/YY3F5s89NYX2hlZAf3SRQ==" }, "node_modules/@emotion/styled": { "version": "11.3.0", @@ -1884,12 +2002,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hookform/resolvers": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-1.3.7.tgz", - "integrity": "sha512-gC06h1hky7gM31UO4Y7DrUQjgZyNIKA3s0/TxXbdeurwhOj07l8Zx8Pomjt93ANOKoZOU2rcHKaZtrEJx1w7tg==", + "node_modules/@hookform/devtools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.0.1.tgz", + "integrity": "sha512-xVPIK8FGi3Fp7q9qxWrXLwiGxoZzn6g2ihIBQG0ddpiVSAAsH21Jh39tyyYWtkHZkTo9deiPs98SwXnN48hMjg==", + "dependencies": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12" + }, "peerDependencies": { - "react-hook-form": ">=6.6.0" + "react": ">=17.0.2", + "react-dom": ">=17.0.2", + "react-hook-form": "^7.13.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-2.8.2.tgz", + "integrity": "sha512-oDTGrm7yHxT4VIv4kJcfjvWvozCbdcL0/jrpbAkeo39FYn78XnKOrrGTNmrXdfu+EQVkNIdZ47IYRFManZ4jUA==", + "peerDependencies": { + "react-hook-form": "^7.0.0" } }, "node_modules/@loadable/babel-plugin": { @@ -1981,14 +2117,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@loadable/webpack-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@mui/core": { "version": "5.0.0-alpha.49", "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.49.tgz", @@ -2327,23 +2455,10 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.2", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", - "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^5.1.2", - "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" - } + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "optional": true }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -2378,14 +2493,16 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.0-rc.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.0-rc.3.tgz", - "integrity": "sha512-ORUoyHX15P3VNjVp3Y27wnxRCBAZdTwLlg4gn8Igq3jvyXnUAAR4PQxIq4vHo0h7eTLvgOGEKCedRMIwlzYC5g==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.1.tgz", + "integrity": "sha512-ccap6o7+y5L8cnvkZ9h8UXCGyy2DqtwCD+/N3Yru6lxMvcdkPKtdx13qd7sAC9s5qZktOmWf9lfUjsGOvSdYhg==", "dev": true, "dependencies": { - "ansi-html": "^0.0.7", + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", "core-js-pure": "^3.8.1", "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", "html-entities": "^2.1.0", "loader-utils": "^2.0.0", "schema-utils": "^3.0.0", @@ -2398,9 +2515,9 @@ "@types/webpack": "4.x || 5.x", "react-refresh": "^0.10.0", "sockjs-client": "^1.4.0", - "type-fest": "1.x", + "type-fest": ">=0.17.0 <3.0.0", "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || >=4.0.0-beta.0", + "webpack-dev-server": "3.x || 4.x", "webpack-hot-middleware": "2.x", "webpack-plugin-serve": "0.x || 1.x" }, @@ -2449,20 +2566,32 @@ "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" }, "node_modules/@reduxjs/toolkit": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.5.1.tgz", - "integrity": "sha512-PngZKuwVZsd+mimnmhiOQzoD0FiMjqVks6ituO1//Ft5UEX5Ca9of13NEjo//pU22Jk7z/mdXVsmDfgsig1osA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.6.2.tgz", + "integrity": "sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA==", "dependencies": { - "immer": "^8.0.1", - "redux": "^4.0.0", + "immer": "^9.0.6", + "redux": "^4.1.0", "redux-thunk": "^2.3.0", "reselect": "^4.0.0" + }, + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0", + "react-redux": "^7.2.1" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } } }, "node_modules/@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, "node_modules/@types/cookie": { "version": "0.4.1", @@ -2697,9 +2826,9 @@ } }, "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", + "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2758,9 +2887,9 @@ "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" }, "node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2773,9 +2902,9 @@ "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "node_modules/@types/react": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.27.tgz", - "integrity": "sha512-zgiJwtsggVGtr53MndV7jfiUESTqrbxOcBvwfe6KS/9bzaVPCTDieTWnFNecVNx6EAaapg5xsLLWFfHHR437AA==", + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2791,9 +2920,9 @@ } }, "node_modules/@types/react-redux": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.18.tgz", - "integrity": "sha512-9iwAsPyJ9DLTRH+OFeIrm9cAbIj1i2ANL3sKQFATqnPWRbg+jEFXyZOKHiQK/N86pNRXbb4HRxAxo0SIX1XwzQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.19.tgz", + "integrity": "sha512-L37dSCT0aoJnCgpR8Iuginlbxoh7qhWOXiaDqEsxVMrER1CmVhFD+63NxgJeT4pkmEM28oX0NH4S4f+sXHTZjA==", "dependencies": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -2946,18 +3075,18 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", "peerDependencies": { "webpack": "4.x.x || 5.x.x", "webpack-cli": "4.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", "dependencies": { "envinfo": "^7.7.3" }, @@ -2966,9 +3095,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", - "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", "peerDependencies": { "webpack-cli": "4.x.x" }, @@ -3050,10 +3179,10 @@ "node": ">=6" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -3082,25 +3211,16 @@ } }, "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "optional": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/aproba": { @@ -3130,33 +3250,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-find": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", @@ -3195,15 +3288,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -3281,15 +3365,6 @@ "inherits": "2.0.1" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -3303,12 +3378,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "optional": true - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3329,11 +3398,11 @@ } }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", + "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.4" } }, "node_modules/babel-eslint": { @@ -3449,6 +3518,42 @@ "node": ">= 8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -3459,36 +3564,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "optional": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base32.js": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.0.1.tgz", @@ -3549,12 +3624,12 @@ } }, "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/bl": { @@ -3660,24 +3735,14 @@ } }, "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/brorand": { @@ -3794,15 +3859,15 @@ } }, "node_modules/browserslist": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz", - "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dependencies": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" @@ -3886,26 +3951,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "optional": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3935,9 +3980,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001265", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz", - "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==", + "version": "1.0.30001269", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", + "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" @@ -3985,97 +4030,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "optional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/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==", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/chokidar/node_modules/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==", - "optional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -4099,104 +4053,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/classcat": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.3.tgz", @@ -4260,19 +4116,6 @@ "node": ">=0.10.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "optional": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -4343,6 +4186,12 @@ "node": ">= 10.0.0" } }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -4465,15 +4314,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-webpack-plugin": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", @@ -4520,9 +4360,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dependencies": { "browserslist": "^4.17.3", "semver": "7.0.0" @@ -4541,9 +4381,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", - "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true, "hasInstallScript": true, "funding": { @@ -4853,15 +4693,6 @@ "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "optional": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -4897,19 +4728,6 @@ "node": ">= 0.4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -5036,9 +4854,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.3.860", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.860.tgz", - "integrity": "sha512-gWwGZ+Wv4Mou2SJRH6JQzhTPjL5f95SX7n6VkLTQ/Q/INsZLZNQ1vH2GlZjozKyvT0kkFuCmWTwIoCj+/hUDPw==" + "version": "1.3.872", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.872.tgz", + "integrity": "sha512-qG96atLFY0agKyEETiBFNhpRLSXGSXOBuhXWpbkYqrLKKASpRyRBUtfkn0ZjIf/yXfA7FA4nScVOMpXSHFlUCQ==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -5467,13 +5285,23 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/eslint-import-resolver-webpack/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "dependencies": { "debug": "^3.2.7", + "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "engines": { @@ -5489,6 +5317,55 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/eslint-plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", @@ -5654,15 +5531,6 @@ "node": ">= 4" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-promise": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", @@ -6001,122 +5869,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "optional": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -6178,49 +5930,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "optional": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6241,59 +5950,6 @@ "node": ">=8" } }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/node_modules/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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6346,18 +6002,14 @@ } }, "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/finalhandler": { @@ -6471,6 +6123,14 @@ "node": ">=6" } }, + "node_modules/find-cache-dir/node_modules/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==", + "engines": { + "node": ">=6" + } + }, "node_modules/find-cache-dir/node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -6488,15 +6148,28 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/flat-cache": { @@ -6557,15 +6230,6 @@ } } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6574,18 +6238,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "optional": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -6782,15 +6434,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -6949,45 +6592,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "optional": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -7162,59 +6766,6 @@ "node": ">=8.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-proxy-middleware/node_modules/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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/http-proxy-middleware/node_modules/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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", @@ -7297,9 +6848,9 @@ } }, "node_modules/immer": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.4.tgz", - "integrity": "sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", + "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -7388,6 +6939,14 @@ "node": ">=8" } }, + "node_modules/import-local/node_modules/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==", + "engines": { + "node": ">=6" + } + }, "node_modules/import-local/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7469,18 +7028,6 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7498,15 +7045,15 @@ } }, "node_modules/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==", "optional": true, "dependencies": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-boolean-object": { @@ -7524,12 +7071,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "optional": true - }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -7542,9 +7083,9 @@ } }, "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dependencies": { "has": "^1.0.3" }, @@ -7552,18 +7093,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -7578,29 +7107,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7645,15 +7151,11 @@ } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-number-object": { @@ -7670,18 +7172,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7766,15 +7256,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -7794,9 +7275,9 @@ } }, "node_modules/jest-worker": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz", - "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -7947,10 +7428,18 @@ "npm": ">=1.4.28" } }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/jss": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.8.0.tgz", - "integrity": "sha512-6fAMLJrVQ8epM5ghghxWqCwRR0ZamP2cKbOAtzPudcCMSNdAqtvmzQvljUZYR8OXJIeb/IpZeOXA1sDXms4R1w==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.8.1.tgz", + "integrity": "sha512-P4wKxU+2m5ReGl0Mmbf9XYgVjFIVZJOZ9ylXBxdpanX+HHgj5XVaAIgYzYpKbBLPCdkAUsI/Iq1fhQPsMNu0YA==", "dependencies": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -7963,70 +7452,70 @@ } }, "node_modules/jss-plugin-camel-case": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.0.tgz", - "integrity": "sha512-yxlXrXwcCdGw+H4BC187dEu/RFyW8joMcWfj8Rk9UPgWTKu2Xh7Sib4iW3xXjHe/t5phOHF1rBsHleHykWix7g==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.1.tgz", + "integrity": "sha512-nOYKsvX9qh/AcUWSSRZHKyUj4RwqnhUSq4EKNFA1nHsNw0VJYwtF1yqtOPvztWEP3LTlNhcwoPINsb/eKVmYqA==", "dependencies": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.8.0" + "jss": "10.8.1" } }, "node_modules/jss-plugin-default-unit": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.0.tgz", - "integrity": "sha512-9XJV546cY9zV9OvIE/v/dOaxSi4062VfYQQfwbplRExcsU2a79Yn+qDz/4ciw6P4LV1Naq90U+OffAGRHfNq/Q==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.1.tgz", + "integrity": "sha512-W/uwVJNrFtUrVyAPfH/3ZngFYUVilMxgNbuWHYslqv3c5gnBKM6iXeoDzOnB+wtQJoSCTLzD3q77H7OeNK3oxg==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "node_modules/jss-plugin-global": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.8.0.tgz", - "integrity": "sha512-H/8h/bHd4e7P0MpZ9zaUG8NQSB2ie9rWo/vcCP6bHVerbKLGzj+dsY22IY3+/FNRS8zDmUyqdZx3rD8k4nmH4w==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.8.1.tgz", + "integrity": "sha512-ERYLzD+L/v3yQL2mM5/PE+3xU/GCXcfXuGIL1kVkiEIpXnWtND/Mphf2iHQaqedx59uhiVHFZaMtv6qv+iNsDw==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "node_modules/jss-plugin-nested": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.8.0.tgz", - "integrity": "sha512-MhmINZkSxyFILcFBuDoZmP1+wj9fik/b9SsjoaggkGjdvMQCES21mj4K5ZnRGVm448gIXyi9j/eZjtDzhaHUYQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.8.1.tgz", + "integrity": "sha512-Z15G23Fb8/br23EclH9CAq2UGdi29XgpSWXFTBusMJbWjitFdDCdYMzk7bSUJ6P7L5+WpaIDNxIJ9WrdMRqdXw==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0", + "jss": "10.8.1", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-props-sort": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.0.tgz", - "integrity": "sha512-VY+Wt5WX5GMsXDmd+Ts8+O16fpiCM81svbox++U3LDbJSM/g9FoMx3HPhwUiDfmgHL9jWdqEuvSl/JAk+mh6mQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.1.tgz", + "integrity": "sha512-BNbKYuh4IawWr7cticlnbI+kBx01o39DNHkjAkc2CGKWVboUb2EpktDqonqVN/BjyzDgZXKOmwz36ZFkLQB45g==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "node_modules/jss-plugin-rule-value-function": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.0.tgz", - "integrity": "sha512-R8N8Ma6Oye1F9HroiUuHhVjpPsVq97uAh+rMI6XwKLqirIu2KFb5x33hPj+vNBMxSHc9jakhf5wG0BbQ7fSDOg==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.1.tgz", + "integrity": "sha512-XrvM4bokyU1xPXr+gVEIlT9WylLQZcdC+1JDxriXDEWmKEjJgtH+w6ZicchTydLqq1qtA4fEevhdMvm4QvgIKw==", "dependencies": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0", + "jss": "10.8.1", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.0.tgz", - "integrity": "sha512-G1zD0J8dFwKZQ+GaZaay7A/Tg7lhDw0iEkJ/iFFA5UPuvZFpMprCMQttXcTBhLlhhWnyZ8YPn4yqp+amrhQekw==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.1.tgz", + "integrity": "sha512-77b/iEFmA669s+USru2Y5eg9Hs1C1N0zE/4EaJm/fqKScCTNawHXZv5l5w6j81A9CNa63Ar7jekAIfBkoKFmLw==", "dependencies": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.8.0" + "jss": "10.8.1" } }, "node_modules/jsx-ast-utils": { @@ -8099,6 +7588,14 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, + "node_modules/little-state-machine": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.1.2.tgz", + "integrity": "sha512-plFK9JAuZgW+hzyNfwn8ONvKDWMnLjXfhqiMrZ7pAFLwYh2B2CnGxLSWwSmbin4EGQJLhLuAIfB7OUANNc9Q3A==", + "peerDependencies": { + "react": "^16.8.0 || ^17" + } + }, "node_modules/load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -8157,16 +7654,18 @@ } }, "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lockfile": { @@ -8187,6 +7686,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -8286,37 +7790,12 @@ "node": ">=6" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "optional": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" } }, "node_modules/marked": { @@ -8349,31 +7828,6 @@ "node": ">= 0.6" } }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/memfs": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", @@ -8424,52 +7878,15 @@ } }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.1", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/miller-rabin": { @@ -8581,31 +7998,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "optional": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -8674,9 +8066,9 @@ "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, "node_modules/nanoid": { - "version": "3.1.29", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz", - "integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8684,53 +8076,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -8762,6 +8107,14 @@ "semver": "^5.4.1" } }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/node-environment-flags": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", @@ -8771,6 +8124,14 @@ "semver": "^5.7.0" } }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -8811,9 +8172,9 @@ } }, "node_modules/node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==" }, "node_modules/noop-logger": { "version": "0.1.1", @@ -8832,6 +8193,15 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -8906,91 +8276,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "optional": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", @@ -9007,18 +8292,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "optional": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -9083,18 +8356,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "optional": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", @@ -9228,15 +8489,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -9252,30 +8504,21 @@ } }, "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^1.1.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate/node_modules/p-try": { + "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", @@ -9284,14 +8527,6 @@ "node": ">=4" } }, - "node_modules/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==", - "engines": { - "node": ">=6" - } - }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -9365,15 +8600,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -9461,9 +8687,9 @@ } }, "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.0", @@ -9507,6 +8733,55 @@ "node": ">=4" } }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -9566,6 +8841,14 @@ "node": ">=6" } }, + "node_modules/pkg-up/node_modules/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==", + "engines": { + "node": ">=6" + } + }, "node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -9574,15 +8857,6 @@ "node": ">=4.0.0" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { "version": "8.3.9", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", @@ -9672,6 +8946,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "node_modules/prebuild-install": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", @@ -10049,9 +9328,13 @@ } }, "node_modules/react-hook-form": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-6.12.0.tgz", - "integrity": "sha512-5eSuWVra5f4dMSllJ6qrlkh7I/KrXd3bJen8Jsp2Ig2+3qOyeOl83cTsvDxo0KsSctsmvJBaZIwuPZRtklOc4A==", + "version": "7.17.4", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.17.4.tgz", + "integrity": "sha512-7XhbCr7d9fDC1TgcK/BUbt7D3q0VJMu7jPErfsa0JrxVjv/nni41xWdJcy0Zb7R+Np8OsCkQ2lMyloAtE3DLiQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, "peerDependencies": { "react": "^16.8.0 || ^17" } @@ -10098,9 +9381,9 @@ } }, "node_modules/react-redux": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", - "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.5.tgz", + "integrity": "sha512-Dt29bNyBsbQaysp6s/dN0gUodcq+dVKKER8Qv82UrpeygwYeX1raTtil7O/fftw/rFqzaf6gJhDZRkkZnn6bjg==", "dependencies": { "@babel/runtime": "^7.12.1", "@types/react-redux": "^7.1.16", @@ -10180,6 +9463,15 @@ "isarray": "0.0.1" } }, + "node_modules/react-simple-animate": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.3.12.tgz", + "integrity": "sha512-lFXjxD6ficcpOMsHfcDs1jqdkCve6jNlJnubOCzVOLswFDRANsaLN4KwpezDuliEFz8Q1zyj4J7Tmj3KMRnPcg==", + "peerDependencies": { + "react": "^16.8.0 || ^17", + "react-dom": "^16.8.0 || ^17" + } + }, "node_modules/react-table": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.7.0.tgz", @@ -10248,6 +9540,55 @@ "node": ">=4" } }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/read-pkg/node_modules/path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -10292,17 +9633,15 @@ } }, "node_modules/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.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "optional": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10" + "node": ">=8.10.0" } }, "node_modules/rechoir": { @@ -10317,9 +9656,9 @@ } }, "node_modules/redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", + "integrity": "sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -10358,44 +9697,6 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -10472,30 +9773,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "optional": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10563,22 +9840,6 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "optional": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "optional": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -10647,15 +9908,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "optional": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-stable-stringify": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", @@ -10698,11 +9950,11 @@ } }, "node_modules/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==", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/send": { @@ -10773,21 +10025,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -10923,173 +10160,6 @@ "node": ">=6" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "optional": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "optional": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "optional": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, "node_modules/socket.io": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", @@ -11165,19 +10235,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "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==", - "optional": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", @@ -11195,12 +10252,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "optional": true - }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -11244,43 +10295,6 @@ "node": ">= 0.10.0" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -11300,102 +10314,6 @@ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "optional": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -11783,81 +10701,15 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "optional": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, + "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==", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, "node_modules/toidentifier": { @@ -12005,21 +10857,6 @@ "node": ">=4" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -12036,64 +10873,6 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "optional": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "optional": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "optional": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/upcast": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/upcast/-/upcast-4.0.0.tgz", @@ -12121,13 +10900,6 @@ "node": ">=6" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "optional": true - }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -12142,15 +10914,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/use-memo-one": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", @@ -12357,17 +11120,16 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", - "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", "dev": true, "dependencies": { - "colorette": "^1.2.2", - "mem": "^8.1.1", + "colorette": "^2.0.10", "memfs": "^3.2.2", "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" + "schema-utils": "^3.1.0" }, "engines": { "node": ">= 12.13.0" @@ -12380,43 +11142,22 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", - "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - } - }, - "node_modules/webpack-hot-middleware/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-hot-middleware/node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "node_modules/webpack-dev-middleware/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/webpack-hot-middleware": { + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" } }, "node_modules/webpack-merge": { @@ -12527,42 +11268,11 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { @@ -12825,6 +11535,14 @@ "node": ">=6" } }, + "node_modules/yargs/node_modules/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==", + "engines": { + "node": ">=6" + } + }, "node_modules/yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", @@ -12874,11 +11592,11 @@ }, "dependencies": { "@babel/cli": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", - "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz", + "integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==", "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", @@ -12890,9 +11608,9 @@ } }, "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "requires": { "@babel/highlight": "^7.14.5" } @@ -12903,33 +11621,33 @@ "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" }, "@babel/core": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.13.tgz", - "integrity": "sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.13", - "@babel/helper-module-transforms": "^7.12.13", - "@babel/helpers": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.13", - "@babel/types": "^7.12.13", + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "requires": { - "@babel/types": "^7.15.4", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -12960,13 +11678,6 @@ "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } } }, "@babel/helper-create-class-features-plugin": { @@ -12991,6 +11702,21 @@ "regexpu-core": "^4.7.1" } }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, "@babel/helper-explode-assignable-expression": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", @@ -13042,9 +11768,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", - "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "requires": { "@babel/helper-module-imports": "^7.15.4", "@babel/helper-replace-supers": "^7.15.4", @@ -13156,28 +11882,37 @@ } }, "@babel/node": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.12.13.tgz", - "integrity": "sha512-ACLDLxlNsJZxPnwSSwuXp87KwjKY0NAFko6QCnBjJlxd+gKUDLLG0Y49jO+/EwqMJd9D5/BkYn5Qb1bgrYnHSA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.15.8.tgz", + "integrity": "sha512-JbgTCrnx6IUECznEbQ7e2rbVYtrXKixSbEG2bxxbMkV648WdUf3tdc+ZUW2++dvnnAswcpwc76cRwf0xEQqsrw==", "requires": { - "@babel/register": "^7.12.13", + "@babel/register": "^7.15.3", "commander": "^4.0.1", - "core-js": "^3.2.1", - "lodash": "^4.17.19", + "core-js": "^3.16.0", "node-environment-flags": "^1.0.5", "regenerator-runtime": "^0.13.4", "v8flags": "^3.1.1" } }, "@babel/parser": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", - "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==" + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==" + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", - "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.15.4", @@ -13185,12 +11920,22 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", - "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { @@ -13230,12 +11975,12 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz", - "integrity": "sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { @@ -13248,13 +11993,15 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz", - "integrity": "sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.13" + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -13267,13 +12014,13 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz", - "integrity": "sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { @@ -13285,6 +12032,17 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", @@ -13310,6 +12068,14 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -13390,6 +12156,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -13666,12 +12440,12 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" } }, "@babel/plugin-transform-sticky-regex": { @@ -13716,76 +12490,83 @@ } }, "@babel/preset-env": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.13.tgz", - "integrity": "sha512-JUVlizG8SoFTz4LmVUL8++aVwzwxcvey3N0j1tRbMAXVEy95uQ/cnEkmEKHN00Bwq4voAV3imQGnQvpkLAxsrw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", "requires": { - "@babel/compat-data": "^7.12.13", - "@babel/helper-compilation-targets": "^7.12.13", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.12.13", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", - "@babel/plugin-proposal-optional-chaining": "^7.12.13", - "@babel/plugin-proposal-private-methods": "^7.12.13", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@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.12.13", - "@babel/plugin-transform-arrow-functions": "^7.12.13", - "@babel/plugin-transform-async-to-generator": "^7.12.13", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.12.13", - "@babel/plugin-transform-computed-properties": "^7.12.13", - "@babel/plugin-transform-destructuring": "^7.12.13", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.12.13", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.12.13", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "@babel/plugin-transform-modules-systemjs": "^7.12.13", - "@babel/plugin-transform-modules-umd": "^7.12.13", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.12.13", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.12.13", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.12.13", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.13", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" } }, "@babel/preset-modules": { @@ -13801,15 +12582,16 @@ } }, "@babel/preset-react": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", - "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.13", - "@babel/plugin-transform-react-jsx-development": "^7.12.12", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" } }, "@babel/register": { @@ -13939,15 +12721,15 @@ } }, "@emotion/cache": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", - "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.5.0.tgz", + "integrity": "sha512-mAZ5QRpLriBtaj/k2qyrXwck6yeoz1V5lMt/jfj6igWU35yYlNKs2LziXVgvH81gnJZ+9QQNGelSsnuoAy6uIw==", "requires": { "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.0.0", + "@emotion/sheet": "^1.0.3", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.3" + "stylis": "^4.0.10" } }, "@emotion/hash": { @@ -13995,9 +12777,9 @@ } }, "@emotion/sheet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.2.tgz", - "integrity": "sha512-QQPB1B70JEVUHuNtzjHftMGv6eC3Y9wqavyarj4x4lg47RACkeSfNo5pxIOKizwS9AEFLohsqoaxGQj4p0vSIw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.3.tgz", + "integrity": "sha512-YoX5GyQ4db7LpbmXHMuc8kebtBGP6nZfRC5Z13OKJMixBEwdZrJ914D6yJv/P+ZH/YY3F5s89NYX2hlZAf3SRQ==" }, "@emotion/styled": { "version": "11.3.0", @@ -14072,10 +12854,23 @@ } } }, + "@hookform/devtools": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.0.1.tgz", + "integrity": "sha512-xVPIK8FGi3Fp7q9qxWrXLwiGxoZzn6g2ihIBQG0ddpiVSAAsH21Jh39tyyYWtkHZkTo9deiPs98SwXnN48hMjg==", + "requires": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12" + } + }, "@hookform/resolvers": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-1.3.7.tgz", - "integrity": "sha512-gC06h1hky7gM31UO4Y7DrUQjgZyNIKA3s0/TxXbdeurwhOj07l8Zx8Pomjt93ANOKoZOU2rcHKaZtrEJx1w7tg==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-2.8.2.tgz", + "integrity": "sha512-oDTGrm7yHxT4VIv4kJcfjvWvozCbdcL0/jrpbAkeo39FYn78XnKOrrGTNmrXdfu+EQVkNIdZ47IYRFManZ4jUA==", "requires": {} }, "@loadable/babel-plugin": { @@ -14119,11 +12914,6 @@ "requires": { "semver": "^6.0.0" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -14308,23 +13098,10 @@ } }, "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.2", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", - "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^5.1.2", - "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" - } + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "optional": true }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -14350,14 +13127,16 @@ } }, "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.0-rc.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.0-rc.3.tgz", - "integrity": "sha512-ORUoyHX15P3VNjVp3Y27wnxRCBAZdTwLlg4gn8Igq3jvyXnUAAR4PQxIq4vHo0h7eTLvgOGEKCedRMIwlzYC5g==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.1.tgz", + "integrity": "sha512-ccap6o7+y5L8cnvkZ9h8UXCGyy2DqtwCD+/N3Yru6lxMvcdkPKtdx13qd7sAC9s5qZktOmWf9lfUjsGOvSdYhg==", "dev": true, "requires": { - "ansi-html": "^0.0.7", + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", "core-js-pure": "^3.8.1", "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", "html-entities": "^2.1.0", "loader-utils": "^2.0.0", "schema-utils": "^3.0.0", @@ -14383,20 +13162,20 @@ "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" }, "@reduxjs/toolkit": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.5.1.tgz", - "integrity": "sha512-PngZKuwVZsd+mimnmhiOQzoD0FiMjqVks6ituO1//Ft5UEX5Ca9of13NEjo//pU22Jk7z/mdXVsmDfgsig1osA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.6.2.tgz", + "integrity": "sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA==", "requires": { - "immer": "^8.0.1", - "redux": "^4.0.0", + "immer": "^9.0.6", + "redux": "^4.1.0", "redux-thunk": "^2.3.0", "reselect": "^4.0.0" } }, "@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" }, "@types/cookie": { "version": "0.4.1", @@ -14631,9 +13410,9 @@ } }, "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", + "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -14692,9 +13471,9 @@ "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" }, "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "version": "16.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.1.tgz", + "integrity": "sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA==" }, "@types/parse-json": { "version": "4.0.0", @@ -14707,9 +13486,9 @@ "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" }, "@types/react": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.27.tgz", - "integrity": "sha512-zgiJwtsggVGtr53MndV7jfiUESTqrbxOcBvwfe6KS/9bzaVPCTDieTWnFNecVNx6EAaapg5xsLLWFfHHR437AA==", + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -14725,9 +13504,9 @@ } }, "@types/react-redux": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.18.tgz", - "integrity": "sha512-9iwAsPyJ9DLTRH+OFeIrm9cAbIj1i2ANL3sKQFATqnPWRbg+jEFXyZOKHiQK/N86pNRXbb4HRxAxo0SIX1XwzQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.19.tgz", + "integrity": "sha512-L37dSCT0aoJnCgpR8Iuginlbxoh7qhWOXiaDqEsxVMrER1CmVhFD+63NxgJeT4pkmEM28oX0NH4S4f+sXHTZjA==", "requires": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -14880,23 +13659,23 @@ } }, "@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", "requires": {} }, "@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz", - "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", "requires": {} }, "@xtuc/ieee754": { @@ -14951,10 +13730,10 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { @@ -14971,24 +13750,13 @@ } }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "optional": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "aproba": { @@ -15020,24 +13788,6 @@ } } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "optional": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "optional": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "optional": true - }, "array-find": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", @@ -15067,12 +13817,6 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "optional": true - }, "array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -15142,12 +13886,6 @@ } } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "optional": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -15158,12 +13896,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "optional": true - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -15175,11 +13907,11 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", + "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.4" } }, "babel-eslint": { @@ -15267,6 +13999,33 @@ "resolve": "^1.13.1" } }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -15277,32 +14036,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "optional": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "base32.js": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.0.1.tgz", @@ -15337,9 +14070,9 @@ "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.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "optional": true }, "bl": { @@ -15426,21 +14159,11 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "fill-range": "^7.0.1" } }, "brorand": { @@ -15542,15 +14265,15 @@ } }, "browserslist": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz", - "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "requires": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" } }, "btoa": { @@ -15615,23 +14338,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "optional": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -15652,9 +14358,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001265", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz", - "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==" + "version": "1.0.30001269", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", + "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==" }, "chalk": { "version": "2.4.2", @@ -15687,75 +14393,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "optional": true, - "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==", - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "optional": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "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==", - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } } }, "chownr": { @@ -15778,86 +14415,6 @@ "safe-buffer": "^5.0.1" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - } - } - }, "classcat": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.3.tgz", @@ -15908,16 +14465,6 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "optional": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -15979,6 +14526,12 @@ "integrity": "sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==", "dev": true }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -16085,12 +14638,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "optional": true - }, "copy-webpack-plugin": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", @@ -16121,9 +14668,9 @@ "integrity": "sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA==" }, "core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "requires": { "browserslist": "^4.17.3", "semver": "7.0.0" @@ -16137,9 +14684,9 @@ } }, "core-js-pure": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", - "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true }, "core-util-is": { @@ -16391,12 +14938,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "optional": true - }, "decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -16423,16 +14964,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "optional": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -16542,9 +15073,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.860", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.860.tgz", - "integrity": "sha512-gWwGZ+Wv4Mou2SJRH6JQzhTPjL5f95SX7n6VkLTQ/Q/INsZLZNQ1vH2GlZjozKyvT0kkFuCmWTwIoCj+/hUDPw==" + "version": "1.3.872", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.872.tgz", + "integrity": "sha512-qG96atLFY0agKyEETiBFNhpRLSXGSXOBuhXWpbkYqrLKKASpRyRBUtfkn0ZjIf/yXfA7FA4nScVOMpXSHFlUCQ==" }, "elliptic": { "version": "6.5.4", @@ -16940,16 +15471,23 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, "eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { "debug": "^3.2.7", + "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "dependencies": { @@ -16961,6 +15499,43 @@ "requires": { "ms": "^2.1.1" } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } } } }, @@ -17085,12 +15660,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, @@ -17266,104 +15835,6 @@ "strip-final-newline": "^2.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - } - } - }, "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -17421,42 +15892,6 @@ } } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -17472,46 +15907,6 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "dependencies": { - "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==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "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" - } - } } }, "fast-json-stable-stringify": { @@ -17556,15 +15951,11 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "optional": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -17655,6 +16046,11 @@ "p-limit": "^2.0.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==" + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -17671,12 +16067,21 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "flat-cache": { @@ -17719,26 +16124,11 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "optional": true - }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "optional": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -17885,12 +16275,6 @@ "get-intrinsic": "^1.1.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "optional": true - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -18006,38 +16390,6 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "optional": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "optional": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -18179,46 +16531,6 @@ "is-glob": "^4.0.1", "lodash": "^4.17.19", "micromatch": "^4.0.2" - }, - "dependencies": { - "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==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "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" - } - } } }, "https": { @@ -18273,9 +16585,9 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "immer": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.4.tgz", - "integrity": "sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ==" + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", + "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==" }, "immutable": { "version": "4.0.0-rc.12", @@ -18333,6 +16645,11 @@ "p-limit": "^2.2.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==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -18398,15 +16715,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -18421,12 +16729,12 @@ } }, "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==", "optional": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-boolean-object": { @@ -18438,34 +16746,19 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "optional": true - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -18474,23 +16767,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "optional": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -18520,24 +16796,9 @@ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.6", @@ -18598,12 +16859,6 @@ "call-bind": "^1.0.0" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "optional": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -18620,9 +16875,9 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "jest-worker": { - "version": "27.2.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz", - "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -18733,12 +16988,19 @@ "lodash.once": "^4.0.0", "ms": "^2.1.1", "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==" + } } }, "jss": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.8.0.tgz", - "integrity": "sha512-6fAMLJrVQ8epM5ghghxWqCwRR0ZamP2cKbOAtzPudcCMSNdAqtvmzQvljUZYR8OXJIeb/IpZeOXA1sDXms4R1w==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss/-/jss-10.8.1.tgz", + "integrity": "sha512-P4wKxU+2m5ReGl0Mmbf9XYgVjFIVZJOZ9ylXBxdpanX+HHgj5XVaAIgYzYpKbBLPCdkAUsI/Iq1fhQPsMNu0YA==", "requires": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -18747,70 +17009,70 @@ } }, "jss-plugin-camel-case": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.0.tgz", - "integrity": "sha512-yxlXrXwcCdGw+H4BC187dEu/RFyW8joMcWfj8Rk9UPgWTKu2Xh7Sib4iW3xXjHe/t5phOHF1rBsHleHykWix7g==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.1.tgz", + "integrity": "sha512-nOYKsvX9qh/AcUWSSRZHKyUj4RwqnhUSq4EKNFA1nHsNw0VJYwtF1yqtOPvztWEP3LTlNhcwoPINsb/eKVmYqA==", "requires": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", - "jss": "10.8.0" + "jss": "10.8.1" } }, "jss-plugin-default-unit": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.0.tgz", - "integrity": "sha512-9XJV546cY9zV9OvIE/v/dOaxSi4062VfYQQfwbplRExcsU2a79Yn+qDz/4ciw6P4LV1Naq90U+OffAGRHfNq/Q==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.1.tgz", + "integrity": "sha512-W/uwVJNrFtUrVyAPfH/3ZngFYUVilMxgNbuWHYslqv3c5gnBKM6iXeoDzOnB+wtQJoSCTLzD3q77H7OeNK3oxg==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "jss-plugin-global": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.8.0.tgz", - "integrity": "sha512-H/8h/bHd4e7P0MpZ9zaUG8NQSB2ie9rWo/vcCP6bHVerbKLGzj+dsY22IY3+/FNRS8zDmUyqdZx3rD8k4nmH4w==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.8.1.tgz", + "integrity": "sha512-ERYLzD+L/v3yQL2mM5/PE+3xU/GCXcfXuGIL1kVkiEIpXnWtND/Mphf2iHQaqedx59uhiVHFZaMtv6qv+iNsDw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "jss-plugin-nested": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.8.0.tgz", - "integrity": "sha512-MhmINZkSxyFILcFBuDoZmP1+wj9fik/b9SsjoaggkGjdvMQCES21mj4K5ZnRGVm448gIXyi9j/eZjtDzhaHUYQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.8.1.tgz", + "integrity": "sha512-Z15G23Fb8/br23EclH9CAq2UGdi29XgpSWXFTBusMJbWjitFdDCdYMzk7bSUJ6P7L5+WpaIDNxIJ9WrdMRqdXw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0", + "jss": "10.8.1", "tiny-warning": "^1.0.2" } }, "jss-plugin-props-sort": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.0.tgz", - "integrity": "sha512-VY+Wt5WX5GMsXDmd+Ts8+O16fpiCM81svbox++U3LDbJSM/g9FoMx3HPhwUiDfmgHL9jWdqEuvSl/JAk+mh6mQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.1.tgz", + "integrity": "sha512-BNbKYuh4IawWr7cticlnbI+kBx01o39DNHkjAkc2CGKWVboUb2EpktDqonqVN/BjyzDgZXKOmwz36ZFkLQB45g==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0" + "jss": "10.8.1" } }, "jss-plugin-rule-value-function": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.0.tgz", - "integrity": "sha512-R8N8Ma6Oye1F9HroiUuHhVjpPsVq97uAh+rMI6XwKLqirIu2KFb5x33hPj+vNBMxSHc9jakhf5wG0BbQ7fSDOg==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.1.tgz", + "integrity": "sha512-XrvM4bokyU1xPXr+gVEIlT9WylLQZcdC+1JDxriXDEWmKEjJgtH+w6ZicchTydLqq1qtA4fEevhdMvm4QvgIKw==", "requires": { "@babel/runtime": "^7.3.1", - "jss": "10.8.0", + "jss": "10.8.1", "tiny-warning": "^1.0.2" } }, "jss-plugin-vendor-prefixer": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.0.tgz", - "integrity": "sha512-G1zD0J8dFwKZQ+GaZaay7A/Tg7lhDw0iEkJ/iFFA5UPuvZFpMprCMQttXcTBhLlhhWnyZ8YPn4yqp+amrhQekw==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.1.tgz", + "integrity": "sha512-77b/iEFmA669s+USru2Y5eg9Hs1C1N0zE/4EaJm/fqKScCTNawHXZv5l5w6j81A9CNa63Ar7jekAIfBkoKFmLw==", "requires": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", - "jss": "10.8.0" + "jss": "10.8.1" } }, "jsx-ast-utils": { @@ -18871,6 +17133,12 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, + "little-state-machine": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.1.2.tgz", + "integrity": "sha512-plFK9JAuZgW+hzyNfwn8ONvKDWMnLjXfhqiMrZ7pAFLwYh2B2CnGxLSWwSmbin4EGQJLhLuAIfB7OUANNc9Q3A==", + "requires": {} + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -18916,13 +17184,12 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "lockfile": { @@ -18943,6 +17210,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -19028,30 +17300,13 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "optional": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "optional": true, - "requires": { - "object-visit": "^1.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "marked": { @@ -19075,24 +17330,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, "memfs": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", @@ -19134,45 +17371,12 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, "miller-rabin": { @@ -19255,27 +17459,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "optional": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -19337,49 +17520,9 @@ "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" }, "nanoid": { - "version": "3.1.29", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz", - "integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" }, "napi-build-utils": { "version": "1.0.2", @@ -19407,6 +17550,13 @@ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "node-environment-flags": { @@ -19416,6 +17566,13 @@ "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "node-libs-browser": { @@ -19455,9 +17612,9 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==" }, "noop-logger": { "version": "0.1.1", @@ -19474,6 +17631,14 @@ "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==", + "dev": true + } } }, "normalize-path": { @@ -19519,74 +17684,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "optional": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", @@ -19597,15 +17694,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "optional": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -19649,15 +17737,6 @@ "es-abstract": "^1.19.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "optional": true, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", @@ -19763,12 +17842,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -19778,35 +17851,19 @@ } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^1.1.0" - }, - "dependencies": { - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "p-limit": "^3.0.2" } }, "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==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "pako": { "version": "1.0.11", @@ -19866,12 +17923,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "optional": true - }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -19946,9 +17997,9 @@ } }, "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.0", @@ -19975,6 +18026,45 @@ "dev": true, "requires": { "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + } } }, "pkg-up": { @@ -20017,6 +18107,11 @@ "requires": { "p-limit": "^2.0.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==" } } }, @@ -20025,12 +18120,6 @@ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "optional": true - }, "postcss": { "version": "8.3.9", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", @@ -20039,6 +18128,13 @@ "nanoid": "^3.1.28", "picocolors": "^0.2.1", "source-map-js": "^0.6.2" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + } } }, "postcss-modules-extract-imports": { @@ -20374,9 +18470,9 @@ } }, "react-hook-form": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-6.12.0.tgz", - "integrity": "sha512-5eSuWVra5f4dMSllJ6qrlkh7I/KrXd3bJen8Jsp2Ig2+3qOyeOl83cTsvDxo0KsSctsmvJBaZIwuPZRtklOc4A==", + "version": "7.17.4", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.17.4.tgz", + "integrity": "sha512-7XhbCr7d9fDC1TgcK/BUbt7D3q0VJMu7jPErfsa0JrxVjv/nni41xWdJcy0Zb7R+Np8OsCkQ2lMyloAtE3DLiQ==", "requires": {} }, "react-is": { @@ -20410,9 +18506,9 @@ } }, "react-redux": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.4.tgz", - "integrity": "sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.5.tgz", + "integrity": "sha512-Dt29bNyBsbQaysp6s/dN0gUodcq+dVKKER8Qv82UrpeygwYeX1raTtil7O/fftw/rFqzaf6gJhDZRkkZnn6bjg==", "requires": { "@babel/runtime": "^7.12.1", "@types/react-redux": "^7.1.16", @@ -20474,6 +18570,12 @@ "tiny-warning": "^1.0.0" } }, + "react-simple-animate": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.3.12.tgz", + "integrity": "sha512-lFXjxD6ficcpOMsHfcDs1jqdkCve6jNlJnubOCzVOLswFDRANsaLN4KwpezDuliEFz8Q1zyj4J7Tmj3KMRnPcg==", + "requires": {} + }, "react-table": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.7.0.tgz", @@ -20535,6 +18637,45 @@ "requires": { "find-up": "^2.0.0", "read-pkg": "^2.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=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + } } }, "readable-stream": { @@ -20562,14 +18703,12 @@ } }, "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.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "optional": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "rechoir": { @@ -20581,9 +18720,9 @@ } }, "redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", + "integrity": "sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==", "requires": { "@babel/runtime": "^7.9.2" } @@ -20619,37 +18758,6 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "optional": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -20704,24 +18812,6 @@ } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "optional": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "optional": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "optional": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -20776,18 +18866,6 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "optional": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "optional": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -20830,15 +18908,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "optional": true, - "requires": { - "ret": "~0.1.10" - } - }, "safe-stable-stringify": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", @@ -20874,9 +18943,9 @@ } }, "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", @@ -20944,18 +19013,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -21058,147 +19115,6 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "optional": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "optional": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "optional": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "socket.io": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", @@ -21259,19 +19175,6 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" }, - "source-map-resolve": { - "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==", - "optional": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", @@ -21288,12 +19191,6 @@ } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "optional": true - }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -21334,36 +19231,6 @@ "base32.js": "0.0.1" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "optional": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", @@ -21380,84 +19247,6 @@ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "optional": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -21751,67 +19540,12 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "optional": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "optional": true, + "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": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toidentifier": { @@ -21928,18 +19662,6 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -21950,52 +19672,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "optional": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "optional": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "optional": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "optional": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "optional": true - }, "upcast": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/upcast/-/upcast-4.0.0.tgz", @@ -22019,12 +19695,6 @@ } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "optional": true - }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -22041,12 +19711,6 @@ } } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "optional": true - }, "use-memo-one": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", @@ -22217,52 +19881,36 @@ } }, "webpack-dev-middleware": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", - "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", "dev": true, "requires": { - "colorette": "^1.2.2", - "mem": "^8.1.1", + "colorette": "^2.0.10", "memfs": "^3.2.2", "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" + "schema-utils": "^3.1.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + } } }, "webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "strip-ansi": "^6.0.0" } }, "webpack-merge": { @@ -22326,35 +19974,11 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "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" - } - }, - "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": "^1.0.2 || 2 || 3 || 4" } }, "wildcard": { @@ -22549,6 +20173,11 @@ "requires": { "p-limit": "^2.0.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==" } } }, diff --git a/src/fireedge/package.json b/src/fireedge/package.json index 08388c4f4a..e027e497fc 100644 --- a/src/fireedge/package.json +++ b/src/fireedge/package.json @@ -30,7 +30,7 @@ "vms" ], "devDependencies": { - "@pmmmwh/react-refresh-webpack-plugin": "0.5.0-rc.3", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.1", "cross-env": "7.0.2", "eslint": "7.11.0", "eslint-config-prettier": "6.11.0", @@ -48,22 +48,23 @@ "opennebula-generatepotfile": "1.0.0", "opennebula-potojson": "1.0.0", "react-refresh": "0.10.0", - "webpack-dev-middleware": "5.0.0", - "webpack-hot-middleware": "2.25.0" + "webpack-dev-middleware": "5.2.1", + "webpack-hot-middleware": "2.25.1" }, "dependencies": { - "@babel/cli": "7.14.5", - "@babel/core": "7.12.13", - "@babel/node": "7.12.13", - "@babel/plugin-proposal-class-properties": "7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.13", - "@babel/plugin-proposal-object-rest-spread": "7.12.13", - "@babel/plugin-proposal-optional-chaining": "7.12.13", - "@babel/preset-env": "7.12.13", - "@babel/preset-react": "7.12.13", + "@babel/cli": "7.15.7", + "@babel/core": "7.15.8", + "@babel/node": "7.15.8", + "@babel/plugin-proposal-class-properties": "7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.14.5", + "@babel/plugin-proposal-object-rest-spread": "7.15.6", + "@babel/plugin-proposal-optional-chaining": "7.14.5", + "@babel/preset-env": "7.15.8", + "@babel/preset-react": "7.14.5", "@emotion/react": "11.4.1", "@emotion/styled": "11.3.0", - "@hookform/resolvers": "1.3.7", + "@hookform/devtools": "4.0.1", + "@hookform/resolvers": "2.8.2", "@loadable/babel-plugin": "5.13.2", "@loadable/component": "5.15.0", "@loadable/server": "5.15.1", @@ -72,9 +73,9 @@ "@mui/material": "5.0.2", "@mui/styles": "5.0.1", "@mui/system": "5.0.2", - "@reduxjs/toolkit": "1.5.1", + "@reduxjs/toolkit": "1.6.2", "atob": "2.1.2", - "axios": "0.21.1", + "axios": "0.23.0", "babel-eslint": "10.1.0", "babel-loader": "8.2.1", "babel-plugin-module-resolver": "4.0.0", @@ -117,17 +118,17 @@ "react-dom": "17.0.2", "react-flatpickr": "3.10.7", "react-flow-renderer": "9.6.0", - "react-hook-form": "6.12.0", + "react-hook-form": "7.17.4", "react-json-pretty": "2.2.0", "react-minimal-pie-chart": "8.2.0", "react-opennebula-ace": "1.0.1", - "react-redux": "7.2.4", + "react-redux": "7.2.5", "react-router": "5.2.1", "react-router-dom": "5.3.0", "react-table": "7.7.0", "react-transition-group": "4.4.1", "react-virtual": "2.7.1", - "redux": "4.1.0", + "redux": "4.1.1", "redux-thunk": "2.3.0", "rimraf": "3.0.2", "socket.io": "4.1.2", diff --git a/src/fireedge/src/client/apps/provision/index.js b/src/fireedge/src/client/apps/provision/index.js index 826f7348ff..537f41ae2c 100644 --- a/src/fireedge/src/client/apps/provision/index.js +++ b/src/fireedge/src/client/apps/provision/index.js @@ -29,6 +29,9 @@ import { TranslateProvider } from 'client/components/HOC' import App, { APP_NAME as ProvisionAppName } from 'client/apps/provision/_app' import theme from 'client/apps/provision/theme' import { APP_URL } from 'client/constants' +import { buildTranslationLocale } from 'client/utils' + +buildTranslationLocale() /** * @param {object} props - Props diff --git a/src/fireedge/src/client/apps/sunstone/index.js b/src/fireedge/src/client/apps/sunstone/index.js index 676024b45d..6520bd7bc7 100644 --- a/src/fireedge/src/client/apps/sunstone/index.js +++ b/src/fireedge/src/client/apps/sunstone/index.js @@ -28,6 +28,9 @@ import { TranslateProvider } from 'client/components/HOC' import App, { APP_NAME as SunstoneAppName } from 'client/apps/sunstone/_app' import theme from 'client/apps/sunstone/theme' import { APP_URL } from 'client/constants' +import { buildTranslationLocale } from 'client/utils' + +buildTranslationLocale() /** * @param {object} props - Props diff --git a/src/fireedge/src/client/apps/sunstone/routesOne.js b/src/fireedge/src/client/apps/sunstone/routesOne.js index 4fa7022a9c..6f1766ba88 100644 --- a/src/fireedge/src/client/apps/sunstone/routesOne.js +++ b/src/fireedge/src/client/apps/sunstone/routesOne.js @@ -49,8 +49,9 @@ const VirtualMachineDetail = loadable(() => import('client/containers/VirtualMac const VirtualRouters = loadable(() => import('client/containers/VirtualRouters'), { ssr: false }) const VmTemplates = loadable(() => import('client/containers/VmTemplates'), { ssr: false }) -const InstantiateVmTemplates = +const InstantiateVmTemplate = loadable(() => import('client/containers/VmTemplates/Instantiate'), { ssr: false }) +const CreateVmTemplate = loadable(() => import('client/containers/VmTemplates/Create'), { ssr: false }) // const VrTemplates = loadable(() => import('client/containers/VrTemplates'), { ssr: false }) // const VmGroups = loadable(() => import('client/containers/VmGroups'), { ssr: false }) @@ -92,7 +93,8 @@ export const PATH = { VMS: { LIST: '/vm-template', DETAIL: '/vm-template/:id', - INSTANTIATE: '/vm-template/instantiate' + INSTANTIATE: '/vm-template/instantiate', + CREATE: '/vm-template/create' } }, STORAGE: { @@ -199,7 +201,12 @@ const ENDPOINTS = [ { label: 'Instantiate VM Template', path: PATH.TEMPLATE.VMS.INSTANTIATE, - Component: InstantiateVmTemplates + Component: InstantiateVmTemplate + }, + { + label: 'Create VM Template', + path: PATH.TEMPLATE.VMS.CREATE, + Component: CreateVmTemplate } ] }, diff --git a/src/fireedge/src/client/components/DebugLog/ansiHtml.js b/src/fireedge/src/client/components/DebugLog/ansiHtml.js index f8a3dce6d8..bf3b16dd66 100644 --- a/src/fireedge/src/client/components/DebugLog/ansiHtml.js +++ b/src/fireedge/src/client/components/DebugLog/ansiHtml.js @@ -19,7 +19,7 @@ export const _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ const _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] + reset: ['fff', '000'], // [FOREGROUND_COLOR, BACKGROUND_COLOR] black: '000', red: 'ff0000', green: '209805', diff --git a/src/fireedge/src/client/components/Footer/index.js b/src/fireedge/src/client/components/Footer/index.js index 22077bf080..4b22cc2dea 100644 --- a/src/fireedge/src/client/components/Footer/index.js +++ b/src/fireedge/src/client/components/Footer/index.js @@ -17,7 +17,9 @@ import { memo, useEffect } from 'react' import { styled, Link, Typography } from '@mui/material' +import { useFetch } from 'client/hooks' import { useSystem, useSystemApi } from 'client/features/One' +import { StatusChip } from 'client/components/Status' import { BY } from 'client/constants' const FooterBox = styled('footer')(({ theme }) => ({ @@ -44,9 +46,10 @@ const HeartIcon = styled('span')(({ theme }) => ({ const Footer = memo(() => { const { version } = useSystem() const { getOneVersion } = useSystemApi() + const { fetchRequest } = useFetch(getOneVersion) useEffect(() => { - !version && getOneVersion() + !version && fetchRequest() }, []) return ( @@ -56,8 +59,10 @@ const Footer = memo(() => { {BY.text} - {version} + {version && ( + + )} ) diff --git a/src/fireedge/src/client/components/FormControl/AutocompleteController.js b/src/fireedge/src/client/components/FormControl/AutocompleteController.js index 72157d6d3a..b4f511eaaf 100644 --- a/src/fireedge/src/client/components/FormControl/AutocompleteController.js +++ b/src/fireedge/src/client/components/FormControl/AutocompleteController.js @@ -17,70 +17,76 @@ import { memo } from 'react' import PropTypes from 'prop-types' import { TextField, Chip, Autocomplete } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' import { ErrorHelper } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const AutocompleteController = memo( - ({ control, cy, name, label, multiple, values, error, fieldProps }) => ( - { - const selected = multiple - ? renderValue ?? [] - : values.find(({ value }) => value === renderValue) ?? null + ({ + control, + cy = `autocomplete-${generateKey()}`, + name = '', + label = '', + multiple = false, + values = [], + fieldProps = {} + }) => { + const { + field: { value: renderValue, onBlur, onChange }, + fieldState: { error } + } = useController({ name, control }) - return ( - { - const newValueToChange = multiple - ? newValue?.map(value => - typeof value === 'string' ? value : ({ text: value, value }) - ) - : newValue?.value + const selected = multiple + ? renderValue ?? [] + : values.find(({ value }) => value === renderValue) ?? null - return onChange(newValueToChange ?? '') - }} - options={values} - value={selected} - multiple={multiple} - renderTags={(tags, getTagProps) => - // render when freesolo prop - tags.map((tag, index) => ( - - )) - } - getOptionLabel={option => option.text} - isOptionEqualToValue={option => option.value === renderValue} - renderInput={({ inputProps, ...inputParams }) => ( - - } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} - {...inputParams} - /> - )} - {...fieldProps} + return ( + { + const newValueToChange = multiple + ? newValue?.map(value => + typeof value === 'string' ? value : ({ text: value, value }) + ) + : newValue?.value + + return onChange(newValueToChange ?? '') + }} + options={values} + value={selected} + multiple={multiple} + renderTags={(tags, getTagProps) => + // render when freesolo prop + tags.map((tag, index) => ( + + )) + } + getOptionLabel={option => option.text} + isOptionEqualToValue={option => option.value === renderValue} + renderInput={({ inputProps, ...inputParams }) => ( + } + FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + {...inputParams} /> - ) - }} - name={name} - control={control} - /> - ), + )} + {...fieldProps} + /> + ) + }, (prevProps, nextProps) => ( prevProps.error === nextProps.error && prevProps.values === nextProps.values @@ -90,27 +96,12 @@ AutocompleteController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + label: PropTypes.any, multiple: PropTypes.bool, values: PropTypes.arrayOf(PropTypes.object).isRequired, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), fieldProps: PropTypes.object } -AutocompleteController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - multiple: false, - values: [], - error: false, - fieldProps: undefined -} - AutocompleteController.displayName = 'AutocompleteController' export default AutocompleteController diff --git a/src/fireedge/src/client/components/FormControl/CheckboxController.js b/src/fireedge/src/client/components/FormControl/CheckboxController.js index d32b4f7961..321b3ab0b2 100644 --- a/src/fireedge/src/client/components/FormControl/CheckboxController.js +++ b/src/fireedge/src/client/components/FormControl/CheckboxController.js @@ -16,43 +16,62 @@ import { memo } from 'react' import PropTypes from 'prop-types' -import { FormControl, FormControlLabel, Checkbox } from '@mui/material' -import { Controller } from 'react-hook-form' +import { styled, FormControl, FormControlLabel, FormHelperText, Checkbox } from '@mui/material' +import { useController } from 'react-hook-form' import { ErrorHelper, Tooltip } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' + +const Label = styled('span')({ + display: 'flex', + alignItems: 'center', + gap: '0.5em' +}) const CheckboxController = memo( - ({ control, cy, name, label, tooltip, error, fieldProps }) => ( - ( - - onChange(e.target.checked)} - name={name} - checked={Boolean(value)} - color='secondary' - inputProps={{ 'data-cy': cy }} - {...fieldProps} - /> - } - label={ - - {Tr(label)} - {tooltip && } - - } - labelPlacement='end' - /> - {Boolean(error) && } - - )} - name={name} - control={control} - /> - ), + ({ + control, + cy = `checkbox-${generateKey()}`, + name = '', + label = '', + tooltip, + fieldProps = {} + }) => { + const { + field: { value = false, onChange }, + fieldState: { error } + } = useController({ name, control }) + + return ( + + onChange(e.target.checked)} + name={name} + checked={Boolean(value)} + color='secondary' + inputProps={{ 'data-cy': cy }} + {...fieldProps} + /> + } + label={ + + } + labelPlacement='end' + /> + {Boolean(error) && ( + + + + )} + + ) + }, (prevProps, nextProps) => prevProps.error === nextProps.error ) @@ -60,24 +79,11 @@ CheckboxController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - tooltip: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + label: PropTypes.any, + tooltip: PropTypes.any, fieldProps: PropTypes.object } -CheckboxController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - values: [], - error: false -} - CheckboxController.displayName = 'CheckboxController' export default CheckboxController diff --git a/src/fireedge/src/client/components/FormControl/ErrorHelper.js b/src/fireedge/src/client/components/FormControl/ErrorHelper.js index 6a53643817..178bc9d4ff 100644 --- a/src/fireedge/src/client/components/FormControl/ErrorHelper.js +++ b/src/fireedge/src/client/components/FormControl/ErrorHelper.js @@ -14,46 +14,30 @@ * limitations under the License. * * ------------------------------------------------------------------------- */ import { memo } from 'react' -import { string } from 'prop-types' +import { oneOfType, string, node } from 'prop-types' -import { Box, Typography } from '@mui/material' -import makeStyles from '@mui/styles/makeStyles' +import { Stack, Typography, styled } from '@mui/material' import { WarningCircledOutline as WarningIcon } from 'iconoir-react' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' -const useStyles = makeStyles(theme => ({ - root: { - color: theme.palette.error.dark, - display: 'flex', - alignItems: 'center' - }, - text: { - ...theme.typography.body1, - paddingLeft: theme.spacing(1), - overflowWrap: 'anywhere' - } +const ErrorTypo = styled(Typography)(({ theme }) => ({ + ...theme.typography.body1, + paddingLeft: theme.spacing(1), + overflowWrap: 'anywhere' })) -const ErrorHelper = memo(({ label, ...rest }) => { - const classes = useStyles() - - return ( - - - - {Tr(label)} - - - ) -}) +const ErrorHelper = memo(({ label, ...rest }) => ( + + + + {labelCanBeTranslated(label) ? Tr(label) : label} + + +)) ErrorHelper.propTypes = { - label: string -} - -ErrorHelper.defaultProps = { - label: 'Error' + label: oneOfType([string, node]) } ErrorHelper.displayName = 'ErrorHelper' diff --git a/src/fireedge/src/client/components/FormControl/FileController.js b/src/fireedge/src/client/components/FormControl/FileController.js index f84d45664b..1d3b3bc253 100644 --- a/src/fireedge/src/client/components/FormControl/FileController.js +++ b/src/fireedge/src/client/components/FormControl/FileController.js @@ -15,44 +15,45 @@ * ------------------------------------------------------------------------- */ import { memo, useState, useRef, useEffect, ChangeEvent } from 'react' import PropTypes from 'prop-types' -import clsx from 'clsx' -import { FormControl, FormHelperText } from '@mui/material' -import makeStyles from '@mui/styles/makeStyles' +import { styled, FormControl, FormHelperText } from '@mui/material' import { Check as CheckIcon, Page as FileIcon } from 'iconoir-react' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' -import { ErrorHelper, SubmitButton } from 'client/components/FormControl' +import { ErrorHelper, Tooltip, SubmitButton } from 'client/components/FormControl' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' -const useStyles = makeStyles(theme => ({ - hide: { - display: 'none' - }, - label: { - display: 'flex', - alignItems: 'center', - gap: '1em', - padding: '0.5em', - borderBottom: `1px solid ${theme.palette.text.secondary}` - }, - button: { - '&:hover': { - backgroundColor: theme.palette.secondary.dark - } - }, - buttonSuccess: { - backgroundColor: theme.palette.success.main, - '&:hover': { - backgroundColor: theme.palette.success.dark - } - } +const HiddenInput = styled('input')({ display: 'none' }) + +const Label = styled('label')(({ theme, error }) => ({ + display: 'flex', + alignItems: 'center', + gap: '1em', + ...(error && { + color: theme.palette.error.main + }) })) const FileController = memo( - ({ control, cy, name, label, error, fieldProps, validationBeforeTransform, transform, formContext }) => { + ({ + control, + cy = `input-file-${generateKey()}`, + name = '', + label = '', + tooltip = '', + validationBeforeTransform, + transform, + fieldProps = {}, + formContext = {} + }) => { const { setValue, setError, clearErrors, watch } = formContext - const classes = useStyles() + const { + field: { ref, value, onChange, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + const [isLoading, setLoading] = useState(() => false) const [success, setSuccess] = useState(() => !error && !!watch(name)) const timer = useRef() @@ -107,33 +108,26 @@ const FileController = memo( } return ( - - ( - - )} - name={name} - control={control} + + - {Boolean(error) && ( @@ -143,18 +137,17 @@ const FileController = memo( ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.type === nextProps.type + prevProps.error === nextProps.error && + prevProps.type === nextProps.type && + prevProps.label === nextProps.label ) FileController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + label: PropTypes.any, + tooltip: PropTypes.any, validationBeforeTransform: PropTypes.arrayOf( PropTypes.shape({ message: PropTypes.string, @@ -172,17 +165,6 @@ FileController.propTypes = { }) } -FileController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - error: false, - validationBeforeTransform: undefined, - transform: undefined, - fieldProps: undefined -} - FileController.displayName = 'FileController' export default FileController diff --git a/src/fireedge/src/client/components/FormControl/PasswordController.js b/src/fireedge/src/client/components/FormControl/PasswordController.js index b7e067dae6..0a1de1eccc 100644 --- a/src/fireedge/src/client/components/FormControl/PasswordController.js +++ b/src/fireedge/src/client/components/FormControl/PasswordController.js @@ -38,7 +38,7 @@ const PasswordController = memo(({ fieldProps, ...props }) => { + > {showPassword ? : } @@ -49,7 +49,8 @@ const PasswordController = memo(({ fieldProps, ...props }) => { ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.type === nextProps.type + prevProps.error === nextProps.error && + prevProps.type === nextProps.type ) PasswordController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/SelectController.js b/src/fireedge/src/client/components/FormControl/SelectController.js index 88386c365d..8fcdab02d9 100644 --- a/src/fireedge/src/client/components/FormControl/SelectController.js +++ b/src/fireedge/src/client/components/FormControl/SelectController.js @@ -13,67 +13,79 @@ * See the License for the specific language governing permissions and * * limitations under the License. * * ------------------------------------------------------------------------- */ -import { memo } from 'react' +import { memo, useMemo } from 'react' import PropTypes from 'prop-types' import { TextField } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' import { ErrorHelper, Tooltip } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const SelectController = memo( - ({ control, cy, name, label, multiple, values, tooltip, error, fieldProps }) => { + ({ + control, + cy = `select-${generateKey()}`, + name = '', + label = '', + multiple = false, + values = [], + renderValue, + tooltip, + fieldProps = {} + }) => { const defaultValue = multiple ? [values?.[0]?.value] : values?.[0]?.value + const { + field: { ref, value: optionSelected = defaultValue, onChange, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + + const needShrink = useMemo( + () => values.find(v => v.value === optionSelected)?.text !== '', + [optionSelected] + ) + return ( - ( - { - const { options } = event.target - const newValue = [] + { + const { options = [] } = event.target + const newValue = options + .filter(option => option.selected) + .map(option => option.value) - for (let i = 0, l = options.length; i < l; i += 1) { - if (options[i].selected) { - newValue.push(options[i].value) - } - } - - onChange(newValue) - } - : onChange + onChange(newValue) } - select - fullWidth - SelectProps={{ native: true, multiple }} - label={Tr(label)} - InputProps={{ - startAdornment: tooltip && ( - - ) - }} - inputProps={{ 'data-cy': cy }} - error={Boolean(error)} - helperText={Boolean(error) && } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} - {...fieldProps} - > - {values?.map(({ text, value = '' }) => - - )} - + : onChange + } + select + fullWidth + SelectProps={{ native: true, multiple }} + label={labelCanBeTranslated(label) ? Tr(label) : label} + InputLabelProps={{ shrink: needShrink }} + InputProps={{ + startAdornment: + (optionSelected && renderValue?.(optionSelected)) || + (tooltip && ) + }} + inputProps={{ 'data-cy': cy }} + error={Boolean(error)} + helperText={Boolean(error) && } + FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + {...fieldProps} + > + {values?.map(({ text, value = '' }) => + )} - name={name} - control={control} - multiple={multiple} - /> + ) }, (prevProps, nextProps) => @@ -87,28 +99,14 @@ SelectController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + label: PropTypes.any, + tooltip: PropTypes.any, multiple: PropTypes.bool, values: PropTypes.arrayOf(PropTypes.object).isRequired, - tooltip: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + renderValue: PropTypes.func, fieldProps: PropTypes.object } -SelectController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - multiple: false, - values: [], - error: false, - fieldProps: undefined -} - SelectController.displayName = 'SelectController' export default SelectController diff --git a/src/fireedge/src/client/components/FormControl/SliderController.js b/src/fireedge/src/client/components/FormControl/SliderController.js index 6b1d4b2f70..9bae472dde 100644 --- a/src/fireedge/src/client/components/FormControl/SliderController.js +++ b/src/fireedge/src/client/components/FormControl/SliderController.js @@ -17,60 +17,71 @@ import { memo } from 'react' import PropTypes from 'prop-types' import { Typography, TextField, Slider, FormHelperText, Grid } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' import { ErrorHelper } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const SliderController = memo( - ({ control, cy, name, label, error, fieldProps }) => ( - <> - - {Tr(label)} - - - - - onChange(val)} - /> - - - onChange( - evt.target.value === '' ? '0' : Number(evt.target.value) - )} - onBlur={onBlur} - /> - + ({ + control, + cy = `slider-${generateKey()}`, + name = '', + label = '', + fieldProps = {} + }) => { + const { + field: { value, onChange, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + + const sliderId = `${cy}-slider` + const inputId = `${cy}-input` + + return ( + <> + + {labelCanBeTranslated(label) ? Tr(label) : label} + + + + onChange(val)} + {...fieldProps} + /> - } - name={name} - control={control} - /> - {Boolean(error) && ( - - - - )} - - ), + + onChange( + evt.target.value === '' ? '0' : Number(evt.target.value) + )} + /> + + + {Boolean(error) && ( + + + + )} + + ) + }, (prevProps, nextProps) => prevProps.error === nextProps.error ) @@ -78,27 +89,13 @@ SliderController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + label: PropTypes.any, + tooltip: PropTypes.any, multiple: PropTypes.bool, values: PropTypes.arrayOf(PropTypes.object).isRequired, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), fieldProps: PropTypes.object } -SliderController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - multiple: false, - values: [], - error: false, - fieldProps: undefined -} - SliderController.displayName = 'SliderController' export default SliderController diff --git a/src/fireedge/src/client/components/FormControl/SwitchController.js b/src/fireedge/src/client/components/FormControl/SwitchController.js index ed61928266..be0ff12610 100644 --- a/src/fireedge/src/client/components/FormControl/SwitchController.js +++ b/src/fireedge/src/client/components/FormControl/SwitchController.js @@ -16,43 +16,62 @@ import { memo } from 'react' import PropTypes from 'prop-types' -import { FormControl, FormControlLabel, Switch } from '@mui/material' -import { Controller } from 'react-hook-form' +import { styled, FormControl, FormControlLabel, FormHelperText, Switch } from '@mui/material' +import { useController } from 'react-hook-form' import { ErrorHelper, Tooltip } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' + +const Label = styled('span')({ + display: 'flex', + alignItems: 'center', + gap: '0.5em' +}) const SwitchController = memo( - ({ control, cy, name, label, tooltip, error, fieldProps }) => ( - ( - - onChange(e.target.checked)} - name={name} - checked={Boolean(value)} - color='secondary' - inputProps={{ 'data-cy': cy }} - {...fieldProps} - /> - } - label={ - - {Tr(label)} - {tooltip && } - - } - labelPlacement='end' - /> - {Boolean(error) && } - - )} - name={name} - control={control} - /> - ), + ({ + control, + cy = `switch-${generateKey()}`, + name = '', + label = '', + tooltip, + fieldProps = {} + }) => { + const { + field: { value = false, onChange }, + fieldState: { error } + } = useController({ name, control }) + + return ( + + onChange(e.target.checked)} + name={name} + checked={Boolean(value)} + color='secondary' + inputProps={{ 'data-cy': cy }} + {...fieldProps} + /> + } + label={ + + } + labelPlacement='end' + /> + {Boolean(error) && ( + + + + )} + + ) + }, (prevProps, nextProps) => prevProps.error === nextProps.error ) @@ -60,24 +79,11 @@ SwitchController.propTypes = { control: PropTypes.object, cy: PropTypes.string, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - tooltip: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + label: PropTypes.any, + tooltip: PropTypes.any, fieldProps: PropTypes.object } -SwitchController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - values: [], - error: false -} - SwitchController.displayName = 'SwitchController' export default SwitchController diff --git a/src/fireedge/src/client/components/FormControl/TableController.js b/src/fireedge/src/client/components/FormControl/TableController.js index e1b6db0064..ac41b251ab 100644 --- a/src/fireedge/src/client/components/FormControl/TableController.js +++ b/src/fireedge/src/client/components/FormControl/TableController.js @@ -17,47 +17,61 @@ import { memo } from 'react' import PropTypes from 'prop-types' import { Typography } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' import { ErrorHelper, Tooltip } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const defaultGetRowId = item => typeof item === 'object' ? item?.id ?? item?.ID : item const TableController = memo( - ({ control, cy, name, Table, singleSelect = true, getRowId = defaultGetRowId, label, tooltip, error, formContext }) => { + ({ + control, + cy = `table-${generateKey()}`, + name = '', + label = '', + tooltip, + Table, + singleSelect = true, + getRowId = defaultGetRowId, + formContext = {} + }) => { const { clearErrors } = formContext + const { + field: { onChange }, + fieldState: { error } + } = useController({ name, control }) + return ( <> {error ? ( - + ) : ( label && ( {tooltip && } - {typeof label === 'string' ? Tr(label) : label} + {labelCanBeTranslated(label) ? Tr(label) : label} ) )} - ( - { - const rowValues = rows?.map(({ original }) => getRowId(original)) +
{ + const rowValues = rows?.map(({ original }) => getRowId(original)) - onChange(singleSelect ? rowValues?.[0] : rowValues) - clearErrors(name) - }} - /> - )} - name={name} - control={control} + onChange(singleSelect ? rowValues?.[0] : rowValues) + clearErrors(name) + }} /> ) @@ -76,15 +90,8 @@ TableController.propTypes = { Table: PropTypes.any, getRowId: PropTypes.func, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.node - ]), - tooltip: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + label: PropTypes.any, + tooltip: PropTypes.any, fieldProps: PropTypes.object, formContext: PropTypes.shape({ setValue: PropTypes.func, diff --git a/src/fireedge/src/client/components/FormControl/TextController.js b/src/fireedge/src/client/components/FormControl/TextController.js index 5fe62e67e4..808cb2e82f 100644 --- a/src/fireedge/src/client/components/FormControl/TextController.js +++ b/src/fireedge/src/client/components/FormControl/TextController.js @@ -13,45 +13,74 @@ * See the License for the specific language governing permissions and * * limitations under the License. * * ------------------------------------------------------------------------- */ -import { memo } from 'react' +import { memo, useEffect } from 'react' import PropTypes from 'prop-types' import { TextField } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController, useWatch } from 'react-hook-form' import { ErrorHelper, Tooltip } from 'client/components/FormControl' -import { Tr } from 'client/components/HOC' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const TextController = memo( - ({ control, cy, type, multiline, name, label, tooltip, error, fieldProps }) => ( - - - }} - inputProps={{ 'data-cy': cy, ...fieldProps }} - error={Boolean(error)} - helperText={Boolean(error) && } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} - {...controllerProps} - {...fieldProps} - /> + ({ + control, + cy = `input-${generateKey()}`, + name = '', + label = '', + type = 'text', + multiline = false, + tooltip, + watcher, + dependencies, + fieldProps = {} + }) => { + const watch = dependencies && useWatch({ + control, + name: dependencies, + disabled: dependencies === null + }) + + const { + field: { ref, value = '', onChange, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + + useEffect(() => { + if (watch && watcher) { + const watcherValue = watcher(watch) + watcherValue && onChange(watcherValue) } - name={name} - control={control} - /> - ), + }, [watch]) + + return ( + + }} + inputProps={{ 'data-cy': cy, ...fieldProps }} + error={Boolean(error)} + helperText={Boolean(error) && } + FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + {...fieldProps} + /> + ) + }, (prevProps, nextProps) => prevProps.error === nextProps.error && prevProps.type === nextProps.type && prevProps.label === nextProps.label && - prevProps.tooltip === nextProps.tooltip + prevProps.tooltip === nextProps.tooltip && + prevProps.fieldProps?.value === nextProps.fieldProps?.value ) TextController.propTypes = { @@ -60,14 +89,12 @@ TextController.propTypes = { type: PropTypes.string, multiline: PropTypes.bool, name: PropTypes.string.isRequired, - label: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.node - ]), - tooltip: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) + label: PropTypes.any, + tooltip: PropTypes.any, + watcher: PropTypes.func, + dependencies: PropTypes.oneOfType([ + PropTypes.strin, + PropTypes.arrayOf(PropTypes.string) ]), fieldProps: PropTypes.object, formContext: PropTypes.shape({ @@ -79,16 +106,6 @@ TextController.propTypes = { }) } -TextController.defaultProps = { - control: {}, - cy: 'cy', - type: 'text', - multiline: false, - name: '', - label: '', - error: false -} - TextController.displayName = 'TextController' export default TextController diff --git a/src/fireedge/src/client/components/FormControl/TimeController-TODO.js b/src/fireedge/src/client/components/FormControl/TimeController-TODO.js index 9e47c3c747..c64cf62211 100644 --- a/src/fireedge/src/client/components/FormControl/TimeController-TODO.js +++ b/src/fireedge/src/client/components/FormControl/TimeController-TODO.js @@ -73,7 +73,7 @@ const TimeController = memo( inputProps={{ 'data-cy': cy }} inputRef={ref} error={Boolean(error)} - helperText={Boolean(error) && } + helperText={Boolean(error) && } FormHelperTextProps={{ 'data-cy': `${cy}-error` }} {...fieldProps} /> @@ -94,11 +94,9 @@ TimeController.propTypes = { cy: PropTypes.string, multiline: PropTypes.bool, name: PropTypes.string.isRequired, - label: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), + label: PropTypes.any, + tooltip: PropTypes.any, + error: PropTypes.any, fieldProps: PropTypes.object, formContext: PropTypes.shape({ setValue: PropTypes.func, diff --git a/src/fireedge/src/client/components/FormControl/TimeController.js b/src/fireedge/src/client/components/FormControl/TimeController.js index 58b476ce8d..b9be39318b 100644 --- a/src/fireedge/src/client/components/FormControl/TimeController.js +++ b/src/fireedge/src/client/components/FormControl/TimeController.js @@ -17,32 +17,41 @@ import { memo } from 'react' import PropTypes from 'prop-types' import { TextField } from '@mui/material' -import { Controller } from 'react-hook-form' +import { useController } from 'react-hook-form' -import { Tr } from 'client/components/HOC' import { ErrorHelper } from 'client/components/FormControl' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' const TimeController = memo( - ({ control, cy, name, type, label, error, fieldProps }) => ( - - } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} - /> - } - name={name} - control={control} - /> - ), + ({ + control, + cy = `datetime-${generateKey()}`, + name = '', + label = '', + type = 'datetime-local', + fieldProps = {} + }) => { + const { + field: { ref, value, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + + return ( + } + FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + /> + ) + }, (prevProps, nextProps) => prevProps.error === nextProps.error && prevProps.label === nextProps.label @@ -53,12 +62,9 @@ TimeController.propTypes = { cy: PropTypes.string, multiline: PropTypes.bool, name: PropTypes.string.isRequired, - label: PropTypes.string, + label: PropTypes.any, + tooltip: PropTypes.any, type: PropTypes.string, - error: PropTypes.oneOfType([ - PropTypes.bool, - PropTypes.objectOf(PropTypes.any) - ]), fieldProps: PropTypes.object, formContext: PropTypes.shape({ setValue: PropTypes.func, @@ -69,16 +75,6 @@ TimeController.propTypes = { }) } -TimeController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - type: 'datetime-local', - error: false, - fieldProps: undefined -} - TimeController.displayName = 'TimeController' export default TimeController diff --git a/src/fireedge/src/client/components/FormControl/ToggleController.js b/src/fireedge/src/client/components/FormControl/ToggleController.js new file mode 100644 index 0000000000..e48c62686f --- /dev/null +++ b/src/fireedge/src/client/components/FormControl/ToggleController.js @@ -0,0 +1,120 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { memo, useEffect } from 'react' +import PropTypes from 'prop-types' + +import { + styled, + FormControl, + ToggleButtonGroup, + ToggleButton, + FormHelperText +} from '@mui/material' +import { useController } from 'react-hook-form' + +import { ErrorHelper, Tooltip } from 'client/components/FormControl' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { generateKey } from 'client/utils' + +const Label = styled('label')(({ theme, error }) => ({ + display: 'flex', + alignItems: 'center', + gap: '1em', + ...(error && { + color: theme.palette.error.main + }) +})) + +const ToggleController = memo( + ({ + control, + cy = `toggle-${generateKey()}`, + name = '', + label = '', + multiple = false, + values = [], + tooltip, + fieldProps = {} + }) => { + const defaultValue = multiple ? [values?.[0]?.value] : values?.[0]?.value + + const { + field: { ref, value: optionSelected = defaultValue, onChange, ...inputProps }, + fieldState: { error } + } = useController({ name, control }) + + useEffect(() => { + if (optionSelected) { + const exists = values?.find(option => option.value === optionSelected) + !exists && onChange() + } + }, []) + + return ( + + {label && ( + + )} + onChange(newValues)} + ref={ref} + id={cy} + value={optionSelected} + fullWidth + exclusive={!multiple} + data-cy={cy} + {...fieldProps} + > + {values?.map(({ text, value = '' }) => + + {text} + + )} + + {Boolean(error) && ( + + + + )} + + ) + }, + (prevProps, nextProps) => + prevProps.error === nextProps.error && + prevProps.values.length === nextProps.values.length && + prevProps.label === nextProps.label && + prevProps.tooltip === nextProps.tooltip +) + +ToggleController.propTypes = { + control: PropTypes.object, + cy: PropTypes.string, + name: PropTypes.string.isRequired, + label: PropTypes.any, + tooltip: PropTypes.any, + multiple: PropTypes.bool, + values: PropTypes.arrayOf(PropTypes.object).isRequired, + renderValue: PropTypes.func, + fieldProps: PropTypes.object +} + +ToggleController.displayName = 'ToggleController' + +export default ToggleController diff --git a/src/fireedge/src/client/components/FormControl/Tooltip.js b/src/fireedge/src/client/components/FormControl/Tooltip.js index 06ab29307c..1657ad1212 100644 --- a/src/fireedge/src/client/components/FormControl/Tooltip.js +++ b/src/fireedge/src/client/components/FormControl/Tooltip.js @@ -18,25 +18,40 @@ import PropTypes from 'prop-types' import { QuestionMarkCircle } from 'iconoir-react' import { InputAdornment, Typography, Tooltip } from '@mui/material' +import { Tr, labelCanBeTranslated } from 'client/components/HOC' -const AdornmentWithTooltip = memo(({ title, position = 'end', children }) => ( - - {title} - - } - > - - {children ?? } - - -), (prevProps, nextProps) => prevProps.title === nextProps.title) +const AdornmentWithTooltip = memo(({ title, position = 'end', children }) => { + if (!title || title === '' || (Array.isArray(title) && title.length === 0)) { + return null + } + + return ( + + {labelCanBeTranslated(title) ? Tr(title) : title} + + } + > + + {children ?? } + + + ) +}, (prevProps, nextProps) => + Array.isArray(nextProps.title) + ? prevProps.title?.[0] === nextProps.title?.[0] || prevProps.title === nextProps.title?.[0] + : prevProps.title === nextProps.title +) AdornmentWithTooltip.propTypes = { - title: PropTypes.string, + title: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.node, + PropTypes.object + ]), children: PropTypes.any, position: PropTypes.oneOf(['start', 'end']) } diff --git a/src/fireedge/src/client/components/FormControl/index.js b/src/fireedge/src/client/components/FormControl/index.js index 088a844180..ffd06a36e8 100644 --- a/src/fireedge/src/client/components/FormControl/index.js +++ b/src/fireedge/src/client/components/FormControl/index.js @@ -23,6 +23,7 @@ import SwitchController from 'client/components/FormControl/SwitchController' import TableController from 'client/components/FormControl/TableController' import TextController from 'client/components/FormControl/TextController' import TimeController from 'client/components/FormControl/TimeController' +import ToggleController from 'client/components/FormControl/ToggleController' import SubmitButton, { SubmitButtonPropTypes } from 'client/components/FormControl/SubmitButton' import InputCode from 'client/components/FormControl/InputCode' @@ -40,6 +41,7 @@ export { TableController, TextController, TimeController, + ToggleController, SubmitButton, SubmitButtonPropTypes, diff --git a/src/fireedge/src/client/components/FormStepper/MobileStepper.js b/src/fireedge/src/client/components/FormStepper/MobileStepper.js index 5c15ab305b..6a6444ad66 100644 --- a/src/fireedge/src/client/components/FormStepper/MobileStepper.js +++ b/src/fireedge/src/client/components/FormStepper/MobileStepper.js @@ -20,7 +20,7 @@ import { Button, MobileStepper, Typography, Box, alpha } from '@mui/material' import makeStyles from '@mui/styles/makeStyles' import { NavArrowLeft as PreviousIcon, NavArrowRight as NextIcon } from 'iconoir-react' -import { Tr } from 'client/components/HOC' +import { Tr, Translate, labelCanBeTranslated } from 'client/components/HOC' import { T } from 'client/constants' const useStyles = makeStyles(theme => ({ @@ -57,7 +57,7 @@ const CustomMobileStepper = ({ - {typeof label === 'string' ? Tr(label) : label} + {labelCanBeTranslated(label) ? Tr(label) : label} {Boolean(errors[id]) && ( @@ -79,12 +79,16 @@ const CustomMobileStepper = ({ onClick={handleBack} disabled={disabledBack} > - {Tr(T.Back)} + + } nextButton={ } diff --git a/src/fireedge/src/client/components/FormStepper/Stepper.js b/src/fireedge/src/client/components/FormStepper/Stepper.js index 2316b84c44..1e2965e4ec 100644 --- a/src/fireedge/src/client/components/FormStepper/Stepper.js +++ b/src/fireedge/src/client/components/FormStepper/Stepper.js @@ -26,7 +26,7 @@ import StepConnector, { stepConnectorClasses } from '@mui/material/StepConnector import { styled } from '@mui/styles' import { SubmitButton } from 'client/components/FormControl' -import { Tr, Translate } from 'client/components/HOC' +import { Tr, Translate, labelCanBeTranslated } from 'client/components/HOC' import { T, SCHEMES } from 'client/constants' const StepperStyled = styled(Stepper)(({ theme }) => ({ @@ -65,10 +65,7 @@ const ConnectorStyled = styled(StepConnector)(({ theme }) => ({ const StepIconStyled = styled(StepIcon)(({ theme }) => ({ color: theme.palette.text.hint, display: 'block', - [`&.${stepIconClasses.completed}`]: { - color: theme.palette.secondary[700] - }, - [`&.${stepIconClasses.active}`]: { + [`&.${stepIconClasses.completed}, &.${stepIconClasses.active}`]: { color: theme.palette.secondary[700] }, [`&.${stepIconClasses.error}`]: { @@ -104,7 +101,7 @@ const CustomStepper = ({ StepIconComponent={StepIconStyled} error={Boolean(errors[id]?.message)} > - {typeof label === 'string' ? Tr(label) : label} + {labelCanBeTranslated(label) ? Tr(label) : label} diff --git a/src/fireedge/src/client/components/FormStepper/index.js b/src/fireedge/src/client/components/FormStepper/index.js index 4e545aad1f..47a943dcfc 100644 --- a/src/fireedge/src/client/components/FormStepper/index.js +++ b/src/fireedge/src/client/components/FormStepper/index.js @@ -18,13 +18,14 @@ import PropTypes from 'prop-types' import { BaseSchema } from 'yup' import { useFormContext } from 'react-hook-form' +import { DevTool } from '@hookform/devtools' import { useMediaQuery } from '@mui/material' import { useGeneral } from 'client/features/General' import CustomMobileStepper from 'client/components/FormStepper/MobileStepper' import CustomStepper from 'client/components/FormStepper/Stepper' import SkeletonStepsForm from 'client/components/FormStepper/Skeleton' -import { groupBy, Step } from 'client/utils' +import { groupBy, Step, isDevelopment } from 'client/utils' const FIRST_STEP = 0 @@ -40,7 +41,7 @@ const FIRST_STEP = 0 */ const FormStepper = ({ steps = [], schema, onSubmit }) => { const isMobile = useMediaQuery(theme => theme.breakpoints.only('xs')) - const { watch, reset, errors, setError } = useFormContext() + const { control, watch, reset, formState: { errors }, setError } = useFormContext() const { isLoading } = useGeneral() const [formData, setFormData] = useState(() => watch()) @@ -51,7 +52,7 @@ const FormStepper = ({ steps = [], schema, onSubmit }) => { const disabledBack = useMemo(() => activeStep === FIRST_STEP, [activeStep]) useEffect(() => { - reset({ ...formData }, { errors: false }) + reset({ ...formData }, { keepErrors: false }) }, [formData]) const validateSchema = async stepIdx => { @@ -164,6 +165,8 @@ const FormStepper = ({ steps = [], schema, onSubmit }) => { ), [isLoading, isMobile, activeStep, errors[id]])} {/* FORM CONTENT */} {Content && } + + {isDevelopment() && } ) } diff --git a/src/fireedge/src/client/components/Forms/FormWithSchema.js b/src/fireedge/src/client/components/Forms/FormWithSchema.js index 2b67493042..98f1c5517e 100644 --- a/src/fireedge/src/client/components/Forms/FormWithSchema.js +++ b/src/fireedge/src/client/components/Forms/FormWithSchema.js @@ -17,23 +17,14 @@ import { createElement, useMemo } from 'react' import PropTypes from 'prop-types' -import { styled, Grid } from '@mui/material' +import { Grid, Typography } from '@mui/material' import { useFormContext } from 'react-hook-form' import * as FC from 'client/components/FormControl' +import { Tr } from 'client/components/HOC' import { INPUT_TYPES } from 'client/constants' -import { get } from 'client/utils' -const Fieldset = styled('fieldset')({ border: 'none' }) - -const Legend = styled('legend')(({ theme }) => ({ - ...theme.typography.subtitle1, - marginBottom: '1em', - padding: '0em 1em 0.2em 0.5em', - borderBottom: `2px solid ${theme.palette.secondary.main}` -})) - -const NOT_DEPEND_ATTRIBUTES = ['transform', 'Table'] +const NOT_DEPEND_ATTRIBUTES = ['watcher', 'transform', 'Table', 'renderValue'] const INPUT_CONTROLLER = { [INPUT_TYPES.TEXT]: FC.TextController, @@ -45,28 +36,39 @@ const INPUT_CONTROLLER = { [INPUT_TYPES.AUTOCOMPLETE]: FC.AutocompleteController, [INPUT_TYPES.FILE]: FC.FileController, [INPUT_TYPES.TIME]: FC.TimeController, - [INPUT_TYPES.TABLE]: FC.TableController + [INPUT_TYPES.TABLE]: FC.TableController, + [INPUT_TYPES.TOGGLE]: FC.ToggleController } const FormWithSchema = ({ id, cy, fields, className, legend }) => { const formContext = useFormContext() - const { control, errors, watch } = formContext + const { control, watch } = formContext const getFields = useMemo(() => typeof fields === 'function' ? fields() : fields, []) if (getFields.length === 0) return null + const addIdToName = name => name.startsWith('$') + ? name.slice(1) // removes character '$' and returns + : id ? `${id}.${name}` : name // concat form ID if exists + return ( -
- {legend && {legend}} +
+ {legend && ( + + {Tr(legend)} + + )} {getFields?.map?.( ({ dependOf, ...attributes }) => { let valueOfDependField = null + let nameOfDependField = null + if (dependOf) { - const nameOfDependField = id - ? Array.isArray(dependOf) ? dependOf.map(d => `${id}.${d}`) : `${id}.${dependOf}` - : dependOf + nameOfDependField = Array.isArray(dependOf) + ? dependOf.map(addIdToName) + : addIdToName(dependOf) valueOfDependField = watch(nameOfDependField) } @@ -78,16 +80,14 @@ const FormWithSchema = ({ id, cy, fields, className, legend }) => { const isNotDependAttribute = NOT_DEPEND_ATTRIBUTES.includes(key) const finalValue = typeof value === 'function' && !isNotDependAttribute - ? value(valueOfDependField) + ? value(valueOfDependField, formContext) : value return { ...field, [key]: finalValue } }, {}) const dataCy = `${cy}-${name}` - const inputName = id ? `${id}.${name}` : name - - const inputError = get(errors, inputName) ?? false + const inputName = addIdToName(name) const isHidden = htmlType === INPUT_TYPES.HIDDEN @@ -99,8 +99,8 @@ const FormWithSchema = ({ id, cy, fields, className, legend }) => { {createElement(INPUT_CONTROLLER[type], { control, cy: dataCy, - error: inputError, formContext, + dependencies: nameOfDependField, name: inputName, type: htmlType === false ? undefined : htmlType, ...fieldProps @@ -111,7 +111,7 @@ const FormWithSchema = ({ id, cy, fields, className, legend }) => { } )} -
+
) } diff --git a/src/fireedge/src/client/components/Forms/Provider/CreateForm/Steps/Connection/schema.js b/src/fireedge/src/client/components/Forms/Provider/CreateForm/Steps/Connection/schema.js index 287121870d..c27c3d3e29 100644 --- a/src/fireedge/src/client/components/Forms/Provider/CreateForm/Steps/Connection/schema.js +++ b/src/fireedge/src/client/components/Forms/Provider/CreateForm/Steps/Connection/schema.js @@ -16,7 +16,7 @@ /* eslint-disable jsdoc/require-jsdoc */ import * as yup from 'yup' import { INPUT_TYPES } from 'client/constants' -import { getValidationFromFields, isBase64, prettyBytes } from 'client/utils' +import { getValidationFromFields, prettyBytes } from 'client/utils' const MAX_SIZE_JSON = 102_400 const JSON_FORMAT = 'application/json' @@ -29,11 +29,11 @@ export const FORM_FIELDS = ({ connection, fileCredentials }) => let validation = yup .string() .trim() - .required(`${name} field is required`) + .required() .default(undefined) if (isInputFile) { - validation = validation.test('is-base64', 'File has invalid format', isBase64) + validation = validation.isBase64() } return { diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootOrder.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootOrder.js new file mode 100644 index 0000000000..432cd0fd1e --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootOrder.js @@ -0,0 +1,228 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { SetStateAction } from 'react' +import PropTypes from 'prop-types' +import { useWatch } from 'react-hook-form' + +import { NetworkAlt as NetworkIcon, BoxIso as ImageIcon } from 'iconoir-react' +import { Stack, Checkbox, styled } from '@mui/material' +import { DragDropContext, Draggable, Droppable, DropResult } from 'react-beautiful-dnd' + +import { Translate } from 'client/components/HOC' +import { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { TAB_ID as BOOTING_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting' +import { TAB_ID as STORAGE_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage' +import { TAB_ID as NIC_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking' +import { T } from 'client/constants' + +export const BOOT_ORDER_ID = 'BOOT' + +const BootItem = styled('div')(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + gap: '0.5em', + border: `1px solid ${theme.palette.divider}`, + borderRadius: '0.5em', + padding: '1em', + marginBottom: '1em', + backgroundColor: theme.palette.background.default +})) + +const BootItemDraggable = styled(BootItem)(({ theme }) => ({ + '&:before': { + content: "''", + display: 'block', + width: 16, + height: 10, + backgroundImage: `linear-gradient( + to bottom, + ${theme.palette.action.active} 4px, + transparent 4px, + transparent 6px, + ${theme.palette.action.active} 6px + )` + } +})) + +/** + * @param {string} id - Resource id: 'NIC' or 'DISK' + * @param {Array} list - List of resources + * @param {object} formData - Form data + * @param {SetStateAction} setFormData - React set state action + */ +export const reorderBootAfterRemove = (id, list, formData, setFormData) => { + const type = String(id).toLowerCase().replace(/\d+/g, '') // nic | disk + const getIndexFromId = id => String(id).toLowerCase().replace(type, '') + const idxToRemove = getIndexFromId(id) + + const ids = list + .filter(resource => resource.NAME !== id) + .map(resource => String(resource.NAME).toLowerCase()) + + const newBootOrder = [...formData?.[BOOTING_ID]?.[BOOT_ORDER_ID]?.split(',').filter(Boolean)] + .filter(bootId => !bootId.startsWith(type) || ids.includes(bootId)) + .map(bootId => { + if (!bootId.startsWith(type)) return bootId + + const resourceId = getIndexFromId(bootId) + + return resourceId < idxToRemove + ? bootId + : `${type}${resourceId - 1}` + }) + + reorder(newBootOrder, setFormData) +} + +/** + * @param {string[]} newBootOrder - New boot order + * @param {SetStateAction} setFormData - React set state action + */ +const reorder = (newBootOrder, setFormData) => { + setFormData(prev => ({ + ...prev, + [EXTRA_ID]: { + ...prev[EXTRA_ID], + [BOOTING_ID]: { + ...prev[EXTRA_ID]?.[BOOTING_ID], + [BOOT_ORDER_ID]: newBootOrder.join(',') + } + } + })) +} + +const BootOrder = ({ data, setFormData, control }) => { + const booting = useWatch({ name: `${EXTRA_ID}.${BOOTING_ID}.${BOOT_ORDER_ID}`, control }) + const bootOrder = booting?.split(',').filter(Boolean) ?? [] + + const disks = data?.[STORAGE_ID] + ?.map((disk, idx) => { + const isVolatile = !disk?.IMAGE && !disk?.IMAGE_ID + + return { + ID: `disk${idx}`, + NAME: ( + <> + + {isVolatile + ? <>{`${disk?.NAME}: `} + : [disk?.NAME, disk?.IMAGE].filter(Boolean).join(': ')} + + ) + } + }) ?? [] + + const nics = data?.[NIC_ID] + ?.map((nic, idx) => ({ + ID: `nic${idx}`, + NAME: ( + <> + + {[nic?.NAME, nic.NETWORK].filter(Boolean).join(': ')} + + ) + })) ?? [] + + const enabledItems = [...disks, ...nics] + .filter(item => bootOrder.includes(item.ID)) + .sort((a, b) => bootOrder.indexOf(a.ID) - bootOrder.indexOf(b.ID)) + + const restOfItems = [...disks, ...nics] + .filter(item => !bootOrder.includes(item.ID)) + + /** @param {DropResult} result - Drop result */ + const onDragEnd = result => { + const { destination, source, draggableId } = result + const newBootOrder = [...bootOrder] + + if ( + destination && + destination.index !== source.index && + newBootOrder.includes(draggableId) + ) { + newBootOrder.splice(source.index, 1) // remove current position + newBootOrder.splice(destination.index, 0, draggableId) // set in new position + + reorder(newBootOrder, setFormData) + } + } + + const handleEnable = itemId => { + const newBootOrder = [...bootOrder] + const itemIndex = bootOrder.indexOf(itemId) + + itemIndex >= 0 + ? newBootOrder.splice(itemIndex, 1) + : newBootOrder.push(itemId) + + reorder(newBootOrder, setFormData) + } + + return ( + + + + {({ droppableProps, innerRef, placeholder }) => ( + + {enabledItems.map(({ ID, NAME }, idx) => ( + + {({ draggableProps, dragHandleProps, innerRef }) => ( + + handleEnable(ID)} + /> + {NAME} + + )} + + ))} + {placeholder} + + )} + + {restOfItems.map(({ ID, NAME }) => ( + + handleEnable(ID)} + /> + {NAME} + + ))} + + + ) +} + +BootOrder.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +BootOrder.displayName = 'BootOrder' + +export default BootOrder diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootSchema.js new file mode 100644 index 0000000000..8444fbc997 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootSchema.js @@ -0,0 +1,219 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string, boolean } from 'yup' + +import { useHost } from 'client/features/One' +import { getKvmMachines, getKvmCpuModels } from 'client/models/Host' +import { Field, arrayToOptions, filterFieldsByHypervisor } from 'client/utils' +import { + T, + INPUT_TYPES, + CPU_ARCHITECTURES, + SD_DISK_BUSES, + FIRMWARE_TYPES, + KVM_FIRMWARE_TYPES, + VCENTER_FIRMWARE_TYPES, + HYPERVISORS +} from 'client/constants' + +const { vcenter, firecracker, lxc, kvm } = HYPERVISORS + +/** @type {Field} CPU architecture field */ +export const ARCH = { + name: 'OS.ARCH', + label: T.CpuArchitecture, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.SELECT, + values: () => arrayToOptions(CPU_ARCHITECTURES), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Bus for SD disks field */ +export const SD_DISK_BUS = { + name: 'OS.SD_DISK_BUS', + label: T.BusForSdDisks, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.SELECT, + values: arrayToOptions(SD_DISK_BUSES, { getText: o => o.toUpperCase() }), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Machine type field */ +export const MACHINE_TYPES = { + name: 'OS.MACHINE', + label: T.MachineType, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.SELECT, + values: () => { + const hosts = useHost() + const kvmMachines = getKvmMachines(hosts) + + return arrayToOptions(kvmMachines) + }, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} CPU Model field */ +export const CPU_MODEL = { + name: 'OS.MODEL', + label: T.CpuModel, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.SELECT, + values: () => { + const hosts = useHost() + const kvmCpuModels = getKvmCpuModels(hosts) + + return arrayToOptions(kvmCpuModels) + }, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Root device field */ +export const ROOT_DEVICE = { + name: 'OS.ROOT', + label: T.RootDevice, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Kernel CMD field */ +export const KERNEL_CMD = { + name: 'OS.KERNEL_CMD', + label: T.KernelBootParameters, + notOnHypervisors: [vcenter, lxc], + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + fieldProps: { placeholder: 'ro console=tty1' } +} + +/** @type {Field} Path bootloader field */ +export const BOOTLOADER = { + name: 'OS.BOOTLOADER', + label: T.PathBootloader, + notOnHypervisors: [vcenter, lxc], + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + grid: { md: 12 } +} + +/** @type {Field} UUID field */ +export const UUID = { + name: 'OS.UUID', + label: T.UniqueIdOfTheVm, + tooltip: T.UniqueIdOfTheVmConcept, + notOnHypervisors: [firecracker, lxc], + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + grid: { md: 12 } +} + +/** @type {Field} Feature custom field */ +export const FEATURE_CUSTOM_ENABLED = { + name: 'OS.FEATURE_CUSTOM_ENABLED', + label: T.CustomPath, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.SWITCH, + validation: boolean().strip().default(() => false), + grid: { md: 12 } +} + +/** @type {Field} Firmware field */ +export const FIRMWARE = { + name: 'OS.FIRMWARE', + label: T.Firmware, + tooltip: T.FirmwareConcept, + notOnHypervisors: [firecracker, lxc], + type: ([_, custom]) => custom ? INPUT_TYPES.TEXT : INPUT_TYPES.SELECT, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + dependOf: ['$general.HYPERVISOR', FEATURE_CUSTOM_ENABLED.name], + values: ([hypervisor] = []) => { + const types = { + [vcenter]: VCENTER_FIRMWARE_TYPES, + [kvm]: KVM_FIRMWARE_TYPES + }[hypervisor] ?? FIRMWARE_TYPES + + return arrayToOptions(types) + }, + grid: { md: 12 } +} + +/** @type {Field} Feature secure field */ +export const FIRMWARE_SECURE = { + name: 'OS.FIRMWARE_SECURE', + label: T.FirmwareSecure, + notOnHypervisors: [vcenter, firecracker, lxc], + type: INPUT_TYPES.CHECKBOX, + dependOf: FEATURE_CUSTOM_ENABLED.name, + htmlType: custom => !custom && INPUT_TYPES.HIDDEN, + validation: boolean() + .default(() => false) + .transform(value => { + if (typeof value === 'boolean') return value + + return String(value).toUpperCase() === 'YES' + }), + grid: { md: 12 } +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of Boot fields + */ +export const BOOT_FIELDS = hypervisor => + filterFieldsByHypervisor( + [ + ARCH, + SD_DISK_BUS, + MACHINE_TYPES, + CPU_MODEL, + ROOT_DEVICE, + KERNEL_CMD, + BOOTLOADER, + UUID, + FEATURE_CUSTOM_ENABLED, + FIRMWARE, + FIRMWARE_SECURE + ], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/featuresSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/featuresSchema.js new file mode 100644 index 0000000000..b131d04f50 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/featuresSchema.js @@ -0,0 +1,150 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string, number } from 'yup' + +import { Field, arrayToOptions, filterFieldsByHypervisor } from 'client/utils' +import { T, INPUT_TYPES, HYPERVISORS } from 'client/constants' + +const { vcenter, lxc, firecracker } = HYPERVISORS + +/** @type {Field} ACPI field */ +export const ACPI = { + name: 'OS.ACPI', + label: T.Acpi, + tooltip: T.AcpiConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} PAE field */ +export const PAE = { + name: 'OS.PAE', + label: T.Pae, + tooltip: T.PaeConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} APIC field */ +export const APIC = { + name: 'OS.APIC', + label: T.Apic, + tooltip: T.ApicConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} HYPER-V field */ +export const HYPERV = { + name: 'OS.HYPERV', + label: T.Hyperv, + tooltip: T.HypervConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Local time field */ +export const LOCALTIME = { + name: 'OS.LOCALTIME', + label: T.Localtime, + tooltip: T.LocaltimeConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Guest agent field */ +export const GUEST_AGENT = { + name: 'OS.GUEST_AGENT', + label: T.GuestAgent, + tooltip: T.GuestAgentConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions([T.Yes, T.No]), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Virtio-SCSI queues field */ +export const VIRTIO_SCSI_QUEUES = { + name: 'OS.VIRTIO_SCSI_QUEUES', + label: T.VirtioQueues, + tooltip: T.VirtioQueuesConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions(Array.from({ length: 16 }, (_, i) => i + 1)), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} IO threads field */ +export const IO_THREADS = { + name: 'OS.IOTHREADS', + label: T.IoThreads, + tooltip: T.IoThreadsConcept, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.TEXT, + htmlType: 'number', + validation: number() + .default(() => undefined) +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of Features fields + */ +export const FEATURES_FIELDS = hypervisor => + filterFieldsByHypervisor( + [ + ACPI, + PAE, + APIC, + HYPERV, + LOCALTIME, + GUEST_AGENT, + VIRTIO_SCSI_QUEUES, + IO_THREADS + ], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/index.js new file mode 100644 index 0000000000..813be091fb --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/index.js @@ -0,0 +1,102 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' +import { Stack, Typography } from '@mui/material' + +import FormWithSchema from 'client/components/Forms/FormWithSchema' + +import { STEP_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import BootOrder, { reorderBootAfterRemove } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/bootOrder' +import { TAB_ID as STORAGE_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage' +import { TAB_ID as NIC_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking' +import { BOOT_FIELDS, KERNEL_FIELDS, RAMDISK_FIELDS, FEATURES_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema' +import { Translate } from 'client/components/HOC' +import { T } from 'client/constants' +import AdornmentWithTooltip from 'client/components/FormControl/Tooltip' + +export const TAB_ID = 'OS' + +const Booting = props => { + const { hypervisor } = props + + return ( + <> + {( + !!props.data?.[STORAGE_ID]?.length || + !!props.data?.[NIC_ID]?.length + ) && ( +
+ + + + + +
+ )} + + + + + + + + ) +} + +Booting.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +Booting.displayName = 'Booting' + +export default Booting + +export { reorderBootAfterRemove } diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/kernelSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/kernelSchema.js new file mode 100644 index 0000000000..7db6240a2b --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/kernelSchema.js @@ -0,0 +1,84 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { boolean, string } from 'yup' + +import { useImage } from 'client/features/One' +import { getType } from 'client/models/Image' +import { Field, clearNames, filterFieldsByHypervisor } from 'client/utils' +import { T, INPUT_TYPES, HYPERVISORS, IMAGE_TYPES_STR } from 'client/constants' + +const { vcenter, lxc } = HYPERVISORS + +const kernelValidation = string().trim().notRequired().default(() => undefined) + +/** @type {Field} Kernel path field */ +export const KERNEL_PATH_ENABLED = { + name: 'OS.KERNEL_PATH_ENABLED', + label: T.CustomPath, + notOnHypervisors: [vcenter, lxc], + type: INPUT_TYPES.SWITCH, + validation: boolean().strip().default(() => false) +} + +/** @type {Field} Kernel DS field */ +export const KERNEL_DS = { + name: 'OS.KERNEL_DS', + label: T.Kernel, + notOnHypervisors: [vcenter, lxc], + type: INPUT_TYPES.AUTOCOMPLETE, + dependOf: KERNEL_PATH_ENABLED.name, + htmlType: enabled => enabled && INPUT_TYPES.HIDDEN, + values: () => { + const images = useImage() + + return images + ?.filter(image => getType(image) === IMAGE_TYPES_STR.KERNEL) + ?.map(({ ID, NAME }) => ({ text: `#${ID} ${NAME}`, value: `$FILE[IMAGE_ID=${ID}]` })) + ?.sort((a, b) => { + const compareOptions = { numeric: true, ignorePunctuation: true } + + return a.value.localeCompare(b.value, undefined, compareOptions) + }) + }, + validation: kernelValidation.when( + clearNames(KERNEL_PATH_ENABLED.name), + (enabled, schema) => enabled ? schema.strip() : schema + ) +} + +/** @type {Field} Kernel path field */ +export const KERNEL = { + name: 'OS.KERNEL', + label: T.KernelPath, + notOnHypervisors: [vcenter, lxc], + type: INPUT_TYPES.TEXT, + dependOf: KERNEL_PATH_ENABLED.name, + htmlType: enabled => !enabled && INPUT_TYPES.HIDDEN, + validation: kernelValidation.when( + clearNames(KERNEL_PATH_ENABLED.name), + (enabled, schema) => enabled ? schema : schema.strip() + ) +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of Kernel fields + */ +export const KERNEL_FIELDS = hypervisor => + filterFieldsByHypervisor( + [KERNEL_PATH_ENABLED, KERNEL, KERNEL_DS], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/ramdiskSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/ramdiskSchema.js new file mode 100644 index 0000000000..3fb8963ff7 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/ramdiskSchema.js @@ -0,0 +1,84 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string, boolean } from 'yup' + +import { useImage } from 'client/features/One' +import { getType } from 'client/models/Image' +import { Field, clearNames, filterFieldsByHypervisor } from 'client/utils' +import { T, INPUT_TYPES, HYPERVISORS, IMAGE_TYPES_STR } from 'client/constants' + +const { vcenter, lxc, firecracker } = HYPERVISORS + +const ramdiskValidation = string().trim().notRequired().default(() => undefined) + +/** @type {Field} Ramdisk path field */ +export const RAMDISK_PATH_ENABLED = { + name: 'OS.RAMDISK_PATH_ENABLED', + label: T.CustomPath, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.SWITCH, + validation: boolean().strip().default(() => false) +} + +/** @type {Field} Ramdisk DS field */ +export const RAMDISK_DS = { + name: 'OS.INITRD_DS', + label: T.Ramdisk, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.AUTOCOMPLETE, + dependOf: RAMDISK_PATH_ENABLED.name, + htmlType: enabled => enabled && INPUT_TYPES.HIDDEN, + values: () => { + const images = useImage() + + return images + ?.filter(image => getType(image) === IMAGE_TYPES_STR.RAMDISK) + ?.map(({ ID, NAME }) => ({ text: `#${ID} ${NAME}`, value: `$FILE[IMAGE_ID=${ID}]` })) + ?.sort((a, b) => { + const compareOptions = { numeric: true, ignorePunctuation: true } + + return a.value.localeCompare(b.value, undefined, compareOptions) + }) + }, + validation: ramdiskValidation.when( + clearNames(RAMDISK_PATH_ENABLED.name), + (enabled, schema) => enabled ? schema.strip() : schema + ) +} + +/** @type {Field} Ramdisk path field */ +export const RAMDISK = { + name: 'OS.INITRD', + label: T.RamdiskPath, + notOnHypervisors: [vcenter, lxc, firecracker], + type: INPUT_TYPES.TEXT, + dependOf: RAMDISK_PATH_ENABLED.name, + htmlType: enabled => !enabled && INPUT_TYPES.HIDDEN, + validation: ramdiskValidation.when( + clearNames(RAMDISK_PATH_ENABLED.name), + (enabled, schema) => enabled ? schema : schema.strip() + ) +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of Ramdisk fields + */ +export const RAMDISK_FIELDS = hypervisor => + filterFieldsByHypervisor( + [RAMDISK_PATH_ENABLED, RAMDISK, RAMDISK_DS], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema.js new file mode 100644 index 0000000000..ea7900a35e --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema.js @@ -0,0 +1,50 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ + +import { string } from 'yup' + +import { Field } from 'client/utils' +import { BOOT_FIELDS } from './bootSchema' +import { KERNEL_FIELDS } from './kernelSchema' +import { RAMDISK_FIELDS } from './ramdiskSchema' +import { FEATURES_FIELDS } from './featuresSchema' + +export { + BOOT_FIELDS, + KERNEL_FIELDS, + RAMDISK_FIELDS, + FEATURES_FIELDS +} + +/** @type {Field} Boot order field */ +export const BOOT_ORDER = { + name: 'OS.BOOT', + validation: string() + .trim() + .notRequired() + .default(() => '') +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} All 'OS & CPU' fields + */ +export const OS_FIELDS = hypervisor => [ + ...BOOT_FIELDS(hypervisor), + ...KERNEL_FIELDS(hypervisor), + ...RAMDISK_FIELDS(hypervisor), + ...FEATURES_FIELDS(hypervisor) +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/index.js new file mode 100644 index 0000000000..cf3eaffe80 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/index.js @@ -0,0 +1,40 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' + +// import FormWithSchema from 'client/components/Forms/FormWithSchema' + +// import { STEP_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +// import {} from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/schema' +// import { T } from 'client/constants' + +const Context = () => { + return ( + <> + {'Context'} + + ) +} + +Context.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func +} + +Context.displayName = 'Context' + +export default Context diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/schema.js new file mode 100644 index 0000000000..9f80216581 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context/schema.js @@ -0,0 +1,29 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { string } from 'yup' + +import { INPUT_TYPES } from 'client/constants' + +const FIELD = { + name: '', + label: '', + tooltip: '', + type: INPUT_TYPES.TEXT, + validation: string().trim().notRequired() +} + +export const CONTEXT_FIELDS = [FIELD] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/index.js new file mode 100644 index 0000000000..b2202fdd07 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/index.js @@ -0,0 +1,111 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { useMemo } from 'react' +import PropTypes from 'prop-types' + +import { useFormContext } from 'react-hook-form' +import { useTheme } from '@mui/material' +import { + WarningCircledOutline as WarningIcon, + Db as DatastoreIcon, + ServerConnection as NetworkIcon, + SystemShut as OsIcon, + DataTransferBoth as IOIcon, + Calendar as ActionIcon, + NetworkAlt as PlacementIcon, + Folder as ContextIcon, + ElectronicsChip as NumaIcon +} from 'iconoir-react' + +import { useAuth } from 'client/features/Auth' +import { Tr, Translate } from 'client/components/HOC' + +import Tabs from 'client/components/Tabs' +import Storage from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage' +import Networking from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking' +import Placement from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement' +import ScheduleAction from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/scheduleAction' +import Booting from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting' +import Context from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/context' +import InputOutput from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput' +import Numa from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa' + +import { STEP_ID as GENERAL_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General' +import { SCHEMA } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema' +import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helper' +import { T } from 'client/constants' + +export const STEP_ID = 'extra' + +export const STEP_SECTION = [ + { id: 'storage', name: T.Storage, icon: DatastoreIcon, Content: Storage }, + { id: 'network', name: T.Network, icon: NetworkIcon, Content: Networking }, + { id: 'booting', name: T.OSBooting, icon: OsIcon, Content: Booting }, + { id: 'input_output', name: T.InputOrOutput, icon: IOIcon, Content: InputOutput }, + { id: 'context', name: T.Context, icon: ContextIcon, Content: Context }, + { id: 'sched_action', name: T.ScheduledAction, icon: ActionIcon, Content: ScheduleAction }, + { id: 'placement', name: T.Placement, icon: PlacementIcon, Content: Placement }, + { id: 'numa', name: T.Numa, icon: NumaIcon, Content: Numa } +] + +const Content = ({ data, setFormData }) => { + const theme = useTheme() + const { watch, formState: { errors }, control } = useFormContext() + const { view, getResourceView } = useAuth() + + const tabs = useMemo(() => { + const hypervisor = watch(`${GENERAL_ID}.HYPERVISOR`) + const dialog = getResourceView('VM-TEMPLATE')?.dialogs?.create_dialog + const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) + + return STEP_SECTION + .filter(({ id }) => sectionsAvailable.includes(id)) + .map(({ Content, name, icon, ...section }, idx) => ({ + ...section, + name, + label: , + renderContent: , + icon: errors[STEP_ID]?.[idx] ? ( + + ) : icon + })) + }, [errors[STEP_ID], view, control]) + + return tabs.length > 0 ? ( + + ) : ( + {Tr(T.Empty)} + ) +} + +const ExtraConfiguration = () => ({ + id: STEP_ID, + label: T.AdvancedOptions, + resolver: formData => { + const hypervisor = formData?.[GENERAL_ID]?.HYPERVISOR + return SCHEMA(hypervisor) + }, + optionsValidate: { abortEarly: false }, + content: Content +}) + +Content.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func +} + +export default ExtraConfiguration diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/index.js new file mode 100644 index 0000000000..ac924a2381 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/index.js @@ -0,0 +1,52 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' +import { Stack } from '@mui/material' + +import FormWithSchema from 'client/components/Forms/FormWithSchema' + +import { STEP_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { INPUT_OUTPUT_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/schema' +import { T } from 'client/constants' + +const InputOutput = ({ hypervisor }) => { + return ( + + + + ) +} + +InputOutput.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +InputOutput.displayName = 'InputOutput' + +export default InputOutput diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/schema.js new file mode 100644 index 0000000000..3435f63ee9 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/inputOutput/schema.js @@ -0,0 +1,143 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { string, boolean } from 'yup' + +import { Field, arrayToOptions, filterFieldsByHypervisor } from 'client/utils' +import { T, INPUT_TYPES, HYPERVISORS } from 'client/constants' + +const { vcenter, lxc, kvm } = HYPERVISORS + +/** @type {Field} Type field */ +export const TYPE = { + name: 'GRAPHICS.TYPE', + label: T.Type, + type: INPUT_TYPES.TOGGLE, + dependOf: '$general.HYPERVISOR', + values: (hypervisor = kvm) => { + const types = { + [vcenter]: [T.VMRC], + [lxc]: [T.VNC] + }[hypervisor] ?? [T.VNC, T.SDL, T.SPICE] + + return arrayToOptions(types) + }, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + grid: { md: 12 } +} + +/** @type {Field} Listen field */ +export const LISTEN = { + name: 'GRAPHICS.LISTEN', + label: T.ListenOnIp, + type: INPUT_TYPES.TEXT, + dependOf: TYPE.name, + htmlType: noneType => !noneType && INPUT_TYPES.HIDDEN, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + fieldProps: { placeholder: '0.0.0.0' }, + grid: { md: 12 } +} + +/** @type {Field} Port field */ +export const PORT = { + name: 'GRAPHICS.PORT', + label: T.ServerPort, + tooltip: T.ServerPortConcept, + type: INPUT_TYPES.TEXT, + dependOf: TYPE.name, + htmlType: noneType => !noneType && INPUT_TYPES.HIDDEN, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Keymap field */ +export const KEYMAP = { + name: 'GRAPHICS.KEYMAP', + label: T.Keymap, + type: INPUT_TYPES.TEXT, + dependOf: TYPE.name, + htmlType: noneType => !noneType && INPUT_TYPES.HIDDEN, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + fieldProps: { placeholder: 'en-us' } +} + +/** @type {Field} Password random field */ +export const RANDOM_PASSWD = { + name: 'OS.RANDOM_PASSWD', + label: T.GenerateRandomPassword, + type: INPUT_TYPES.CHECKBOX, + dependOf: TYPE.name, + htmlType: noneType => !noneType && INPUT_TYPES.HIDDEN, + validation: boolean() + .default(() => false) + .transform(value => { + if (typeof value === 'boolean') return value + + return String(value).toUpperCase() === 'YES' + }), + grid: { md: 12 } +} + +/** @type {Field} Password field */ +export const PASSWD = { + name: 'GRAPHICS.PASSWD', + label: T.Password, + type: INPUT_TYPES.PASSWORD, + dependOf: [TYPE.name, RANDOM_PASSWD.name], + htmlType: ([noneType, random] = []) => + (!noneType || random) && INPUT_TYPES.HIDDEN, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + grid: { md: 12 } +} + +/** @type {Field} Command field */ +export const COMMAND = { + name: 'GRAPHICS.COMMAND', + label: T.Command, + notOnHypervisors: [lxc], + type: INPUT_TYPES.TEXT, + dependOf: TYPE.name, + htmlType: noneType => !noneType && INPUT_TYPES.HIDDEN, + validation: string() + .trim() + .notRequired() + .default(() => undefined), + grid: { md: 12 } +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of I/O fields + */ +export const INPUT_OUTPUT_FIELDS = hypervisor => + filterFieldsByHypervisor( + [TYPE, LISTEN, PORT, KEYMAP, PASSWD, RANDOM_PASSWD, COMMAND], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking.js new file mode 100644 index 0000000000..d30e48a8fd --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/networking.js @@ -0,0 +1,148 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' +import makeStyles from '@mui/styles/makeStyles' +import { Edit, Trash } from 'iconoir-react' +import { useWatch } from 'react-hook-form' + +import { useListForm } from 'client/hooks' +import ButtonToTriggerForm from 'client/components/Forms/ButtonToTriggerForm' +import SelectCard, { Action } from 'client/components/Cards/SelectCard' +import { AttachNicForm } from 'client/components/Forms/Vm' +import { Translate } from 'client/components/HOC' + +import { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { SCHEMA as EXTRA_SCHEMA } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema' +import { reorderBootAfterRemove } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting' +import { stringToBoolean } from 'client/models/Helper' +import { T } from 'client/constants' + +const useStyles = makeStyles({ + root: { + paddingBlock: '1em', + display: 'grid', + gridTemplateColumns: 'repeat(auto-fit, minmax(300px, auto))', + gap: '1em' + } +}) + +export const TAB_ID = 'NIC' + +const Networking = ({ data, setFormData, control }) => { + const classes = useStyles() + const nics = useWatch({ name: `${EXTRA_ID}.${TAB_ID}`, control }) + + const { handleSetList, handleRemove, handleSave } = useListForm({ + parent: EXTRA_ID, + key: TAB_ID, + list: nics, + setList: setFormData, + getItemId: item => item.NAME, + addItemId: (item, _, itemIndex) => ({ ...item, NAME: `${TAB_ID}${itemIndex}` }) + }) + + const reorderNics = () => { + const diskSchema = EXTRA_SCHEMA.pick([TAB_ID]) + const { [TAB_ID]: newList } = diskSchema.cast({ [TAB_ID]: data?.[TAB_ID] }) + + handleSetList(newList) + } + + return ( + <> + AttachNicForm({ nics }), + onSubmit: handleSave + }]} + /> +
+ {nics?.map(item => { + const { NAME, RDP, SSH, NETWORK, PARENT, EXTERNAL } = item + const hasAlias = nics?.some(nic => nic.PARENT === NAME) + + return ( + + {Object + .entries({ + RDP: stringToBoolean(RDP), + SSH: stringToBoolean(SSH), + EXTERNAL: stringToBoolean(EXTERNAL), + ALIAS: PARENT + }) + .map(([k, v]) => v ? `${k}` : '') + .filter(Boolean) + .join(' | ') + } + } + action={ + <> + {!hasAlias && + { + handleRemove(NAME) + reorderNics() + reorderBootAfterRemove(NAME, nics, data, setFormData) + }} + icon={} + /> + } + , + tooltip: + }} + options={[{ + dialogProps: { + title: + }, + form: () => AttachNicForm({ nics }, item), + onSubmit: newValues => handleSave(newValues, NAME) + }]} + /> + + } + /> + ) + })} +
+ + ) +} + +Networking.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +Networking.displayName = 'Networking' + +export default Networking diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/index.js new file mode 100644 index 0000000000..3e11d1ceef --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/index.js @@ -0,0 +1,51 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' + +import FormWithSchema from 'client/components/Forms/FormWithSchema' +import { STEP_ID as GENERAL_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General' +import { VIRTUAL_CPU } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General/capacitySchema' +import { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { NUMA_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema' + +const Placement = ({ hypervisor }) => { + return ( + <> + + + + ) +} + +Placement.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +Placement.displayName = 'Placement' + +export default Placement diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema.js new file mode 100644 index 0000000000..f01ae47c8a --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema.js @@ -0,0 +1,178 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string, number } from 'yup' + +import { useHost } from 'client/features/One' +import { getHugepageSizes } from 'client/models/Host' +import { T, INPUT_TYPES, NUMA_PIN_POLICIES, NUMA_MEMORY_ACCESS, HYPERVISORS } from 'client/constants' +import { + Field, + filterFieldsByHypervisor, + getFactorsOfNumber, + sentenceCase, + prettyBytes, + arrayToOptions +} from 'client/utils' + +const { vcenter, firecracker } = HYPERVISORS + +const threadsValidation = number() + .nullable() + .notRequired() + .integer() + +/** + * @param {HYPERVISORS} hypervisor - VM hypervisor + * @returns {Field} Pin policy field + */ +const PIN_POLICY = hypervisor => { + const isVCenter = hypervisor === vcenter + const isFirecracker = hypervisor === firecracker + + return { + name: 'TOPOLOGY.PIN_POLICY', + label: T.PinPolicy, + tooltip: [T.PinPolicyConcept, NUMA_PIN_POLICIES.join(', ')], + type: INPUT_TYPES.SELECT, + values: arrayToOptions(NUMA_PIN_POLICIES, { + addEmpty: false, + getText: sentenceCase + }), + validation: string() + .trim() + .notRequired() + .default(() => isFirecracker + ? NUMA_PIN_POLICIES[2] // SHARED + : NUMA_PIN_POLICIES[0] // NONE + ), + fieldProps: { disabled: isVCenter || isFirecracker } + } +} + +/** + * @param {HYPERVISORS} hypervisor - VM hypervisor + * @returns {Field} Cores field + */ +const CORES = hypervisor => ({ + name: 'TOPOLOGY.CORES', + label: T.Cores, + tooltip: T.NumaCoresConcept, + dependOf: '$general.VCPU', + type: hypervisor === vcenter ? INPUT_TYPES.SELECT : INPUT_TYPES.TEXT, + htmlType: 'number', + values: vcpu => arrayToOptions(getFactorsOfNumber(vcpu ?? 0)), + validation: number() + .notRequired() + .integer() + .default(() => undefined) +}) + +/** + * @param {HYPERVISORS} hypervisor - VM hypervisor + * @returns {Field} Sockets field + */ +const SOCKETS = hypervisor => ({ + name: 'TOPOLOGY.SOCKETS', + label: T.Sockets, + tooltip: T.NumaSocketsConcept, + type: INPUT_TYPES.TEXT, + htmlType: 'number', + validation: number() + .notRequired() + .integer() + .default(() => 1), + fieldProps: { + disabled: hypervisor === firecracker + }, + ...(hypervisor === vcenter && { + fieldProps: { disabled: true }, + dependOf: ['$general.VCPU', 'TOPOLOGY.CORES'], + watcher: ([vcpu, cores] = []) => { + if (!isNaN(+vcpu) && !isNaN(+cores) && +cores !== 0) { + return vcpu / cores + } + } + }) +}) + +/** + * @param {HYPERVISORS} hypervisor - VM hypervisor + * @returns {Field} Threads field + */ +const THREADS = hypervisor => ({ + name: 'TOPOLOGY.THREADS', + label: T.Threads, + tooltip: T.ThreadsConcept, + type: INPUT_TYPES.TEXT, + htmlType: 'number', + validation: threadsValidation, + ...(hypervisor === firecracker && { + type: INPUT_TYPES.SELECT, + values: arrayToOptions([1, 2]), + validation: threadsValidation.min(1).max(2) + }), + ...(hypervisor === vcenter && { + type: INPUT_TYPES.SELECT, + values: arrayToOptions([1]), + validation: threadsValidation.min(1).max(1) + }) +}) + +/** @type {Field} Hugepage size field */ +const HUGEPAGES = { + name: 'TOPOLOGY.HUGEPAGE_SIZE', + label: T.HugepagesSize, + tooltip: T.HugepagesSizeConcept, + notOnHypervisors: [vcenter, firecracker], + type: INPUT_TYPES.SELECT, + values: () => { + const hosts = useHost() + const sizes = hosts + .reduce((res, host) => res.concat(getHugepageSizes(host)), []) + + return arrayToOptions([...new Set(sizes)], { + getText: size => prettyBytes(+size, 'MB') + }) + }, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @returns {Field} Memory access field */ +const MEMORY_ACCESS = { + name: 'TOPOLOGY.MEMORY_ACCESS', + label: T.MemoryAccess, + tooltip: [T.MemoryAccessConcept, NUMA_MEMORY_ACCESS.join(', ')], + notOnHypervisors: [vcenter, firecracker], + type: INPUT_TYPES.SELECT, + values: arrayToOptions(NUMA_MEMORY_ACCESS, { getText: sentenceCase }), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** + * @param {string} [hypervisor] - VM hypervisor + * @returns {Field[]} List of NUMA fields + */ +export const NUMA_FIELDS = hypervisor => + filterFieldsByHypervisor( + [PIN_POLICY, CORES, SOCKETS, THREADS, HUGEPAGES, MEMORY_ACCESS], + hypervisor + ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/index.js new file mode 100644 index 0000000000..e6a0e9c166 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/index.js @@ -0,0 +1,60 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' + +import FormWithSchema from 'client/components/Forms/FormWithSchema' + +import { STEP_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { + PLACEMENT_HOST_FIELDS, + PLACEMENT_DS_FIELDS +} from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema' +import { T } from 'client/constants' + +const Placement = () => { + // TODO - Host requirements: add button to select HOST in list => ID="" + // TODO - Host policy options: Packing|Stripping|Load-aware + + // TODO - DS requirements: add button to select DATASTORE in list => ID="" + // TODO - DS policy options: Packing|Stripping + + return ( + <> + + + + ) +} + +Placement.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func +} + +Placement.displayName = 'Placement' + +export default Placement diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema.js new file mode 100644 index 0000000000..34521ddd6a --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema.js @@ -0,0 +1,57 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { string } from 'yup' + +import { T, INPUT_TYPES } from 'client/constants' + +const HOST_REQ_FIELD = { + name: 'SCHED_REQUIREMENTS', + label: T.HostReqExpression, + tooltip: T.HostReqExpressionConcept, + type: INPUT_TYPES.TEXT, + validation: string().trim().notRequired() +} + +const HOST_RANK_FIELD = { + name: 'SCHED_RANK', + label: T.HostPolicyExpression, + tooltip: T.HostPolicyExpressionConcept, + type: INPUT_TYPES.TEXT, + validation: string().trim().notRequired() +} + +const DS_REQ_FIELD = { + name: 'DS_SCHED_REQUIREMENTS', + label: T.DatastoreReqExpression, + tooltip: T.DatastoreReqExpressionConcept, + type: INPUT_TYPES.TEXT, + validation: string().trim().notRequired() +} + +const DS_RANK_FIELD = { + name: 'DS_SCHED_RANK', + label: T.DatastorePolicyExpression, + tooltip: T.DatastorePolicyExpressionConcept, + type: INPUT_TYPES.TEXT, + validation: string().trim().notRequired() +} + +export const PLACEMENT_HOST_FIELDS = [HOST_REQ_FIELD, HOST_RANK_FIELD] + +export const PLACEMENT_DS_FIELDS = [DS_REQ_FIELD, DS_RANK_FIELD] + +export const PLACEMENT_FIELDS = [PLACEMENT_HOST_FIELDS, PLACEMENT_DS_FIELDS] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/scheduleAction.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/scheduleAction.js new file mode 100644 index 0000000000..37fd5c9ccb --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/scheduleAction.js @@ -0,0 +1,130 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' +import makeStyles from '@mui/styles/makeStyles' +import { Edit, Trash } from 'iconoir-react' +import { useWatch } from 'react-hook-form' + +import { useListForm } from 'client/hooks' +import ButtonToTriggerForm from 'client/components/Forms/ButtonToTriggerForm' +import SelectCard, { Action } from 'client/components/Cards/SelectCard' +import { PunctualForm, RelativeForm } from 'client/components/Forms/Vm' +import { Translate } from 'client/components/HOC' + +import { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { T } from 'client/constants' + +const useStyles = makeStyles({ + root: { + paddingBlock: '1em', + display: 'grid', + gridTemplateColumns: 'repeat(auto-fit, minmax(300px, auto))', + gap: '1em' + } +}) + +export const TAB_ID = 'SCHED_ACTION' + +const ScheduleAction = ({ setFormData, control }) => { + const classes = useStyles() + const scheduleActions = useWatch({ name: `${EXTRA_ID}.${TAB_ID}`, control }) + + const { handleRemove, handleSave } = useListForm({ + parent: EXTRA_ID, + key: TAB_ID, + list: scheduleActions, + setList: setFormData, + getItemId: item => item.NAME, + addItemId: (item, _, itemIndex) => ({ ...item, NAME: `${TAB_ID}${itemIndex}` }) + }) + + return ( + <> + PunctualForm(), + onSubmit: handleSave + }, + { + cy: 'add-sched-action-relative', + name: 'Relative action', + dialogProps: { title: T.ScheduledAction }, + form: () => RelativeForm(), + onSubmit: handleSave + }]} + /> +
+ {scheduleActions?.map(item => { + const { NAME, ACTION, TIME } = item + const isRelative = String(TIME).includes('+') + + return ( + + handleRemove(NAME)} + icon={} + /> + , + tooltip: + }} + options={[{ + dialogProps: { + title: <>{`: ${NAME}`} + }, + form: () => isRelative + ? RelativeForm(undefined, item) + : PunctualForm(undefined, item), + onSubmit: newValues => handleSave(newValues, NAME) + }]} + /> + + } + /> + ) + })} +
+ + ) +} + +ScheduleAction.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +ScheduleAction.displayName = 'ScheduleAction' + +export default ScheduleAction diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema.js new file mode 100644 index 0000000000..4bbf704dcc --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema.js @@ -0,0 +1,55 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { array, object } from 'yup' + +import { PLACEMENT_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/placement/schema' +import { OS_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting/schema' +import { NUMA_FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/numa/schema' +import { getObjectSchemaFromFields } from 'client/utils' + +export const SCHEMA = hypervisor => object({ + DISK: array() + .ensure() + .transform(disks => disks?.map((disk, idx) => ({ + ...disk, + NAME: disk?.NAME?.startsWith('DISK') || !disk?.NAME + ? `DISK${idx}` + : disk?.NAME + }))), + NIC: array() + .ensure() + .transform(nics => nics?.map((nic, idx) => ({ + ...nic, + NAME: nic?.NAME?.startsWith('NIC') || !nic?.NAME + ? `NIC${idx}` + : nic?.NAME + }))), + SCHED_ACTION: array() + .ensure() + .transform(actions => actions?.map((action, idx) => ({ + ...action, + NAME: action?.NAME?.startsWith('SCHED_ACTION') || !action?.NAME + ? `SCHED_ACTION${idx}` + : action?.NAME + }))) +}) + .concat(getObjectSchemaFromFields([ + ...PLACEMENT_FIELDS, + ...OS_FIELDS(hypervisor), + ...NUMA_FIELDS(hypervisor) + ])) + .noUnknown(false) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage.js new file mode 100644 index 0000000000..2b76689d1f --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/storage.js @@ -0,0 +1,192 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import PropTypes from 'prop-types' +import makeStyles from '@mui/styles/makeStyles' +import { Edit, Trash } from 'iconoir-react' +import { useWatch } from 'react-hook-form' + +import { useListForm } from 'client/hooks' +import ButtonToTriggerForm from 'client/components/Forms/ButtonToTriggerForm' +import SelectCard, { Action } from 'client/components/Cards/SelectCard' +import { ImageSteps, VolatileSteps } from 'client/components/Forms/Vm' +import { StatusCircle, StatusChip } from 'client/components/Status' +import { Translate } from 'client/components/HOC' + +import { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { SCHEMA as EXTRA_SCHEMA } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/schema' +import { reorderBootAfterRemove } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration/booting' +import { getState, getDiskType } from 'client/models/Image' +import { stringToBoolean } from 'client/models/Helper' +import { prettyBytes } from 'client/utils' +import { T } from 'client/constants' + +const useStyles = makeStyles({ + root: { + paddingBlock: '1em', + display: 'grid', + gridTemplateColumns: 'repeat(auto-fit, minmax(300px, auto))', + gap: '1em' + } +}) + +export const TAB_ID = 'DISK' + +const Storage = ({ data, setFormData, hypervisor, control }) => { + const classes = useStyles() + const disks = useWatch({ name: `${EXTRA_ID}.${TAB_ID}`, control }) + + const { handleSetList, handleRemove, handleSave } = useListForm({ + parent: EXTRA_ID, + key: TAB_ID, + list: disks, + setList: setFormData, + getItemId: item => item.NAME, + addItemId: (item, _, itemIndex) => ({ ...item, NAME: `${TAB_ID}${itemIndex}` }) + }) + + const reorderDisks = () => { + const diskSchema = EXTRA_SCHEMA.pick([TAB_ID]) + const { [TAB_ID]: newList } = diskSchema.cast({ [TAB_ID]: data?.[TAB_ID] }) + + handleSetList(newList) + } + + return ( + <> + ImageSteps({ hypervisor }), + onSubmit: handleSave + }, + { + cy: 'attach-volatile-disk', + name: T.Volatile, + dialogProps: { title: T.AttachVolatile }, + form: () => VolatileSteps({ hypervisor }), + onSubmit: handleSave + } + ]} + /> +
+ {disks?.map(item => { + const { + NAME, + TYPE, + IMAGE, + IMAGE_ID, + IMAGE_STATE, + ORIGINAL_SIZE, + SIZE = ORIGINAL_SIZE, + READONLY, + DATASTORE, + PERSISTENT + } = item + + const isVolatile = !IMAGE && !IMAGE_ID + const isPersistent = stringToBoolean(PERSISTENT) + const state = !isVolatile && getState({ STATE: IMAGE_STATE }) + const type = isVolatile ? TYPE : getDiskType(item) + const originalSize = +ORIGINAL_SIZE ? prettyBytes(+ORIGINAL_SIZE, 'MB') : '-' + const size = prettyBytes(+SIZE, 'MB') + + return ( + + {`${NAME} - `} + + + ) : ( + + + {`${NAME}: ${IMAGE}`} + {isPersistent && } + + )} + subheader={<> + {Object + .entries({ + [DATASTORE]: DATASTORE, + READONLY: stringToBoolean(READONLY), + PERSISTENT: stringToBoolean(PERSISTENT), + [isVolatile || ORIGINAL_SIZE === SIZE ? size : `${originalSize}/${size}`]: true, + [type]: type + }) + .map(([k, v]) => v ? `${k}` : '') + .filter(Boolean) + .join(' | ') + } + } + action={ + <> + } + handleClick={() => { + handleRemove(NAME) + reorderDisks() + reorderBootAfterRemove(NAME, disks, data, setFormData) + }} + icon={} + /> + , + tooltip: + }} + options={[{ + dialogProps: { + title: + }, + form: () => isVolatile + ? VolatileSteps({ hypervisor }, item) + : ImageSteps({ hypervisor }, item), + onSubmit: newValues => handleSave(newValues, NAME) + }]} + /> + + } + /> + ) + })} +
+ + ) +} + +Storage.propTypes = { + data: PropTypes.any, + setFormData: PropTypes.func, + hypervisor: PropTypes.string, + control: PropTypes.object +} + +Storage.displayName = 'Storage' + +export default Storage diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/capacitySchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/capacitySchema.js new file mode 100644 index 0000000000..f9d0649461 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/capacitySchema.js @@ -0,0 +1,139 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { number, boolean } from 'yup' + +import { T, INPUT_TYPES, HYPERVISORS } from 'client/constants' +import { Field } from 'client/utils' + +/** + * @param {Field} field - Field params + * @param {boolean} field.required - If `true`, add to validation if it's required + * @param {boolean} field.divBy4 - If `true`, add to validation if it's divisible by 4 + * @returns {Field} Capacity field params + */ +const CAPACITY_FIELD = ({ dependOf, required, divBy4, ...field }) => { + let validation = number() + .integer('Should be integer number') + .positive('Should be positive number') + .typeError('Must be a number') + .default(() => undefined) + + if (required) { + validation = validation.required() + } + + if (dependOf) { + validation = validation.when( + dependOf, + (enabledHr, schema) => enabledHr + ? schema.required() + : schema.strip().notRequired() + ) + } + + if (divBy4) { + validation = validation.when( + 'HYPERVISOR', + (hypervisor, schema) => hypervisor === HYPERVISORS.vcenter + ? schema.isDivisibleBy(4) + : schema + ) + } + + return { + ...field, + dependOf, + type: INPUT_TYPES.TEXT, + htmlType: 'number', + ...(dependOf && { + htmlType: dependValue => + dependValue ? 'number' : INPUT_TYPES.HIDDEN + }), + validation + } +} + +/** @type {Field} Memory field */ +export const MEMORY = CAPACITY_FIELD({ + name: 'MEMORY', + label: T.Memory, + tooltip: T.MemoryConcept, + divBy4: true, + required: true, + grid: { md: 12 } +}) + +/** @type {Field} Hot reloading on memory field */ +export const ENABLE_HR_MEMORY = { + name: 'ENABLE_HR_MEMORY', + label: T.EnableHotResize, + type: INPUT_TYPES.SWITCH, + validation: boolean().default(() => false), + grid: { xs: 4, md: 6 } +} + +/** @type {Field} Maximum memory field */ +export const MEMORY_MAX = CAPACITY_FIELD({ + name: 'MEMORY_MAX', + label: T.MaxMemory, + dependOf: ENABLE_HR_MEMORY.name, + grid: { xs: 8, md: 6 } +}) + +/** @type {Field} Physical CPU field */ +export const PHYSICAL_CPU = CAPACITY_FIELD({ + name: 'CPU', + label: T.PhysicalCpu, + tooltip: T.CpuConcept, + required: true, + grid: { md: 12 } +}) + +/** @type {Field} Virtual CPU field */ +export const VIRTUAL_CPU = CAPACITY_FIELD({ + name: 'VCPU', + label: T.VirtualCpu, + tooltip: T.VirtualCpuConcept, + grid: { md: 12 } +}) + +/** @type {Field} Hot reloading on virtual CPU field */ +export const ENABLE_HR_VCPU = { + name: 'ENABLE_HR_VCPU', + label: T.EnableHotResize, + type: INPUT_TYPES.SWITCH, + validation: boolean().default(() => false), + grid: { xs: 4, md: 6 } +} + +/** @type {Field} Maximum virtual CPU field */ +export const VCPU_MAX = CAPACITY_FIELD({ + name: 'VCPU_MAX', + label: T.MaxVirtualCpu, + dependOf: ENABLE_HR_VCPU.name, + grid: { xs: 8, md: 6 } +}) + +/** @type {Field[]} List of capacity fields */ +export const FIELDS = [ + MEMORY, + ENABLE_HR_MEMORY, + MEMORY_MAX, + PHYSICAL_CPU, + VIRTUAL_CPU, + ENABLE_HR_VCPU, + VCPU_MAX +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js new file mode 100644 index 0000000000..1f0b5b0afb --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js @@ -0,0 +1,77 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { useMemo } from 'react' +import { useWatch } from 'react-hook-form' + +import { useAuth } from 'client/features/Auth' +import FormWithSchema from 'client/components/Forms/FormWithSchema' +import useStyles from 'client/components/Forms/VmTemplate/CreateForm/Steps/General/styles' + +import { HYPERVISOR_FIELD } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General/informationSchema' +import { SCHEMA, FIELDS } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General/schema' +import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helper' +import { T } from 'client/constants' + +export const STEP_ID = 'general' + +const Content = () => { + const classes = useStyles() + const { view, getResourceView } = useAuth() + const hypervisor = useWatch({ name: `${STEP_ID}.HYPERVISOR` }) + + const groups = useMemo(() => { + const dialog = getResourceView('VM-TEMPLATE')?.dialogs?.create_dialog + const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) + + return FIELDS(hypervisor) + .filter(({ id, required }) => required || sectionsAvailable.includes(id)) + }, [view, hypervisor]) + + return ( +
+ + {groups.map(({ id, legend, fields }) => ( + + ))} +
+ ) +} + +const General = () => ({ + id: STEP_ID, + label: T.General, + resolver: formData => { + const hypervisor = formData?.[STEP_ID]?.HYPERVISOR + return SCHEMA(hypervisor) + }, + optionsValidate: { abortEarly: false }, + content: Content +}) + +export default General diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/informationSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/informationSchema.js new file mode 100644 index 0000000000..5684c1d7d5 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/informationSchema.js @@ -0,0 +1,108 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string } from 'yup' + +import Image from 'client/components/Image' +import { T, LOGO_IMAGES_URL, INPUT_TYPES, HYPERVISORS } from 'client/constants' +import { Field, arrayToOptions } from 'client/utils' + +/** @type {Field} Name field */ +export const NAME = { + name: 'NAME', + label: T.Name, + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .required() + .default(() => undefined), + grid: { sm: 6 } +} + +/** @type {Field} Description field */ +export const DESCRIPTION = { + name: 'DESCRIPTION', + label: T.Description, + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Hypervisor field */ +export const HYPERVISOR_FIELD = { + name: 'HYPERVISOR', + type: INPUT_TYPES.TOGGLE, + values: arrayToOptions(Object.values(HYPERVISORS), { + addEmpty: false, + getText: hypervisor => hypervisor.toUpperCase() + }), + validation: string() + .trim() + .required() + .default(() => HYPERVISORS.kvm), + grid: { md: 12 } +} + +/** @type {Field} Logo field */ +export const LOGO = { + name: 'LOGO', + label: T.Logo, + type: INPUT_TYPES.SELECT, + values: [ + { text: '-', value: '' }, + // client/assets/images/logos + { text: 'Alpine Linux', value: 'alpine.png' }, + { text: 'ALT', value: 'alt.png' }, + { text: 'Arch', value: 'arch.png' }, + { text: 'CentOS', value: 'centos.png' }, + { text: 'Debian', value: 'debian.png' }, + { text: 'Devuan', value: 'devuan.png' }, + { text: 'Fedora', value: 'fedora.png' }, + { text: 'FreeBSD', value: 'freebsd.png' }, + { text: 'HardenedBSD', value: 'hardenedbsd.png' }, + { text: 'Knoppix', value: 'knoppix.png' }, + { text: 'Linux', value: 'linux.png' }, + { text: 'Oracle', value: 'oracle.png' }, + { text: 'RedHat', value: 'redhat.png' }, + { text: 'Suse', value: 'suse.png' }, + { text: 'Ubuntu', value: 'ubuntu.png' }, + { text: 'Windows xp', value: 'windowsxp.png' }, + { text: 'Windows 10', value: 'windows8.png' } + ], + // eslint-disable-next-line react/display-name + renderValue: value => ( + + ), + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field[]} List of information fields */ +export const FIELDS = [ + NAME, + DESCRIPTION, + LOGO +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/ownershipSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/ownershipSchema.js new file mode 100644 index 0000000000..5aace8bb0c --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/ownershipSchema.js @@ -0,0 +1,64 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string } from 'yup' + +import { useGroup, useUser } from 'client/features/One' +import { T, INPUT_TYPES } from 'client/constants' +import { Field } from 'client/utils' + +/** @type {Field} User id field */ +export const UID_FIELD = { + name: 'AS_UID', + label: T.InstantiateAsUser, + type: INPUT_TYPES.AUTOCOMPLETE, + values: () => { + const users = useUser() + + return users + .map(({ ID: value, NAME: text }) => ({ text, value })) + .sort((a, b) => a.value - b.value) + }, + validation: string() + .trim() + .notRequired() + .default(undefined), + grid: { md: 12 } +} + +/** @type {Field} Group id field */ +export const GID_FIELD = { + name: 'AS_GID', + label: T.InstantiateAsGroup, + type: INPUT_TYPES.AUTOCOMPLETE, + values: () => { + const groups = useGroup() + + return groups + .map(({ ID: value, NAME: text }) => ({ text, value })) + .sort((a, b) => a.value - b.value) + }, + validation: string() + .trim() + .notRequired() + .default(undefined), + grid: { md: 12 } +} + +/** @type {Field[]} List of ownership fields */ +export const FIELDS = [ + UID_FIELD, + GID_FIELD +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js new file mode 100644 index 0000000000..74bdf99bf3 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js @@ -0,0 +1,69 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { BaseSchema } from 'yup' + +import { FIELDS as INFORMATION_FIELDS, HYPERVISOR_FIELD } from './informationSchema' +import { FIELDS as CAPACITY_FIELDS } from './capacitySchema' +import { FIELDS as VM_GROUP_FIELDS } from './vmGroupSchema' +import { FIELDS as OWNERSHIP_FIELDS } from './ownershipSchema' +import { FIELDS as VCENTER_FIELDS } from './vcenterSchema' + +import { filterFieldsByHypervisor, getObjectSchemaFromFields, Field } from 'client/utils' +import { T, HYPERVISORS } from 'client/constants' + +/** + * @param {HYPERVISORS} [hypervisor] - Template hypervisor + * @returns {{ id: string, legend: string, fields: Field[] }[]} Fields + */ +const FIELDS = hypervisor => [ + { + id: 'information', + legend: T.Information, + required: true, + fields: filterFieldsByHypervisor(INFORMATION_FIELDS, hypervisor) + }, + { + id: 'capacity', + legend: T.Capacity, + fields: filterFieldsByHypervisor(CAPACITY_FIELDS, hypervisor) + }, + { + id: 'ownership', + legend: T.Ownership, + fields: filterFieldsByHypervisor(OWNERSHIP_FIELDS, hypervisor) + }, + { + id: 'vm_group', + legend: T.VMGroup, + fields: filterFieldsByHypervisor(VM_GROUP_FIELDS, hypervisor) + }, + { + id: 'vcenter', + legend: T.vCenterDeployment, + fields: filterFieldsByHypervisor(VCENTER_FIELDS, hypervisor) + } +] + +/** + * @param {HYPERVISORS} [hypervisor] - Template hypervisor + * @returns {BaseSchema} Step schema + */ +const SCHEMA = hypervisor => getObjectSchemaFromFields([ + HYPERVISOR_FIELD, + ...FIELDS(hypervisor).map(({ fields }) => fields).flat() +]) + +export { FIELDS, SCHEMA } diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/styles.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/styles.js new file mode 100644 index 0000000000..2ae9322cd1 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/styles.js @@ -0,0 +1,30 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import makeStyles from '@mui/styles/makeStyles' + +export default makeStyles(theme => ({ + root: { + display: 'grid', + gridTemplateColumns: '1fr 1fr', + gap: '2em', + [theme.breakpoints.down('lg')]: { + gridTemplateColumns: '1fr' + } + }, + information: { + gridColumn: '1 / -1' + } +})) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vcenterSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vcenterSchema.js new file mode 100644 index 0000000000..18a6cb03f7 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vcenterSchema.js @@ -0,0 +1,73 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string } from 'yup' + +import { T, INPUT_TYPES, HYPERVISORS } from 'client/constants' +import { Field } from 'client/utils' + +const { vcenter, ...hypervisors } = HYPERVISORS + +/** @type {Field} Common field attributes */ +const commonAttributes = { + notOnHypervisors: Object.values(hypervisors), + type: INPUT_TYPES.TEXT, + validation: string() + .trim() + .required() + .default(() => undefined), + grid: { md: 12 } +} + +/** @type {Field} vCenter template reference field */ +const VCENTER_TEMPLATE_FIELD = { + ...commonAttributes, + name: 'VCENTER_TEMPLATE_REF', + label: T.vCenterTemplateRef +} + +/** @type {Field} vCenter cluster reference field */ +const VCENTER_CCR_FIELD = { + ...commonAttributes, + name: 'VCENTER_CCR_REF', + label: T.vCenterClusterRef +} + +/** @type {Field} vCenter instance id field */ +const VCENTER_INSTANCE_ID = { + ...commonAttributes, + name: 'VCENTER_INSTANCE_ID', + label: T.vCenterInstanceId +} + +/** @type {Field} vCenter VM folder field */ +const VCENTER_FOLDER_FIELD = { + ...commonAttributes, + name: 'VCENTER_VM_FOLDER', + label: T.vCenterVmFolder, + tooltip: T.vCenterVmFolderConcept, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field[]} List of vCenter fields */ +export const FIELDS = [ + VCENTER_TEMPLATE_FIELD, + VCENTER_CCR_FIELD, + VCENTER_INSTANCE_ID, + VCENTER_FOLDER_FIELD +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vmGroupSchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vmGroupSchema.js new file mode 100644 index 0000000000..6aaddd4fd5 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/vmGroupSchema.js @@ -0,0 +1,78 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import { string } from 'yup' + +import { useVmGroup } from 'client/features/One' +import { T, INPUT_TYPES } from 'client/constants' +import { Field } from 'client/utils' + +/** @type {Field} VM Group field */ +export const VM_GROUP_FIELD = { + name: 'VMGROUP.VMGROUP_ID', + label: T.AssociateToVMGroup, + type: INPUT_TYPES.AUTOCOMPLETE, + values: () => { + const vmGroups = useVmGroup() + + return vmGroups + ?.map(({ ID, NAME }) => ({ text: `#${ID} ${NAME}`, value: ID })) + ?.sort((a, b) => { + const compareOptions = { numeric: true, ignorePunctuation: true } + + return a.value.localeCompare(b.value, undefined, compareOptions) + }) + }, + grid: { md: 12 }, + validation: string() + .trim() + .notRequired() + .default(() => undefined) +} + +/** @type {Field} Role field */ +export const ROLE_FIELD = { + name: 'VMGROUP.ROLE', + label: T.Role, + type: INPUT_TYPES.AUTOCOMPLETE, + dependOf: VM_GROUP_FIELD.name, + htmlType: vmGroup => vmGroup && vmGroup !== '' ? undefined : INPUT_TYPES.HIDDEN, + values: vmGroupSelected => { + const vmGroups = useVmGroup() + + const roles = vmGroups + ?.filter(({ ID }) => ID === vmGroupSelected) + ?.map(({ ROLES }) => + [ROLES?.ROLE ?? []].flat().map(({ NAME: ROLE_NAME }) => ROLE_NAME) + ) + ?.flat() + + return roles.map(role => ({ text: role, value: role })) + }, + grid: { md: 12 }, + validation: string() + .trim() + .default(() => undefined) + .when( + 'VMGROUP_ID', + (vmGroup, schema) => vmGroup ? schema.required() : schema + ) +} + +/** @type {Field[]} List of VM Group fields */ +export const FIELDS = [ + VM_GROUP_FIELD, + ROLE_FIELD +] diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/index.js new file mode 100644 index 0000000000..ac32efbafc --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/index.js @@ -0,0 +1,37 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +import General, { STEP_ID as GENERAL_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/General' +import ExtraConfiguration, { STEP_ID as EXTRA_ID } from 'client/components/Forms/VmTemplate/CreateForm/Steps/ExtraConfiguration' +import { jsonToXml } from 'client/models/Helper' +import { createSteps } from 'client/utils' + +const Steps = createSteps( + [General, ExtraConfiguration], + { + // transformInitialValue: (vmTemplate, schema) =>, + transformBeforeSubmit: formData => { + const { + [GENERAL_ID]: general = {}, + [EXTRA_ID]: extraTemplate = {} + } = formData ?? {} + + const templateXML = jsonToXml({ ...general, ...extraTemplate }) + return { template: templateXML } + } + } +) + +export default Steps diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/index.js new file mode 100644 index 0000000000..d009e7c065 --- /dev/null +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/index.js @@ -0,0 +1,83 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { useEffect, useMemo } from 'react' +import PropTypes from 'prop-types' + +import { useForm, FormProvider } from 'react-hook-form' +import { yupResolver } from '@hookform/resolvers/yup' + +import { useFetch } from 'client/hooks' +// import { useUserApi, useVmGroupApi, useVmTemplateApi } from 'client/features/One' +import { useVmTemplateApi, useHostApi, useImageApi } from 'client/features/One' +import FormStepper, { SkeletonStepsForm } from 'client/components/FormStepper' +import Steps from 'client/components/Forms/VmTemplate/CreateForm/Steps' + +const CreateForm = ({ template, onSubmit }) => { + const stepsForm = useMemo(() => Steps(template, {}), []) + const { steps, defaultValues, resolver, transformBeforeSubmit } = stepsForm + + const methods = useForm({ + mode: 'onSubmit', + defaultValues, + resolver: yupResolver(resolver?.()) + }) + + return ( + + onSubmit(transformBeforeSubmit?.(data) ?? data)} + /> + + ) +} + +const PreFetchingForm = ({ templateId, onSubmit }) => { + // const { getUsers } = useUserApi() + // const { getVmGroups } = useVmGroupApi() + const { getHosts } = useHostApi() + const { getImages } = useImageApi() + const { getVmTemplate } = useVmTemplateApi() + const { fetchRequest, data } = useFetch( + () => getVmTemplate(templateId, { extended: true }) + ) + + useEffect(() => { + templateId && fetchRequest() + getHosts() + getImages() + // getUsers() + // getVmGroups() + }, []) + + return (templateId && !data) + ? + : +} + +PreFetchingForm.propTypes = { + templateId: PropTypes.string, + onSubmit: PropTypes.func +} + +CreateForm.propTypes = { + template: PropTypes.object, + onSubmit: PropTypes.func +} + +export default PreFetchingForm diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/capacitySchema.js b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/capacitySchema.js index 11eed29cfb..5399ca2dfb 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/capacitySchema.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/capacitySchema.js @@ -17,7 +17,6 @@ import { number } from 'yup' import { T, INPUT_TYPES, HYPERVISORS } from 'client/constants' -import { isDivisibleBy4 } from 'client/utils' const MEMORY = hypervisor => { let validation = number() @@ -28,8 +27,7 @@ const MEMORY = hypervisor => { .default(() => undefined) if (hypervisor === HYPERVISORS.vcenter) { - validation = validation - .test('is-divisible-by-4', 'Memory should be divisible by 4', isDivisibleBy4) + validation = validation.isDivisibleBy(4) } return { diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js index 89f65325a5..8fdfddb2d5 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js @@ -20,11 +20,10 @@ import { useFormContext } from 'react-hook-form' import { useAuth } from 'client/features/Auth' import FormWithSchema from 'client/components/Forms/FormWithSchema' import useStyles from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/styles' -import { Tr } from 'client/components/HOC' import { STEP_ID as TEMPLATE_ID } from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/VmTemplatesTable' import { SCHEMA, FIELDS } from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/schema' -import { getActionsAvailable } from 'client/models/Helper' +import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helper' import { T } from 'client/constants' export const STEP_ID = 'configuration' @@ -37,9 +36,9 @@ const Content = () => { const groups = useMemo(() => { const hypervisor = watch(`${TEMPLATE_ID}[0].TEMPLATE.HYPERVISOR`) const dialog = getResourceView('VM-TEMPLATE')?.dialogs?.instantiate_dialog - const groupsAvailable = getActionsAvailable(dialog, hypervisor) + const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) - return FIELDS(hypervisor).filter(({ id }) => groupsAvailable.includes(id)) + return FIELDS(hypervisor).filter(({ id }) => sectionsAvailable.includes(id)) }, [view]) return ( @@ -50,7 +49,7 @@ const Content = () => { className={classes[id]} cy={`instantiate-vm-template-configuration.${id}`} fields={fields} - legend={Tr(legend)} + legend={legend} id={STEP_ID} /> ))} diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/schema.js index e87bd75bc5..8b290f0a06 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/schema.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/schema.js @@ -27,7 +27,7 @@ import { T, HYPERVISORS } from 'client/constants' /** * @param {HYPERVISORS} [hypervisor] - Template hypervisor - * @returns {{ id: string, legend: string, fields: Field[] }[]} Fields + * @returns {function(string):{ id: string, legend: string, fields: Field[] }[]} Fields */ const FIELDS = hypervisor => [ { diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/ExtraConfiguration/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/ExtraConfiguration/index.js index 01c477b5da..1ee8a88841 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/ExtraConfiguration/index.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/ExtraConfiguration/index.js @@ -33,20 +33,20 @@ import Booting from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/Ex import { STEP_ID as TEMPLATE_ID } from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/VmTemplatesTable' import { SCHEMA } from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/ExtraConfiguration/schema' -import { getActionsAvailable } from 'client/models/Helper' +import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helper' import { T } from 'client/constants' export const STEP_ID = 'extra' const Content = ({ data, setFormData }) => { const theme = useTheme() - const { watch, errors, control } = useFormContext() + const { watch, formState: { errors }, control } = useFormContext() const { view, getResourceView } = useAuth() const tabs = useMemo(() => { const hypervisor = watch(`${TEMPLATE_ID}[0].TEMPLATE.HYPERVISOR`) const dialog = getResourceView('VM-TEMPLATE')?.dialogs?.instantiate_dialog - const groupsAvailable = getActionsAvailable(dialog, hypervisor) + const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) return [ { @@ -89,7 +89,7 @@ const Content = ({ data, setFormData }) => { ) } - ].filter(({ id }) => groupsAvailable.includes(id)) + ].filter(({ id }) => sectionsAvailable.includes(id)) }, [errors[STEP_ID], view, control]) return ( diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/index.js index 2b2c302b9c..daa666e63d 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/index.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/index.js @@ -14,9 +14,11 @@ * limitations under the License. * * ------------------------------------------------------------------------- */ import CloneForm from 'client/components/Forms/VmTemplate/CloneForm' +import CreateForm from 'client/components/Forms/VmTemplate/CreateForm' import InstantiateForm from 'client/components/Forms/VmTemplate/InstantiateForm' export { CloneForm, + CreateForm, InstantiateForm } diff --git a/src/fireedge/src/client/components/HOC/Translate.js b/src/fireedge/src/client/components/HOC/Translate.js index ba781a0635..e89c11b537 100644 --- a/src/fireedge/src/client/components/HOC/Translate.js +++ b/src/fireedge/src/client/components/HOC/Translate.js @@ -26,6 +26,9 @@ import { isDevelopment } from 'client/utils' const TranslateContext = createContext() let languageScript = root.document?.createElement('script') +const labelCanBeTranslated = val => + typeof val === 'string' || (Array.isArray(val) && val.length === 2) + const GenerateScript = ( language = DEFAULT_LANGUAGE, setHash = () => undefined @@ -48,7 +51,7 @@ const RemoveScript = () => { root.document.body.removeChild(languageScript) } -const TranslateProvider = ({ children }) => { +const TranslateProvider = ({ children = [] }) => { const [hash, setHash] = useState({}) const { settings: { lang } = {} } = useAuth() @@ -104,7 +107,7 @@ const Tr = (str = '') => { return translateString(key, valuesTr) } -const Translate = ({ word = '', values }) => { +const Translate = ({ word = '', values = [] }) => { const valuesTr = !Array.isArray(values) ? [values] : values return translateString(word, valuesTr) } @@ -116,18 +119,20 @@ TranslateProvider.propTypes = { ]) } -TranslateProvider.defaultProps = { - children: [] -} - Translate.propTypes = { word: PropTypes.string, - values: PropTypes.oneOfType([PropTypes.string, PropTypes.array]) + values: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.bool, + PropTypes.array + ]) } -Translate.defaultProps = { - word: '', - values: '' +export { + TranslateContext, + TranslateProvider, + Translate, + Tr, + labelCanBeTranslated } - -export { TranslateContext, TranslateProvider, Translate, Tr } diff --git a/src/fireedge/src/client/components/Header/Zone.js b/src/fireedge/src/client/components/Header/Zone.js index 9584ce6e76..56e54bcc59 100644 --- a/src/fireedge/src/client/components/Header/Zone.js +++ b/src/fireedge/src/client/components/Header/Zone.js @@ -15,9 +15,10 @@ * ------------------------------------------------------------------------- */ import { useEffect, JSXElementConstructor } from 'react' -import { MenuList, MenuItem } from '@mui/material' +import { MenuList, MenuItem, LinearProgress } from '@mui/material' import { Language as ZoneIcon } from 'iconoir-react' +import { useFetch } from 'client/hooks' import { useZone, useZoneApi } from 'client/features/One' import HeaderPopover from 'client/components/Header/Popover' import { Translate } from 'client/components/HOC' @@ -31,10 +32,7 @@ import { T } from 'client/constants' const Zone = () => { const zones = useZone() const { getZones } = useZoneApi() - - useEffect(() => { - !zones?.length && getZones() - }, []) + const { fetchRequest, loading } = useFetch(getZones) return ( { buttonProps={{ 'data-cy': 'header-zone-button' }} headerTitle={} > - {({ handleClose }) => ( - - {zones?.length - ? zones?.map(({ ID, NAME }) => ( - - {NAME} - - )) - : {'Not zones found'} - } - - )} + {({ handleClose }) => { + useEffect(() => { + fetchRequest() + }, []) + + return ( + <> + {loading && } + + {zones?.length + ? zones?.map(({ ID, NAME }) => ( + + {NAME} + + )) + : ( + + + + ) + } + + + ) + }} ) } diff --git a/src/fireedge/src/client/components/Header/index.js b/src/fireedge/src/client/components/Header/index.js index 6bb44f6606..8429b60c22 100644 --- a/src/fireedge/src/client/components/Header/index.js +++ b/src/fireedge/src/client/components/Header/index.js @@ -93,7 +93,11 @@ const Header = () => { {title}
- + {!isOneAdmin && } diff --git a/src/fireedge/src/client/components/Icons/docker.js b/src/fireedge/src/client/components/Icons/DockerIcon.js similarity index 99% rename from src/fireedge/src/client/components/Icons/docker.js rename to src/fireedge/src/client/components/Icons/DockerIcon.js index f7affca84f..ea36167fc8 100644 --- a/src/fireedge/src/client/components/Icons/docker.js +++ b/src/fireedge/src/client/components/Icons/DockerIcon.js @@ -18,7 +18,7 @@ import { number, string, oneOfType } from 'prop-types' const DockerLogo = memo(({ viewBox, width, height, color, ...props }) => { return ( - + { - const [error, setError] = useState(INITIAL_STATE) +const Image = memo( + ({ + src, + imageInError = DEFAULT_IMAGE, + withSources = false, + pictureProps = {}, + imgProps = {} + }) => { + const [error, setError] = useState(INITIAL_STATE) - /** Increment retries by one in error state. */ - const addRetry = () => { - setError(prev => ({ ...prev, retries: prev.retries + 1 })) - } + const imageProps = { + decoding: 'async', + draggable: false, + loading: 'lazy', + ...imgProps + } - /** Set failed state. */ - const onImageFail = () => { - setError(prev => ({ fail: true, retries: prev.retries + 1 })) - } + /** Increment retries by one in error state. */ + const addRetry = () => { + setError(prev => ({ ...prev, retries: prev.retries + 1 })) + } - if (error.retries >= MAX_RETRIES) { - return null - } + /** Set failed state. */ + const onImageFail = () => { + setError(prev => ({ fail: true, retries: prev.retries + 1 })) + } - if (error.fail) { - return - } + if (error.retries >= MAX_RETRIES) { + return null + } - return ( - - {withSources && IMAGE_FORMATS.map(format => ( - - ))} - - - ) -}, (prev, next) => prev.src === next.src) + if (error.fail) { + return + } + + return withSources ? ( + + {withSources && IMAGE_FORMATS.map(format => ( + + ))} + + + ) : ( + + ) + }, (prev, next) => prev.src === next.src) Image.propTypes = { src: PropTypes.string, imageInError: PropTypes.string, withSources: PropTypes.bool, - imgProps: PropTypes.shape({ - decoding: PropTypes.oneOf(['sync', 'async', 'auto']), - draggable: PropTypes.bool, - loading: PropTypes.oneOf(['eager', 'lazy']) - }) -} - -Image.defaultProps = { - src: undefined, - imageInError: DEFAULT_IMAGE, - withSources: false, - imgProps: { - decoding: 'async', - draggable: false, - loading: 'lazy' - } + pictureProps: PropTypes.object, + imgProps: PropTypes.object } Image.displayName = 'Image' diff --git a/src/fireedge/src/client/components/Status/Chip.js b/src/fireedge/src/client/components/Status/Chip.js index 657519a7a5..9bdab6feda 100644 --- a/src/fireedge/src/client/components/Status/Chip.js +++ b/src/fireedge/src/client/components/Status/Chip.js @@ -27,17 +27,24 @@ const useStyles = makeStyles(({ spacing, palette, typography }) => { const defaultStateColor = palette.grey[palette.mode === SCHEMES.DARK ? 300 : 700] return { - root: ({ stateColor = defaultStateColor }) => ({ - color: getBackgroundColor(stateColor, 0.75), - backgroundColor: addOpacityToColor(stateColor, 0.2), - cursor: 'default', - padding: spacing('0.25rem', '0.5rem'), - borderRadius: 2, - textTransform: 'uppercase', - fontSize: typography.overline.fontSize, - fontWeight: 500, - lineHeight: 'normal' - }) + root: ({ stateColor = defaultStateColor }) => { + const paletteColor = palette[stateColor] + + const color = paletteColor?.contrastText ?? getBackgroundColor(stateColor, 0.75) + const bgColor = paletteColor?.dark ?? stateColor + + return { + color, + backgroundColor: addOpacityToColor(bgColor, 0.2), + cursor: 'default', + padding: spacing('0.25rem', '0.5rem'), + borderRadius: 2, + textTransform: 'uppercase', + fontSize: typography.overline.fontSize, + fontWeight: 500, + lineHeight: 'normal' + } + } } }) diff --git a/src/fireedge/src/client/components/Tables/Enhanced/Utils/GlobalActions/index.js b/src/fireedge/src/client/components/Tables/Enhanced/Utils/GlobalActions/index.js index 35968d62aa..72daf2f430 100644 --- a/src/fireedge/src/client/components/Tables/Enhanced/Utils/GlobalActions/index.js +++ b/src/fireedge/src/client/components/Tables/Enhanced/Utils/GlobalActions/index.js @@ -97,6 +97,6 @@ GlobalActions.propTypes = { useTableProps: PropTypes.object } -export { Action, ActionPropTypes, GlobalAction } +export { Action, ActionPropTypes } export default GlobalActions diff --git a/src/fireedge/src/client/components/Tables/Enhanced/Utils/index.js b/src/fireedge/src/client/components/Tables/Enhanced/Utils/index.js index bbccce1e8e..2e0adce838 100644 --- a/src/fireedge/src/client/components/Tables/Enhanced/Utils/index.js +++ b/src/fireedge/src/client/components/Tables/Enhanced/Utils/index.js @@ -14,7 +14,7 @@ * limitations under the License. * * ------------------------------------------------------------------------- */ import CategoryFilter from 'client/components/Tables/Enhanced/Utils/CategoryFilter' -import GlobalActions, { Action, ActionPropTypes, GlobalAction } from 'client/components/Tables/Enhanced/Utils/GlobalActions' +import GlobalActions, { Action, ActionPropTypes } from 'client/components/Tables/Enhanced/Utils/GlobalActions' import GlobalFilter from 'client/components/Tables/Enhanced/Utils/GlobalFilter' import GlobalSelectedRows from 'client/components/Tables/Enhanced/Utils/GlobalSelectedRows' import GlobalSort from 'client/components/Tables/Enhanced/Utils/GlobalSort' @@ -26,7 +26,6 @@ export { Action, ActionPropTypes, CategoryFilter, - GlobalAction, GlobalActions, GlobalFilter, GlobalSelectedRows, diff --git a/src/fireedge/src/client/components/Tables/VmTemplates/actions.js b/src/fireedge/src/client/components/Tables/VmTemplates/actions.js index 413677b3f7..46f76e1227 100644 --- a/src/fireedge/src/client/components/Tables/VmTemplates/actions.js +++ b/src/fireedge/src/client/components/Tables/VmTemplates/actions.js @@ -81,13 +81,10 @@ const Actions = () => { accessor: VM_TEMPLATE_ACTIONS.CREATE_DIALOG, tooltip: T.Create, icon: AddSquare, - disabled: true, - action: rows => { - // TODO: go to CREATE form - // const { ID } = rows?.[0]?.original ?? {} - // const path = generatePath(PATH.TEMPLATE.VMS.CREATE, { id: ID }) + action: () => { + const path = PATH.TEMPLATE.VMS.CREATE - // history.push(path) + history.push(path) } }, { @@ -174,25 +171,25 @@ const Actions = () => { selected: true, color: 'secondary', options: [{ - cy: `action.${VM_TEMPLATE_ACTIONS.CHANGE_OWNER}`, + accessor: VM_TEMPLATE_ACTIONS.CHANGE_OWNER, name: T.ChangeOwner, disabled: true, isConfirmDialog: true, onSubmit: () => undefined }, { - cy: `action.${VM_TEMPLATE_ACTIONS.CHANGE_GROUP}`, + accessor: VM_TEMPLATE_ACTIONS.CHANGE_GROUP, name: T.ChangeGroup, disabled: true, isConfirmDialog: true, onSubmit: () => undefined }, { - cy: `action.${VM_TEMPLATE_ACTIONS.SHARE}`, + accessor: VM_TEMPLATE_ACTIONS.SHARE, disabled: true, name: T.Share, isConfirmDialog: true, onSubmit: () => undefined }, { - cy: `action.${VM_TEMPLATE_ACTIONS.UNSHARE}`, + accessor: VM_TEMPLATE_ACTIONS.UNSHARE, disabled: true, name: T.Unshare, isConfirmDialog: true, @@ -203,8 +200,9 @@ const Actions = () => { tooltip: T.Lock, icon: Lock, selected: true, + color: 'secondary', options: [{ - cy: `action.${VM_TEMPLATE_ACTIONS.LOCK}`, + accessor: VM_TEMPLATE_ACTIONS.LOCK, name: T.Lock, isConfirmDialog: true, dialogProps: { @@ -217,7 +215,7 @@ const Actions = () => { await Promise.all(ids.map(id => getVmTemplate(id))) } }, { - cy: `action.${VM_TEMPLATE_ACTIONS.UNLOCK}`, + accessor: VM_TEMPLATE_ACTIONS.UNLOCK, name: T.Unlock, isConfirmDialog: true, dialogProps: { diff --git a/src/fireedge/src/client/components/Tabs/index.js b/src/fireedge/src/client/components/Tabs/index.js index 8935977b72..6979c02c8e 100644 --- a/src/fireedge/src/client/components/Tabs/index.js +++ b/src/fireedge/src/client/components/Tabs/index.js @@ -26,7 +26,6 @@ const Content = ({ name, renderContent: Content, hidden }) => ( sx={{ p: theme => theme.spacing(2, 1), height: '100%', - overflow: 'auto', display: hidden ? 'none' : 'block' }} > @@ -45,13 +44,13 @@ const Tabs = ({ tabs = [], renderHiddenTabs = false }) => { scrollButtons='auto' onChange={(_, tab) => setTab(tab)} > - {tabs.map(({ value, name, icon: Icon }, idx) => + {tabs.map(({ value, name, label, icon: Icon }, idx) => } value={value ?? idx} - label={name} + label={label ?? name} /> )} diff --git a/src/fireedge/src/client/components/Widgets/TotalProviders/index.js b/src/fireedge/src/client/components/Widgets/TotalProviders/index.js index 8395ee7b2f..ed6e77b87f 100644 --- a/src/fireedge/src/client/components/Widgets/TotalProviders/index.js +++ b/src/fireedge/src/client/components/Widgets/TotalProviders/index.js @@ -83,7 +83,10 @@ const TotalProviders = ({ isLoading }) => { return useMemo(() => ( !totalProviders && isLoading ? ( - + ) : ( { !totalProvisions && isLoading ? ( ) : ( ({ const [tabSelected, setTab] = useState(TABS.elasticity.name) const theme = useTheme() - const { watch, errors } = useFormContext() + const { watch, formState: { errors } } = useFormContext() const { handleSetList } = useListForm({ key: STEP_ID, setList: setFormData diff --git a/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Create/index.js b/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Create/index.js index 25c5a7c0f9..7ebdfa0b69 100644 --- a/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Create/index.js +++ b/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Create/index.js @@ -69,7 +69,7 @@ function ApplicationsTemplatesCreateForm () { useEffect(() => { const formData = data ? parseApplicationToForm(data) : {} - methods.reset(resolvers().cast(formData), { errors: false }) + methods.reset(resolvers().cast(formData), { keepErrors: false }) }, [data]) if (error) { diff --git a/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Deploy/Steps/Tiers/index.js b/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Deploy/Steps/Tiers/index.js index e83b77c3de..bb4d76c78d 100644 --- a/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Deploy/Steps/Tiers/index.js +++ b/src/fireedge/src/client/containers/ApplicationsTemplates/Form/Deploy/Steps/Tiers/index.js @@ -43,7 +43,7 @@ const Tiers = ({ tiers, vmTemplates }) => { const [tabSelected, setTab] = useState(tiers?.[0]?.id) const theme = useTheme() - const { errors } = useFormContext() + const { formState: { errors } } = useFormContext() return ( <> diff --git a/src/fireedge/src/client/containers/Login/schema.js b/src/fireedge/src/client/containers/Login/schema.js index 6fe7031f57..cd2bde20b5 100644 --- a/src/fireedge/src/client/containers/Login/schema.js +++ b/src/fireedge/src/client/containers/Login/schema.js @@ -17,7 +17,7 @@ import * as yup from 'yup' import { useAuth } from 'client/features/Auth' -import { getValidationFromFields } from 'client/utils' +import { getValidationFromFields, arrayToOptions } from 'client/utils' import { Tr } from 'client/components/HOC' import { T, INPUT_TYPES, FILTER_POOL } from 'client/constants' @@ -29,7 +29,7 @@ export const USERNAME = { .string() .trim() .required('Username is a required field') - .default(null), + .default(() => ''), grid: { md: 12 }, fieldProps: { autoFocus: true, @@ -47,7 +47,7 @@ export const PASSWORD = { .string() .trim() .required('Password is a required field') - .default(null), + .default(() => ''), grid: { md: 12 }, fieldProps: { required: true, @@ -62,7 +62,7 @@ export const REMEMBER = { type: INPUT_TYPES.CHECKBOX, validation: yup .boolean() - .default(false), + .default(() => false), grid: { md: 12 } } @@ -74,7 +74,7 @@ export const TOKEN = { .string() .trim() .required('Authenticator is a required field') - .default(null), + .default(() => ''), grid: { md: 12 }, fieldProps: { autoFocus: true, @@ -92,13 +92,13 @@ export const GROUP = { const sortedGroupsById = groups?.sort((a, b) => a.ID - b.ID) - const formatGroups = sortedGroupsById.map(({ ID, NAME }) => { - const isPrimary = user?.GID === ID ? `(${Tr(T.Primary)})` : '' - - return { - text: `${ID} - ${NAME} ${isPrimary}`, - value: String(ID) - } + const formatGroups = arrayToOptions(sortedGroupsById, { + addEmpty: false, + getText: ({ ID, NAME }) => { + const isPrimary = user?.GID === ID ? `(${Tr(T.Primary)})` : '' + return `${ID} - ${NAME} ${isPrimary}` + }, + getValue: ({ ID }) => String(ID) }) return [{ text: T.ShowAll, value: FILTER_POOL.ALL_RESOURCES }] diff --git a/src/fireedge/src/client/containers/Settings/index.js b/src/fireedge/src/client/containers/Settings/index.js index 0602c590cc..80d7294928 100644 --- a/src/fireedge/src/client/containers/Settings/index.js +++ b/src/fireedge/src/client/containers/Settings/index.js @@ -74,7 +74,7 @@ const Settings = () => { useEffect(() => { reset( FORM_SCHEMA.cast(settings), - { isSubmitted: false, error: false } + { keepIsSubmitted: false, keepErrors: false } ) }, [settings]) diff --git a/src/fireedge/src/client/containers/VmTemplates/Create.js b/src/fireedge/src/client/containers/VmTemplates/Create.js new file mode 100644 index 0000000000..a8779887a2 --- /dev/null +++ b/src/fireedge/src/client/containers/VmTemplates/Create.js @@ -0,0 +1,54 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ +/* eslint-disable jsdoc/require-jsdoc */ +import { /* useHistory, */ useLocation } from 'react-router' +import { Container } from '@mui/material' + +// import { useGeneralApi } from 'client/features/General' +// import { useVmTemplateApi } from 'client/features/One' +import { CreateForm } from 'client/components/Forms/VmTemplate' +// import { PATH } from 'client/apps/sunstone/routesOne' +import { isDevelopment } from 'client/utils' + +function CreateVmTemplate () { + // const history = useHistory() + const { state: { ID: templateId } = {} } = useLocation() + + // const { enqueueInfo } = useGeneralApi() + // const { instantiate } = useVmTemplateApi() + + const onSubmit = async formData => { + try { + console.log({ formData }) + /* const { ID, NAME } = templateSelected + + await Promise.all(templates.map(template => instantiate(ID, template))) + + history.push(templateId ? PATH.TEMPLATE.VMS.LIST : PATH.INSTANCE.VMS.LIST) + enqueueInfo(`VM Template instantiated x${templates.length} - #${ID} ${NAME}`) */ + } catch (err) { + isDevelopment() && console.error(err) + } + } + + return ( + + + + ) +} + +export default CreateVmTemplate diff --git a/src/fireedge/src/client/features/One/slice.js b/src/fireedge/src/client/features/One/slice.js index 71e8a9c5e1..3b931d2d45 100644 --- a/src/fireedge/src/client/features/One/slice.js +++ b/src/fireedge/src/client/features/One/slice.js @@ -89,6 +89,10 @@ const { name, actions, reducer } = createSlice({ extraReducers: builder => { builder .addMatcher(({ type }) => type === logout.type, () => initial) + .addMatcher( + ({ type }) => type.startsWith(RESOURCES.system) && type.endsWith('/fulfilled'), + (state, { payload }) => ({ ...state, ...payload }) + ) .addMatcher( ({ type }) => type === updateResourceFromFetch.type || diff --git a/src/fireedge/src/client/hooks/useFetch.js b/src/fireedge/src/client/hooks/useFetch.js index 5e49e7447c..3a91a31f05 100644 --- a/src/fireedge/src/client/hooks/useFetch.js +++ b/src/fireedge/src/client/hooks/useFetch.js @@ -104,8 +104,12 @@ const useFetch = (request, socket) => { } }, [isFetched]) - useEffect(() => () => { - cancelRequest.current = true + useEffect(() => { + cancelRequest.current = false + + return () => { + cancelRequest.current = true + } }, []) const doFetch = useCallback(async (payload, reload = false) => { diff --git a/src/fireedge/src/client/hooks/useListForm.js b/src/fireedge/src/client/hooks/useListForm.js index f09b78d6d3..affadfbe69 100644 --- a/src/fireedge/src/client/hooks/useListForm.js +++ b/src/fireedge/src/client/hooks/useListForm.js @@ -118,7 +118,7 @@ const useListForm = ({ const getIndexById = useCallback( (listToFind, searchId = -1) => - listToFind.findIndex((item, idx) => getItemId(item, idx) === searchId), + listToFind?.findIndex((item, idx) => getItemId(item, idx) === searchId), [] ) diff --git a/src/fireedge/src/client/models/Host.js b/src/fireedge/src/client/models/Host.js index 97b6d625af..34ce2e2769 100644 --- a/src/fireedge/src/client/models/Host.js +++ b/src/fireedge/src/client/models/Host.js @@ -14,7 +14,7 @@ * limitations under the License. * * ------------------------------------------------------------------------- */ import { prettyBytes } from 'client/utils' -import { HOST_STATES, StateInfo } from 'client/constants' +import { DEFAULT_CPU_MODELS, HOST_STATES, HYPERVISORS, StateInfo } from 'client/constants' /** * Returns information about the host state. @@ -63,3 +63,43 @@ export const getAllocatedInfo = host => { percentMemLabel } } + +/** + * Returns list of hugepage sizes from the host numa nodes. + * + * @param {object} host - Host + * @returns {Array} List of hugepages sizes from resource + */ +export const getHugepageSizes = host => { + const numaNodes = [host?.HOST_SHARE?.NUMA_NODES?.NODE ?? []].flat() + + return numaNodes.filter(node => node?.NODE_ID && + [node?.HUGEPAGE?.SIZE ?? []].flat().map(size => +size) + ) +} + +/** + * Returns list of KVM CPU Models available from the host pool. + * + * @param {object[]} hosts - Hosts + * @returns {Array} List of KVM CPU Models from the pool + */ +export const getKvmCpuModels = (hosts = []) => hosts + .filter(host => host?.TEMPLATE?.HYPERVISOR === HYPERVISORS.kvm) + .map(host => host.TEMPLATE?.KVM_CPU_MODELS.split(' ')) + .flat() + +/** + * Returns list of KVM Machines available from the host pool. + * + * @param {object[]} hosts - Hosts + * @returns {Array} List of KVM Machines from the pool + */ +export const getKvmMachines = (hosts = []) => { + const machineTypes = hosts + .filter(host => host?.TEMPLATE?.HYPERVISOR === HYPERVISORS.kvm) + .map(host => host.TEMPLATE?.KVM_MACHINES.split(' ')) + .flat() + + return [DEFAULT_CPU_MODELS, ...machineTypes] +} diff --git a/src/fireedge/src/client/theme/defaults.js b/src/fireedge/src/client/theme/defaults.js index 64b729062b..fa018f4a41 100644 --- a/src/fireedge/src/client/theme/defaults.js +++ b/src/fireedge/src/client/theme/defaults.js @@ -83,8 +83,8 @@ export default (appTheme, mode = SCHEMES.DARK) => { white }, background: { - paper: isDarkMode ? '#2a2d3d' : white, - default: isDarkMode ? '#222431' : '#f2f4f8' + paper: isDarkMode ? primary.light : white, + default: isDarkMode ? primary.main : '#f2f4f8' }, error: { 100: '#fdeae7', @@ -244,9 +244,20 @@ export default (appTheme, mode = SCHEMES.DARK) => { '&:hover': { textDecoration: 'underline' } - } + }, + fieldset: { border: 'none' } } }, + MuiTypography: { + variants: [{ + props: { component: 'legend' }, + style: { + marginBottom: '1em', + padding: '0em 1em 0.2em 0.5em', + borderBottom: `2px solid ${secondary.main}` + } + }] + }, MuiPaper: { styleOverrides: { root: { backgroundImage: 'unset' } @@ -386,6 +397,31 @@ export default (appTheme, mode = SCHEMES.DARK) => { } } }, + MuiToggleButtonGroup: { + styleOverrides: { + root: { + backgroundColor: isDarkMode ? primary.main : '#f2f4f8' + } + }, + defaultProps: { + color: 'secondary' + } + }, + MuiToggleButton: { + styleOverrides: { + root: { + textTransform: 'none', + fontWeight: 700, + color: isDarkMode ? grey[300] : grey[700], + borderColor: isDarkMode ? secondary[500] : grey[400], + '&.Mui-selected': { + borderColor: `${secondary[500]} !important`, + color: isDarkMode ? white : secondary[800], + backgroundColor: isDarkMode ? alpha(secondary[800], 0.2) : secondary[100] + } + } + } + }, MuiList: { defaultProps: { dense: true, diff --git a/src/fireedge/src/client/utils/helpers.js b/src/fireedge/src/client/utils/helpers.js index 0aaab617b6..febb2b9683 100644 --- a/src/fireedge/src/client/utils/helpers.js +++ b/src/fireedge/src/client/utils/helpers.js @@ -290,7 +290,25 @@ export const isBase64 = (stringToValidate, options = {}) => { /** * Check if value is divisible by 4. * - * @param {number} value - Number to check + * @param {string|number} value - Number to check * @returns {boolean} Returns `true` if string is divisible by 4 */ export const isDivisibleBy4 = value => /[048]|\d*([02468][048]|[13579][26])/g.test(value) + +/** + * Check if value is divisible by another number. + * + * @param {string|number} number - Value to check + * @param {string|number} divisor - Divisor number + * @returns {boolean} Returns `true` if value is divisible by another + */ +export const isDivisibleBy = (number, divisor) => !(number % divisor) + +/** + * Returns factors of a number. + * + * @param {number} value - Number + * @returns {number[]} Returns list of numbers + */ +export const getFactorsOfNumber = value => + [...Array(+value + 1).keys()].filter(idx => value % idx === 0) diff --git a/src/fireedge/src/client/utils/index.js b/src/fireedge/src/client/utils/index.js index 39d027ada5..a945d8faab 100644 --- a/src/fireedge/src/client/utils/index.js +++ b/src/fireedge/src/client/utils/index.js @@ -22,3 +22,4 @@ export * from 'client/utils/rest' export * from 'client/utils/schema' export * from 'client/utils/storage' export * from 'client/utils/string' +export * from 'client/utils/translation' diff --git a/src/fireedge/src/client/utils/schema.js b/src/fireedge/src/client/utils/schema.js index ae4b82a4ef..ab14d8be75 100644 --- a/src/fireedge/src/client/utils/schema.js +++ b/src/fireedge/src/client/utils/schema.js @@ -49,10 +49,16 @@ import { INPUT_TYPES } from 'client/constants' * Callback of field parameter when depend of another field. * * @callback DependOfCallback - * @param {string|string[]} value - Value + * @param {any|any[]} value - Value * @returns {any|any[]} */ +/** + * @typedef {object} SelectOption - Option of select field + * @property {string|JSXElementConstructor} text - Text to display on select list + * @property {any} value - Value to option + */ + /** * @typedef {object} Field * @property {string|DependOfCallback} name @@ -69,13 +75,15 @@ import { INPUT_TYPES } from 'client/constants' * @property {string|DependOfCallback} [tooltip] * - Text description * @property {INPUT_TYPES|DependOfCallback} type - * - Field type to draw + * - Field type to draw: text, select, autocomplete, etc * @property {string|DependOfCallback} [htmlType] * - Type of the input element. It should be a valid HTML5 input type - * @property {{text: string|JSXElementConstructor, value: any}[]|DependOfCallback} [values] + * @property {function(any|any[]):any} [watcher] + * - Function to watch other values + * @property {SelectOption[]|DependOfCallback} [values] * - Type of the input element. It should be a valid HTML5 input type * @property {boolean|DependOfCallback} [multiline] - * - If `true`, a textarea element will be rendered instead of an input. + * - If `true`, a textarea element will be rendered instead of an input * @property {GridProps|DependOfCallback} [grid] * - Grid properties to override in the wrapper element * - Default: { xs: 12, md: 6 } @@ -299,6 +307,36 @@ export const mapUserInputs = (userInputs = {}) => ...res, [key]: parseUserInputValue(value) }), {}) +/** + * Converts a list of values to usable options. + * + * @param {any[]} array - List of option values + * @param {object} [options] - Options to conversion + * @param {boolean} [options.addEmpty] - If `true`, add an empty option + * @param {function(any):any} [options.getText] - Function to get the text option + * @param {function(any):any} [options.getValue] - Function to get the value option + * @returns {SelectOption} Options + */ +export const arrayToOptions = (array = [], options = {}) => { + const { addEmpty = true, getText = o => o, getValue = o => o } = options + + const values = array.map(item => ({ text: getText(item), value: getValue(item) })) + + addEmpty && values.unshift({ text: '-', value: '' }) + + return values +} + +/** + * Sanitizes the names from object. + * + * @param {string|string[]} names - List of names + * @returns {string|string[]} Sanitized names + * @example 'TEST.NAME' => 'NAME' + */ +export const clearNames = (names = '') => + Array.isArray(names) ? names.map(clearNames) : names.split(/[,[\].]+?/).at(-1) + /** * Returns parameters needed to create stepper form. * diff --git a/src/fireedge/src/client/utils/translation.js b/src/fireedge/src/client/utils/translation.js new file mode 100644 index 0000000000..6babe71fd6 --- /dev/null +++ b/src/fireedge/src/client/utils/translation.js @@ -0,0 +1,96 @@ +/* ------------------------------------------------------------------------- * + * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain * + * a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * ------------------------------------------------------------------------- */ + +/* eslint-disable react/display-name */ +/* eslint-disable react/prop-types */ +import { setLocale, addMethod, number, string } from 'yup' + +import { T } from 'client/constants' +import { isDivisibleBy, isBase64 } from 'client/utils/helpers' + +const buildMethods = () => { + addMethod(number, 'isDivisibleBy', function (divisor) { + return this.test( + 'is-divisible', + [T['validation.number.isDivisible'], divisor], + value => isDivisibleBy(value, divisor) + ) + }) + addMethod(string, 'isBase64', function () { + return this.test( + 'is-base64', + T['validation.string.invalidFormat'], + value => isBase64(value) + ) + }) +} + +/** + * Function that runs the yup.setLocale(). + */ +const buildTranslationLocale = () => { + buildMethods() + + setLocale({ + mixed: { + default: () => T['validation.mixed.default'], + required: () => T['validation.mixed.required'], + defined: () => T['validation.mixed.defined'], + oneOf: ({ values }) => [T['validation.mixed.oneOf'], values], + notOneOf: ({ values }) => [T['validation.mixed.notOneOf'], values], + notType: ({ type }) => + T[`validation.mixed.notType.${type}`] ?? T['validation.mixed.notType'] + }, + string: { + length: ({ length }) => [T['validation.string.length'], length], + min: ({ min }) => [T['validation.string.min'], min], + max: ({ max }) => [T['validation.string.max'], max], + matches: ({ matches }) => [T['validation.string.matches'], matches], + email: () => T['validation.string.email'], + url: () => T['validation.string.url'], + uuid: () => T['validation.string.uuid'], + trim: () => T['validation.string.trim'], + lowercase: () => T['validation.string.lowercase'], + uppercase: () => T['validation.string.uppercase'] + }, + number: { + min: ({ min }) => [T['validation.number.min'], min], + max: ({ max }) => [T['validation.number.max'], max], + lessThan: ({ less }) => [T['validation.number.lessThan'], less], + moreThan: ({ more }) => [T['validation.number.moreThan'], more], + positive: () => T['validation.number.positive'], + negative: () => T['validation.number.negative'], + integer: () => T['validation.number.integer'] + }, + boolean: { + isValue: ({ value }) => [T['validation.boolean.isValue'], value] + }, + date: { + min: ({ min }) => [T['validation.date.min'], min], + max: ({ max }) => [T['validation.date.max'], max] + }, + object: { + noUnknown: ({ nounknown }) => [T['validation.object.noUnknown'], nounknown] + }, + array: { + min: ({ min }) => [T['validation.array.min'], min], + max: ({ max }) => [T['validation.array.max'], max], + length: ({ length }) => [T['validation.array.length'], length] + } + }) +} + +export { buildTranslationLocale }