diff --git a/ui/package.json b/ui/package.json index cf6a58d2..9d2b0ae9 100644 --- a/ui/package.json +++ b/ui/package.json @@ -12,7 +12,8 @@ "**/@patternfly/react-core/**", "**/patternfly", "**/react-router", - "**/react-router-dom" + "**/react-router-dom", + "**/formik" ] }, "scripts": { diff --git a/ui/packages/ui/package.json b/ui/packages/ui/package.json index ad842de6..a770d936 100644 --- a/ui/packages/ui/package.json +++ b/ui/packages/ui/package.json @@ -68,7 +68,7 @@ "@types/react-router-dom": "^5.1.5", "@types/yup": "^0.29.6", "autoprefixer": "^9.8.6", - "formik": "^1.5.7", + "formik": "^2.1.5", "lodash": "^4.17.20", "postcss-loader": "^3.0.0", "postcss-nested": "^4.2.3", diff --git a/ui/packages/ui/src/app/pages/createConnector/CreateConnectorPage.tsx b/ui/packages/ui/src/app/pages/createConnector/CreateConnectorPage.tsx index 1ae6ea27..c4142b95 100644 --- a/ui/packages/ui/src/app/pages/createConnector/CreateConnectorPage.tsx +++ b/ui/packages/ui/src/app/pages/createConnector/CreateConnectorPage.tsx @@ -1,9 +1,7 @@ import { ConnectionValidationResult, - ConnectorConfiguration, - ConnectorType, + ConnectorConfiguration, ConnectorProperty, ConnectorType } from "@debezium/ui-models"; -import { ConnectorProperty } from "@debezium/ui-models"; import { Services } from "@debezium/ui-services"; import { Breadcrumb, @@ -15,7 +13,7 @@ import { TextContent, Title, TitleSizes, - Wizard, + Wizard } from "@patternfly/react-core"; import React from "react"; import { useHistory } from "react-router-dom"; @@ -27,13 +25,13 @@ import { getFilterPropertyDefinitions, getOptionsPropertyDefinitions, mapToObject, - PropertyCategory, + PropertyCategory } from "src/app/shared"; import { ConfigureConnectorTypeComponent, ConnectorTypeStepComponent, DataOptionsComponent, - FiltersStepComponent, + FiltersStepComponent } from "./connectorSteps"; import "./CreateConnectorPage.css"; @@ -167,7 +165,7 @@ export const CreateConnectorPage: React.FunctionComponent = () => { category === PropertyCategory.ADVANCED_REPLICATION ) { connectorService - .validateConnection("postgres", mapToObject(propertyValues)) + .validateConnection("postgres", propertyValues) .then((result: ConnectionValidationResult) => { if (result.status === "INVALID") { let resultStr = ""; diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeComponent.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeComponent.tsx index 926a019d..ded9adfb 100644 --- a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeComponent.tsx +++ b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeComponent.tsx @@ -1,5 +1,5 @@ import { ConnectorProperty } from "@debezium/ui-models"; -import { Button } from '@patternfly/react-core'; +import _ from 'lodash' import * as React from 'react'; import { PropertyCategory } from 'src/app/shared'; import './ConfigureConnectorTypeComponent.css' @@ -14,20 +14,13 @@ export interface IConfigureConnectorTypeComponentProps{ } export const ConfigureConnectorTypeComponent: React.FC = (props) => { - - const handleValidation =() => { - // TODO: This is just an example. The form will supply the property values - const basicValueMap = new Map(); - basicValueMap.set("database.name", "aName"); - basicValueMap.set("database.user", "aUser"); - - props.onValidateProperties(basicValueMap, PropertyCategory.BASIC); - } - return ( - <> - - - + ); } diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeForm.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeForm.tsx index 60f7c55e..c75dbc54 100644 --- a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeForm.tsx +++ b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/ConfigureConnectorTypeForm.tsx @@ -1,344 +1,188 @@ +import { ConnectorProperty } from '@debezium/ui-models/dist/js/ui.model'; import { Accordion, AccordionContent, - AccordionItem, - AccordionToggle, - Button, - Grid, - GridItem, - Switch, - Title } from '@patternfly/react-core'; -import { FormikProps, withFormik } from 'formik'; -import React from 'react'; + AccordionItem, + AccordionToggle, + Button, + Grid, + GridItem +} from '@patternfly/react-core'; +import { Form, Formik } from 'formik'; +import _ from 'lodash'; +import * as React from 'react'; +import { PropertyCategory } from 'src/app/shared'; import * as Yup from 'yup'; -import { FormInputComponent } from './shared'; +import { FormInputComponent, FormSwitchComponent } from './shared'; -// Shape of form values -interface IFormValues { - connection_name: string; - database_server_name: string; - database_hostname: string; - database_port: string; - database_user: string; - database_password: string; - database_dbname: string; - plugin_name: string; - slot_name: string; - publication_name: string; - publication_autocreate_mode: string; - slot_drop_on_stop: string; - slot_stream_params: string; - database_initial_statements: string; - slot_max_retries: string; - slot_retry_delay_ms: string; - database_tcpKeepAlive: string; - isRequired: boolean; +export interface IConfigureConnectorTypeFormProps { + basicPropertyDefinitions: ConnectorProperty[]; + basicPropertyValues: Map; + advancedPropertyDefinitions: ConnectorProperty[]; + advancedPropertyValues: Map; + onValidateProperties: (connectorProperties: Map, category: PropertyCategory) => void; } -// Aside: You may see InjectedFormikProps instead of what comes below in older code.. InjectedFormikProps was artifact of when Formik only exported a HoC. It is also less flexible as it MUST wrap all props (it passes them through). -const InnerForm = (props: FormikProps) => { - const { - values, - touched, - errors, - handleChange, - handleBlur, - handleSubmit - } = props; +export const ConfigureConnectorTypeForm: React.FunctionComponent = (props) => { + const [expanded, setExpanded] = React.useState('basic'); + const basicValidationSchema = {}; - const [expanded, setExpended] = React.useState('basic'); - const dbzHandleChange = (e) => handleChange(e); - - const onToggle = (e, id) => { - e.preventDefault(); - if (id === expanded) { - setExpended('') - } else { - setExpended(id) - } - }; + const formatPropertyDefinitions = (propertyValues: ConnectorProperty[]) => { + return propertyValues.map((key: { name: string }) => { + key.name = key.name.replace(/\./g, '_'); + return key; + }) + } + const basicPropertyDefinitions = formatPropertyDefinitions(props.basicPropertyDefinitions) + const advancedPropertyDefinitions = formatPropertyDefinitions(props.advancedPropertyDefinitions) - return ( -
- - - { onToggle(e, 'basic') }} - isExpanded={expanded === 'basic'} - id="basic" - className="dbz-c-accordion" - > - Basic Properties - - - - - - - - - - - - - - - - - - - - - - - - - - - - { onToggle(e, 'advance') }} - isExpanded={expanded === 'advance'} - id="advance" - className="dbz-c-accordion" - > - Advance Properties - - - - - - - Replicatin slot - - - - - - - - - - - - - Publication - - - - - - - - - - - - - - - - -
- ); -}; + // Just added String and Password type + basicPropertyDefinitions.map((key: any) => { + if (key.type === "STRING") { + basicValidationSchema[key.name] = Yup.string(); + } else if (key.type === "PASSWORD") { + basicValidationSchema[key.name] = Yup.string(); + } else if (key.type === "INT") { + basicValidationSchema[key.name] = Yup.string(); + } + if (key.required) { + basicValidationSchema[key.name] = basicValidationSchema[key.name].required(`${key.name} is required`); + } + }) -// The type of props MyForm receives -interface IMyFormProps { - connection_name: string; -} + const validationSchema = Yup.object().shape({ ...basicValidationSchema }); -// Wrap our form with the withFormik HoC -const ConfigureConnectorTypeFormik = withFormik({ - mapPropsToValues: () => ({ - connection_name:"", - database_server_name: "", - database_hostname: "", - database_port: "", - database_user: "", - database_password: "", - database_dbname: "", - plugin_name: "", - slot_name: "", - publication_name: "", - publication_autocreate_mode: "", - slot_drop_on_stop: "", - slot_stream_params: "", - database_initial_statements: "", - slot_max_retries: "", - slot_retry_delay_ms: "", - database_tcpKeepAlive: "" -}), + const toggle = (e: React.MouseEvent, id: string) => { + e.preventDefault(); + const index = expanded.indexOf(id); + const newExpanded = + index >= 0 ? [...expanded.slice(0, index), ...expanded.slice(index + 1, expanded.length)] : [...expanded, id]; + setExpanded(newExpanded); + }; + + const getInitialValues = (combined: any) => { + const combinedValue: any = {}; + + combined.map((key: { name: string; defaultValue: string}) => { + if (!combinedValue[key.name]) { + combinedValue[key.name] = key.defaultValue || ""; + } + }) + return combinedValue; + } - validationSchema: Yup.object().shape({ - connection_name: Yup.string().required("Please enter connection name"), - database_hostname: Yup.string().required("Please enter database hostname"), - database_user: Yup.string().required("Please enter database username"), - database_password: Yup.string().required("Please enter database password"), - database_dbname: Yup.string().required("Please enter database name"), - database_server_name: Yup.string().required("Please enter database server name"), - }), + const initialValues = getInitialValues(_.union(basicPropertyDefinitions, advancedPropertyDefinitions)); - handleSubmit: (values, { setSubmitting }) => { - setTimeout(() => { - alert(JSON.stringify(values, null, 2)); - setSubmitting(false); - }, 1000); - }, - displayName: 'BasicForm' -})(InnerForm); + return ( +
+ { + let basicValueMap = new Map(); + basicValueMap = _.transform(values, (result, val: string, key: string) => { + result[key.replace(/_/g, '.')] = val; + }); -export const ConfigureConnectorTypeForm: - React.FC = () => { - return ( - - ); - } + props.onValidateProperties(basicValueMap, PropertyCategory.BASIC) + }} + > + {({ errors, touched, handleChange, isSubmitting }) => ( +
+ + + { + toggle(e, "basic"); + }} + isExpanded={expanded.includes("basic")} + id="basic" + className="dbz-c-accordion" + > + Basic Properties + + + + {basicPropertyDefinitions.map( + (propertyDefinition: ConnectorProperty, index) => { + return ( + + + + ) + } + )} + + + + + { + toggle(e, "advanced"); + }} + isExpanded={expanded.includes("advanced")} + id="advanced" + className="dbz-c-accordion" + > + Advance Properties + + + + {advancedPropertyDefinitions.map( + (propertyDefinition: ConnectorProperty, index) => { + if(propertyDefinition.type === "BOOLEAN"){ + return( + + + + ) + }else{ + return ( + + + + ) + } + } + )} + + + + + + + + + +
+ )} +
+
+ ) +}; \ No newline at end of file diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/FormInputComponent.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/FormInputComponent.tsx deleted file mode 100644 index 68c48e51..00000000 --- a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/FormInputComponent.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { - FormGroup, - TextInput -} from '@patternfly/react-core'; -import { ExclamationCircleIcon } from '@patternfly/react-icons'; -import * as React from 'react'; -import { HelpInfoIcon } from './shared'; - -export const FormInputComponent: React.FunctionComponent = ({ - label, - name, - fieldId, - type, - validated, - value, - dbzHandleChange, - helperTextInvalid, - isRequired, - onBlur, - }) => { - - return ( - - } - helperTextInvalid={helperTextInvalid} - helperTextInvalidIcon={} - fieldId={name} - validated={validated} - > - - - ) -} diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormInputComponent.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormInputComponent.tsx index a8d039ea..24c7594a 100644 --- a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormInputComponent.tsx +++ b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormInputComponent.tsx @@ -5,41 +5,35 @@ import { import { ExclamationCircleIcon } from '@patternfly/react-icons'; import * as React from 'react'; import { HelpInfoIcon } from './HelpInfoIcon'; +import { useField } from 'formik'; -export const FormInputComponent: React.FunctionComponent = ({ - label, - name, - fieldId, - type, - validated, - value, - dbzHandleChange, - helperTextInvalid, - isRequired, - onBlur, - }) => { - +export interface IFormInputComponentProps { + label: string; + infoText: string | ''; + fieldId: string; + name: string; + infoTitle: string | ''; + helperTextInvalid?: any; + type: any; + isRequired?: boolean | undefined; + validated?: "default" | "success" | "warning" | "error" | undefined +} +export const FormInputComponent: React.FunctionComponent = props => { + const [field] = useField(props); return ( - + } - helperTextInvalid={helperTextInvalid} + helperTextInvalid={props.helperTextInvalid} helperTextInvalidIcon={} - fieldId={name} - validated={validated} + fieldId={field.name} + validated={props.validated} > - + {field.onChange(field.name)(e); + }} aria-label={field.name} validated={props.validated} type={props.type} /> - ) -} + ); +}; \ No newline at end of file diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormSwitchComponent.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormSwitchComponent.tsx new file mode 100644 index 00000000..aed4fc81 --- /dev/null +++ b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/FormSwitchComponent.tsx @@ -0,0 +1,29 @@ +import * as React from 'react'; +import { Switch } from '@patternfly/react-core'; +import { useField } from 'formik'; + +export interface IFormSwitchComponentProps { + label: string; + name: string; + isChecked: boolean +} + +export const FormSwitchComponent: React.FunctionComponent = props => { + const [isSwitched, setSwitched] = React.useState(true); + const [field] = useField(props); + + const handleChange = (isChecked: boolean) => { + setSwitched(isChecked); + }; + return ( + + ); +} \ No newline at end of file diff --git a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/index.tsx b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/index.tsx index eefb5314..cc1959c3 100644 --- a/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/index.tsx +++ b/ui/packages/ui/src/app/pages/createConnector/connectorSteps/shared/index.tsx @@ -1,2 +1,3 @@ export * from './FormInputComponent' -export * from './FormSelectComponent' \ No newline at end of file +export * from './FormSelectComponent' +export * from './FormSwitchComponent' diff --git a/ui/yarn.lock b/ui/yarn.lock index 9127ede3..25454f0c 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -1962,7 +1962,7 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@^2.0.0, asap@~2.0.3: +asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -3072,11 +3072,6 @@ copy-webpack-plugin@^5.0.4: serialize-javascript "^4.0.0" webpack-log "^2.0.0" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -3128,14 +3123,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-context@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" - integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4282,19 +4269,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.0: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -4476,20 +4450,19 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formik@^1.5.7: - version "1.5.8" - resolved "https://registry.yarnpkg.com/formik/-/formik-1.5.8.tgz#eee8cd345effe46839bc748c7f920486f12f14b0" - integrity sha512-fNvPe+ddbh+7xiByT25vuso2p2hseG/Yvuj211fV1DbCjljUEG9OpgRpcb7g7O3kxHX/q31cbZDzMxJXPWSNwA== +formik@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.5.tgz#de5bbbe35543fa6d049fe96b8ee329d6cd6892b8" + integrity sha512-bWpo3PiqVDYslvrRjTq0Isrm0mFXHiO33D8MS6t6dWcqSFGeYF52nlpCM2xwOJ6tRVRznDkL+zz/iHPL4LDuvQ== dependencies: - create-react-context "^0.2.2" deepmerge "^2.1.1" hoist-non-react-statics "^3.3.0" lodash "^4.17.14" lodash-es "^4.17.14" - prop-types "^15.6.1" react-fast-compare "^2.0.1" + scheduler "^0.18.0" tiny-warning "^1.0.2" - tslib "^1.9.3" + tslib "^1.10.0" forwarded@~0.1.2: version "0.1.2" @@ -4830,11 +4803,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - gzip-size@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" @@ -5694,7 +5662,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -5777,14 +5745,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -7135,14 +7095,6 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-fetch@^2.3.0, node-fetch@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -8331,13 +8283,6 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^2.0.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -9134,6 +9079,14 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +scheduler@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" @@ -9237,7 +9190,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -10132,7 +10085,7 @@ tslib@1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== -tslib@^1.11.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -10258,11 +10211,6 @@ typescript@^3.3.3333, typescript@^3.5.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== -ua-parser-js@^0.7.18: - version "0.7.21" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" - integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== - uglify-js@3.4.x: version "3.4.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" @@ -10756,11 +10704,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.24" -whatwg-fetch@>=0.10.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.0.tgz#e11de14f4878f773fbebcde8871b2c0699af8b30" - integrity sha512-rsum2ulz2iuZH08mJkT0Yi6JnKhwdw4oeyMjokgxd+mmqYSd9cPpOQf01TIWgjxG/U4+QR+AwKq6lSbXVxkyoQ== - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"