diff --git a/packages/web/.eslintignore b/packages/web/.eslintignore index 14672a63..49a23822 100644 --- a/packages/web/.eslintignore +++ b/packages/web/.eslintignore @@ -1,3 +1,4 @@ node_modules build -source \ No newline at end of file +source +.eslintrc.js diff --git a/packages/web/.eslintrc.js b/packages/web/.eslintrc.js index ab66f332..50134026 100644 --- a/packages/web/.eslintrc.js +++ b/packages/web/.eslintrc.js @@ -4,4 +4,7 @@ module.exports = { 'plugin:@tanstack/eslint-plugin-query/recommended', 'prettier', ], + rules: { + 'react/prop-types': 'warn', + }, }; diff --git a/packages/web/package.json b/packages/web/package.json index a1fc9ee2..5b869c23 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -19,7 +19,6 @@ "@testing-library/user-event": "^12.1.10", "clipboard-copy": "^4.0.1", "compare-versions": "^4.1.3", - "eslint-plugin-react": "^7.33.2", "graphql": "^15.6.0", "lodash": "^4.17.21", "luxon": "^2.3.1", @@ -47,7 +46,7 @@ "build:watch": "yarn nodemon --exec react-scripts build --watch 'src/**/*.ts' --watch 'public/**/*' --ext ts,html", "test": "react-scripts test", "eject": "react-scripts eject", - "lint": "eslint .", + "lint": "eslint src --ext .js,.jsx", "prepack": "yarn build" }, "files": [ diff --git a/packages/web/src/components/AccountDropdownMenu/index.jsx b/packages/web/src/components/AccountDropdownMenu/index.jsx index 17c31d8c..d60a4a66 100644 --- a/packages/web/src/components/AccountDropdownMenu/index.jsx +++ b/packages/web/src/components/AccountDropdownMenu/index.jsx @@ -1,5 +1,6 @@ import * as React from 'react'; import { useNavigate } from 'react-router-dom'; +import PropTypes from 'prop-types'; import MenuItem from '@mui/material/MenuItem'; import Menu from '@mui/material/Menu'; import { Link } from 'react-router-dom'; @@ -51,4 +52,12 @@ function AccountDropdownMenu(props) { ); } + +AccountDropdownMenu.propTypes = { + open: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + anchorEl: PropTypes.oneOfType([PropTypes.element, PropTypes.func]), + id: PropTypes.string.isRequired, +}; + export default AccountDropdownMenu; diff --git a/packages/web/src/components/AddAppConnection/index.jsx b/packages/web/src/components/AddAppConnection/index.jsx index 87db10bf..3b9737ea 100644 --- a/packages/web/src/components/AddAppConnection/index.jsx +++ b/packages/web/src/components/AddAppConnection/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import LoadingButton from '@mui/lab/LoadingButton'; import Alert from '@mui/material/Alert'; import Dialog from '@mui/material/Dialog'; @@ -6,6 +7,8 @@ import DialogContentText from '@mui/material/DialogContentText'; import DialogTitle from '@mui/material/DialogTitle'; import * as React from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; + +import { AppPropType } from 'propTypes/propTypes'; import AppAuthClientsDialog from 'components/AppAuthClientsDialog/index.ee'; import InputCreator from 'components/InputCreator'; import * as URLS from 'config/urls'; @@ -13,7 +16,8 @@ import useAuthenticateApp from 'hooks/useAuthenticateApp.ee'; import useFormatMessage from 'hooks/useFormatMessage'; import { generateExternalLink } from 'helpers/translationValues'; import { Form } from './style'; -export default function AddAppConnection(props) { + +function AddAppConnection(props) { const { application, connectionId, onClose } = props; const { name, authDocUrl, key, auth } = application; const navigate = useNavigate(); @@ -137,3 +141,11 @@ export default function AddAppConnection(props) { ); } + +AddAppConnection.propTypes = { + onClose: PropTypes.func.isRequired, + application: AppPropType.isRequired, + connectionId: PropTypes.string, +}; + +export default AddAppConnection; diff --git a/packages/web/src/components/AddNewAppConnection/index.jsx b/packages/web/src/components/AddNewAppConnection/index.jsx index 4180f84d..def8b3cc 100644 --- a/packages/web/src/components/AddNewAppConnection/index.jsx +++ b/packages/web/src/components/AddNewAppConnection/index.jsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { useLazyQuery } from '@apollo/client'; import { Link } from 'react-router-dom'; import debounce from 'lodash/debounce'; @@ -23,13 +24,14 @@ import * as URLS from 'config/urls'; import AppIcon from 'components/AppIcon'; import { GET_APPS } from 'graphql/queries/get-apps'; import useFormatMessage from 'hooks/useFormatMessage'; + function createConnectionOrFlow(appKey, supportsConnections = false) { if (!supportsConnections) { return URLS.CREATE_FLOW_WITH_APP(appKey); } return URLS.APP_ADD_CONNECTION(appKey); } -export default function AddNewAppConnection(props) { +function AddNewAppConnection(props) { const { onClose } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('sm')); @@ -136,3 +138,9 @@ export default function AddNewAppConnection(props) { ); } + +AddNewAppConnection.propTypes = { + onClose: PropTypes.func.isRequired, +}; + +export default AddNewAppConnection; diff --git a/packages/web/src/components/AdminApplicationAuthClientDialog/index.jsx b/packages/web/src/components/AdminApplicationAuthClientDialog/index.jsx index c15564a5..2fc93069 100644 --- a/packages/web/src/components/AdminApplicationAuthClientDialog/index.jsx +++ b/packages/web/src/components/AdminApplicationAuthClientDialog/index.jsx @@ -1,4 +1,5 @@ -import React from 'react'; +import * as React from 'react'; +import PropTypes from 'prop-types'; import LoadingButton from '@mui/lab/LoadingButton'; import Alert from '@mui/material/Alert'; import Dialog from '@mui/material/Dialog'; @@ -6,12 +7,16 @@ import DialogContent from '@mui/material/DialogContent'; import DialogContentText from '@mui/material/DialogContentText'; import DialogTitle from '@mui/material/DialogTitle'; import CircularProgress from '@mui/material/CircularProgress'; +import { ApolloError } from '@apollo/client'; + +import { FieldPropType } from 'propTypes/propTypes'; import useFormatMessage from 'hooks/useFormatMessage'; import InputCreator from 'components/InputCreator'; import Switch from 'components/Switch'; import TextField from 'components/TextField'; import { Form } from './style'; -export default function AdminApplicationAuthClientDialog(props) { + +function AdminApplicationAuthClientDialog(props) { const { error, onClose, @@ -80,3 +85,17 @@ export default function AdminApplicationAuthClientDialog(props) { ); } + +AdminApplicationAuthClientDialog.propTypes = { + error: PropTypes.instanceOf(ApolloError), + onClose: PropTypes.func.isRequired, + title: PropTypes.string.isRequired, + loading: PropTypes.bool.isRequired, + submitHandler: PropTypes.func.isRequired, + authFields: PropTypes.arrayOf(FieldPropType), + submitting: PropTypes.bool.isRequired, + defaultValues: PropTypes.object.isRequired, + disabled: PropTypes.bool, +}; + +export default AdminApplicationAuthClientDialog; diff --git a/packages/web/src/components/AdminApplicationAuthClients/index.jsx b/packages/web/src/components/AdminApplicationAuthClients/index.jsx index f311a548..d9bc9135 100644 --- a/packages/web/src/components/AdminApplicationAuthClients/index.jsx +++ b/packages/web/src/components/AdminApplicationAuthClients/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import CircularProgress from '@mui/material/CircularProgress'; import Stack from '@mui/material/Stack'; @@ -11,6 +12,7 @@ import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; import useAppAuthClients from 'hooks/useAppAuthClients.ee'; import NoResultFound from 'components/NoResultFound'; + function AdminApplicationAuthClients(props) { const { appKey } = props; const formatMessage = useFormatMessage(); @@ -72,4 +74,9 @@ function AdminApplicationAuthClients(props) { ); } + +AdminApplicationAuthClients.propTypes = { + appKey: PropTypes.string.isRequired, +}; + export default AdminApplicationAuthClients; diff --git a/packages/web/src/components/AdminApplicationCreateAuthClient/index.jsx b/packages/web/src/components/AdminApplicationCreateAuthClient/index.jsx index c253382e..4fe7c0e4 100644 --- a/packages/web/src/components/AdminApplicationCreateAuthClient/index.jsx +++ b/packages/web/src/components/AdminApplicationCreateAuthClient/index.jsx @@ -1,11 +1,15 @@ +import PropTypes from 'prop-types'; import React, { useCallback, useMemo } from 'react'; import { useMutation } from '@apollo/client'; + +import { AppPropType } from 'propTypes/propTypes'; import { CREATE_APP_CONFIG } from 'graphql/mutations/create-app-config'; import { CREATE_APP_AUTH_CLIENT } from 'graphql/mutations/create-app-auth-client'; import useAppConfig from 'hooks/useAppConfig.ee'; import useFormatMessage from 'hooks/useFormatMessage'; import AdminApplicationAuthClientDialog from 'components/AdminApplicationAuthClientDialog'; -export default function AdminApplicationCreateAuthClient(props) { + +function AdminApplicationCreateAuthClient(props) { const { appKey, application, onClose } = props; const { auth } = application; const formatMessage = useFormatMessage(); @@ -87,3 +91,11 @@ export default function AdminApplicationCreateAuthClient(props) { /> ); } + +AdminApplicationCreateAuthClient.propTypes = { + appKey: PropTypes.string.isRequired, + application: AppPropType.isRequired, + onClose: PropTypes.func.isRequired, +}; + +export default AdminApplicationCreateAuthClient; diff --git a/packages/web/src/components/AdminApplicationSettings/index.jsx b/packages/web/src/components/AdminApplicationSettings/index.jsx index bf8c7bbd..63fc36d7 100644 --- a/packages/web/src/components/AdminApplicationSettings/index.jsx +++ b/packages/web/src/components/AdminApplicationSettings/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useMemo } from 'react'; import useAppConfig from 'hooks/useAppConfig.ee'; import useFormatMessage from 'hooks/useFormatMessage'; @@ -11,6 +12,7 @@ import { UPDATE_APP_CONFIG } from 'graphql/mutations/update-app-config'; import Form from 'components/Form'; import { Switch } from './style'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; + function AdminApplicationSettings(props) { const { appConfig, loading } = useAppConfig(props.appKey); const [createAppConfig, { loading: loadingCreateAppConfig }] = useMutation( @@ -109,4 +111,9 @@ function AdminApplicationSettings(props) { > ); } + +AdminApplicationSettings.propTypes = { + appKey: PropTypes.string.isRequired, +}; + export default AdminApplicationSettings; diff --git a/packages/web/src/components/AdminApplicationUpdateAuthClient/index.jsx b/packages/web/src/components/AdminApplicationUpdateAuthClient/index.jsx index f837a709..420bfeb4 100644 --- a/packages/web/src/components/AdminApplicationUpdateAuthClient/index.jsx +++ b/packages/web/src/components/AdminApplicationUpdateAuthClient/index.jsx @@ -1,13 +1,15 @@ +import PropTypes from 'prop-types'; import React, { useCallback, useMemo } from 'react'; import { useParams } from 'react-router-dom'; import { useMutation } from '@apollo/client'; +import { AppPropType } from 'propTypes/propTypes'; import { UPDATE_APP_AUTH_CLIENT } from 'graphql/mutations/update-app-auth-client'; import useFormatMessage from 'hooks/useFormatMessage'; import AdminApplicationAuthClientDialog from 'components/AdminApplicationAuthClientDialog'; import useAdminAppAuthClient from 'hooks/useAdminAppAuthClient.ee'; -export default function AdminApplicationUpdateAuthClient(props) { +function AdminApplicationUpdateAuthClient(props) { const { application, onClose } = props; const { auth } = application; const formatMessage = useFormatMessage(); @@ -87,3 +89,10 @@ export default function AdminApplicationUpdateAuthClient(props) { /> ); } + +AdminApplicationUpdateAuthClient.propTypes = { + application: AppPropType.isRequired, + onClose: PropTypes.func.isRequired, +}; + +export default AdminApplicationUpdateAuthClient; diff --git a/packages/web/src/components/AdminSettingsLayout/index.jsx b/packages/web/src/components/AdminSettingsLayout/index.jsx index df3990ca..3db28cc9 100644 --- a/packages/web/src/components/AdminSettingsLayout/index.jsx +++ b/packages/web/src/components/AdminSettingsLayout/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew'; import GroupIcon from '@mui/icons-material/Group'; import GroupsIcon from '@mui/icons-material/Groups'; @@ -14,6 +15,7 @@ import Drawer from 'components/Drawer'; import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; import useCurrentUserAbility from 'hooks/useCurrentUserAbility'; + function createDrawerLinks({ canReadRole, canReadUser, @@ -65,7 +67,8 @@ function createDrawerLinks({ ].filter(Boolean); return items; } -export default function SettingsLayout({ children }) { + +function SettingsLayout({ children }) { const theme = useTheme(); const formatMessage = useFormatMessage(); const currentUserAbility = useCurrentUserAbility(); @@ -83,7 +86,6 @@ export default function SettingsLayout({ children }) { currentUserAbility.can('create', 'SamlAuthProvider'), canUpdateApp: currentUserAbility.can('update', 'App'), }); - const a = 123; const drawerBottomLinks = [ { Icon: ArrowBackIosNewIcon, @@ -118,3 +120,9 @@ export default function SettingsLayout({ children }) { ); } + +SettingsLayout.propTypes = { + children: PropTypes.node.isRequired, +}; + +export default SettingsLayout; diff --git a/packages/web/src/components/ApolloProvider/index.jsx b/packages/web/src/components/ApolloProvider/index.jsx index 09fe2a28..d6fb3f26 100644 --- a/packages/web/src/components/ApolloProvider/index.jsx +++ b/packages/web/src/components/ApolloProvider/index.jsx @@ -3,6 +3,7 @@ import * as React from 'react'; import { mutateAndGetClient } from 'graphql/client'; import useAuthentication from 'hooks/useAuthentication'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; + const ApolloProvider = (props) => { const enqueueSnackbar = useEnqueueSnackbar(); const authentication = useAuthentication(); @@ -25,4 +26,5 @@ const ApolloProvider = (props) => { }, [onError, authentication]); return ; }; + export default ApolloProvider; diff --git a/packages/web/src/components/AppAuthClientsDialog/index.ee.jsx b/packages/web/src/components/AppAuthClientsDialog/index.ee.jsx index 395bdc24..e6258946 100644 --- a/packages/web/src/components/AppAuthClientsDialog/index.ee.jsx +++ b/packages/web/src/components/AppAuthClientsDialog/index.ee.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import List from '@mui/material/List'; @@ -7,7 +8,8 @@ import ListItemText from '@mui/material/ListItemText'; import * as React from 'react'; import useAppAuthClients from 'hooks/useAppAuthClients.ee'; import useFormatMessage from 'hooks/useFormatMessage'; -export default function AppAuthClientsDialog(props) { + +function AppAuthClientsDialog(props) { const { appKey, onClientClick, onClose } = props; const { appAuthClients } = useAppAuthClients({ appKey, active: true }); const formatMessage = useFormatMessage(); @@ -37,3 +39,11 @@ export default function AppAuthClientsDialog(props) { ); } + +AppAuthClientsDialog.propTypes = { + appKey: PropTypes.string.isRequired, + onClientClick: PropTypes.func.isRequired, + onClose: PropTypes.func.isRequired, +}; + +export default AppAuthClientsDialog; diff --git a/packages/web/src/components/AppBar/index.jsx b/packages/web/src/components/AppBar/index.jsx index 1a0b9d8d..57f52ce0 100644 --- a/packages/web/src/components/AppBar/index.jsx +++ b/packages/web/src/components/AppBar/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import AccountCircleIcon from '@mui/icons-material/AccountCircle'; import MenuIcon from '@mui/icons-material/Menu'; import MenuOpenIcon from '@mui/icons-material/MenuOpen'; @@ -13,8 +14,10 @@ import Logo from 'components/Logo/index'; import TrialStatusBadge from 'components/TrialStatusBadge/index.ee'; import * as URLS from 'config/urls'; import { Link } from './style'; + const accountMenuId = 'account-menu'; -export default function AppBar(props) { + +function AppBar(props) { const { drawerOpen, onDrawerOpen, onDrawerClose, maxWidth = false } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('md')); @@ -73,3 +76,15 @@ export default function AppBar(props) { ); } + +AppBar.propTypes = { + drawerOpen: PropTypes.bool.isRequired, + onDrawerOpen: PropTypes.func.isRequired, + onDrawerClose: PropTypes.func.isRequired, + maxWidth: PropTypes.oneOfType([ + PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), + PropTypes.string, + ]), +}; + +export default AppBar; diff --git a/packages/web/src/components/AppConnectionContextMenu/index.jsx b/packages/web/src/components/AppConnectionContextMenu/index.jsx index e2f277df..829fc597 100644 --- a/packages/web/src/components/AppConnectionContextMenu/index.jsx +++ b/packages/web/src/components/AppConnectionContextMenu/index.jsx @@ -1,10 +1,14 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { Link } from 'react-router-dom'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; + import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; -export default function ContextMenu(props) { +import { ConnectionPropType } from 'propTypes/propTypes'; + +function ContextMenu(props) { const { appKey, connection, @@ -61,3 +65,17 @@ export default function ContextMenu(props) { ); } + +ContextMenu.propTypes = { + appKey: PropTypes.string.isRequired, + connection: ConnectionPropType.isRequired, + onClose: PropTypes.func.isRequired, + onMenuItemClick: PropTypes.func.isRequired, + anchorEl: PropTypes.oneOfType([ + PropTypes.func, + PropTypes.shape({ current: PropTypes.instanceOf(Element) }), + ]), + disableReconnection: PropTypes.bool.isRequired, +}; + +export default ContextMenu; diff --git a/packages/web/src/components/AppConnectionRow/index.jsx b/packages/web/src/components/AppConnectionRow/index.jsx index 6a139098..7622575a 100644 --- a/packages/web/src/components/AppConnectionRow/index.jsx +++ b/packages/web/src/components/AppConnectionRow/index.jsx @@ -14,7 +14,9 @@ import ConnectionContextMenu from 'components/AppConnectionContextMenu'; import { DELETE_CONNECTION } from 'graphql/mutations/delete-connection'; import { TEST_CONNECTION } from 'graphql/queries/test-connection'; import useFormatMessage from 'hooks/useFormatMessage'; +import { ConnectionPropType } from 'propTypes/propTypes'; import { CardContent, Typography } from './style'; + const countTranslation = (value) => ( <> {value} @@ -166,4 +168,9 @@ function AppConnectionRow(props) { ); } + +AppConnectionRow.propTypes = { + connection: ConnectionPropType.isRequired, +}; + export default AppConnectionRow; diff --git a/packages/web/src/components/AppConnections/index.jsx b/packages/web/src/components/AppConnections/index.jsx index 74061258..3606b6ea 100644 --- a/packages/web/src/components/AppConnections/index.jsx +++ b/packages/web/src/components/AppConnections/index.jsx @@ -1,11 +1,13 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { useQuery } from '@apollo/client'; import { GET_APP_CONNECTIONS } from 'graphql/queries/get-app-connections'; import AppConnectionRow from 'components/AppConnectionRow'; import NoResultFound from 'components/NoResultFound'; import useFormatMessage from 'hooks/useFormatMessage'; import * as URLS from 'config/urls'; -export default function AppConnections(props) { + +function AppConnections(props) { const { appKey } = props; const formatMessage = useFormatMessage(); const { data } = useQuery(GET_APP_CONNECTIONS, { @@ -22,6 +24,7 @@ export default function AppConnections(props) { /> ); } + return ( <> {appConnections.map((appConnection) => ( @@ -30,3 +33,9 @@ export default function AppConnections(props) { ); } + +AppConnections.propTypes = { + appKey: PropTypes.string.isRequired, +}; + +export default AppConnections; diff --git a/packages/web/src/components/AppFlows/index.jsx b/packages/web/src/components/AppFlows/index.jsx index eede48f5..bf5f4d8e 100644 --- a/packages/web/src/components/AppFlows/index.jsx +++ b/packages/web/src/components/AppFlows/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useQuery } from '@apollo/client'; import { Link, useSearchParams } from 'react-router-dom'; import { GET_FLOWS } from 'graphql/queries/get-flows'; @@ -12,7 +13,7 @@ const getLimitAndOffset = (page) => ({ limit: FLOW_PER_PAGE, offset: (page - 1) * FLOW_PER_PAGE, }); -export default function AppFlows(props) { +function AppFlows(props) { const { appKey } = props; const formatMessage = useFormatMessage(); const [searchParams, setSearchParams] = useSearchParams(); @@ -62,3 +63,9 @@ export default function AppFlows(props) { ); } + +AppFlows.propTypes = { + appKey: PropTypes.string.isRequired, +}; + +export default AppFlows; diff --git a/packages/web/src/components/AppIcon/index.jsx b/packages/web/src/components/AppIcon/index.jsx index 1357bd2d..92b102b6 100644 --- a/packages/web/src/components/AppIcon/index.jsx +++ b/packages/web/src/components/AppIcon/index.jsx @@ -1,9 +1,10 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import Avatar from '@mui/material/Avatar'; const inlineImgStyle = { objectFit: 'contain', }; -export default function AppIcon(props) { +function AppIcon(props) { const { name, url, color, sx = {}, variant = 'square', ...restProps } = props; const initialLetter = name?.[0]; return ( @@ -14,8 +15,22 @@ export default function AppIcon(props) { imgProps={{ style: inlineImgStyle }} src={url} alt={name} - children={initialLetter} {...restProps} - /> + > + {initialLetter} + ); } + +AppIcon.propTypes = { + name: PropTypes.string, + url: PropTypes.string, + color: PropTypes.string, + variant: PropTypes.oneOfType([ + PropTypes.oneOf(['circular', 'rounded', 'square']), + PropTypes.string, + ]), + sx: PropTypes.object, +}; + +export default AppIcon; diff --git a/packages/web/src/components/AppRow/index.jsx b/packages/web/src/components/AppRow/index.jsx index bff2e1ab..6fb30490 100644 --- a/packages/web/src/components/AppRow/index.jsx +++ b/packages/web/src/components/AppRow/index.jsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import Card from '@mui/material/Card'; import Box from '@mui/material/Box'; @@ -6,13 +7,16 @@ import CardActionArea from '@mui/material/CardActionArea'; import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'; import useFormatMessage from 'hooks/useFormatMessage'; import AppIcon from 'components/AppIcon'; +import { AppPropType } from 'propTypes/propTypes'; import { CardContent, Typography } from './style'; + const countTranslation = (value) => ( <> {value}
); + function AppRow(props) { const formatMessage = useFormatMessage(); const { name, primaryColor, iconUrl, connectionCount, flowCount } = @@ -65,4 +69,10 @@ function AppRow(props) { ); } + +AppRow.propTypes = { + application: AppPropType.isRequired, + url: PropTypes.string.isRequired, +}; + export default AppRow; diff --git a/packages/web/src/components/Can/index.jsx b/packages/web/src/components/Can/index.jsx index b98893ce..242eeb4b 100644 --- a/packages/web/src/components/Can/index.jsx +++ b/packages/web/src/components/Can/index.jsx @@ -1,7 +1,18 @@ +import PropTypes from 'prop-types'; import { Can as OriginalCan } from '@casl/react'; -import * as React from 'react'; import useCurrentUserAbility from 'hooks/useCurrentUserAbility'; -export default function Can(props) { + +function Can(props) { const currentUserAbility = useCurrentUserAbility(); return ; } + +Can.propTypes = { + I: PropTypes.string.isRequired, + a: PropTypes.string, + an: PropTypes.string, + passThrough: PropTypes.bool, + children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]).isRequired, +}; + +export default Can; diff --git a/packages/web/src/components/CheckoutCompletedAlert/index.ee.jsx b/packages/web/src/components/CheckoutCompletedAlert/index.ee.jsx index f1ff8e91..2bc213e8 100644 --- a/packages/web/src/components/CheckoutCompletedAlert/index.ee.jsx +++ b/packages/web/src/components/CheckoutCompletedAlert/index.ee.jsx @@ -3,6 +3,7 @@ import { useLocation } from 'react-router-dom'; import Alert from '@mui/material/Alert'; import Typography from '@mui/material/Typography'; import useFormatMessage from 'hooks/useFormatMessage'; + export default function CheckoutCompletedAlert() { const formatMessage = useFormatMessage(); const location = useLocation(); diff --git a/packages/web/src/components/ChooseAppAndEventSubstep/index.jsx b/packages/web/src/components/ChooseAppAndEventSubstep/index.jsx index c5b5c9f7..aa5da519 100644 --- a/packages/web/src/components/ChooseAppAndEventSubstep/index.jsx +++ b/packages/web/src/components/ChooseAppAndEventSubstep/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; @@ -11,6 +12,8 @@ import useFormatMessage from 'hooks/useFormatMessage'; import useApps from 'hooks/useApps'; import { EditorContext } from 'contexts/Editor'; import FlowSubstepTitle from 'components/FlowSubstepTitle'; +import { StepPropType, SubstepPropType } from 'propTypes/propTypes'; + const optionGenerator = (app) => ({ label: app.name, value: app.key, @@ -222,4 +225,15 @@ function ChooseAppAndEventSubstep(props) { ); } + +ChooseAppAndEventSubstep.propTypes = { + substep: SubstepPropType.isRequired, + expanded: PropTypes.bool, + onExpand: PropTypes.func.isRequired, + onCollapse: PropTypes.func.isRequired, + step: StepPropType.isRequired, + onSubmit: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, +}; + export default ChooseAppAndEventSubstep; diff --git a/packages/web/src/components/ChooseConnectionSubstep/index.jsx b/packages/web/src/components/ChooseConnectionSubstep/index.jsx index 38e4367c..e5b0b8f3 100644 --- a/packages/web/src/components/ChooseConnectionSubstep/index.jsx +++ b/packages/web/src/components/ChooseConnectionSubstep/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useLazyQuery, useQuery } from '@apollo/client'; import Autocomplete from '@mui/material/Autocomplete'; import Button from '@mui/material/Button'; @@ -14,14 +15,23 @@ import { GET_APP_CONNECTIONS } from 'graphql/queries/get-app-connections'; import { TEST_CONNECTION } from 'graphql/queries/test-connection'; import useAuthenticateApp from 'hooks/useAuthenticateApp.ee'; import useFormatMessage from 'hooks/useFormatMessage'; +import { + AppPropType, + StepPropType, + SubstepPropType, +} from 'propTypes/propTypes'; + const ADD_CONNECTION_VALUE = 'ADD_CONNECTION'; const ADD_SHARED_CONNECTION_VALUE = 'ADD_SHARED_CONNECTION'; + const optionGenerator = (connection) => ({ label: connection?.formattedData?.screenName ?? 'Unnamed', value: connection?.id, }); + const getOption = (options, connectionId) => options.find((connection) => connection.value === connectionId) || null; + function ChooseConnectionSubstep(props) { const { substep, @@ -237,4 +247,16 @@ function ChooseConnectionSubstep(props) { ); } + +ChooseConnectionSubstep.propTypes = { + application: AppPropType.isRequired, + substep: SubstepPropType.isRequired, + expanded: PropTypes.bool, + onExpand: PropTypes.func.isRequired, + onCollapse: PropTypes.func.isRequired, + onChange: PropTypes.func.isRequired, + onSubmit: PropTypes.func.isRequired, + step: StepPropType.isRequired, +}; + export default ChooseConnectionSubstep; diff --git a/packages/web/src/components/ColorInput/ColorButton/index.jsx b/packages/web/src/components/ColorInput/ColorButton/index.jsx index 76caa0a0..1dbf965b 100644 --- a/packages/web/src/components/ColorInput/ColorButton/index.jsx +++ b/packages/web/src/components/ColorInput/ColorButton/index.jsx @@ -1,7 +1,10 @@ import React from 'react'; +import PropTypes from 'prop-types'; import { Button } from './style'; + const BG_IMAGE_FALLBACK = 'linear-gradient(45deg, #ccc 25%, transparent 25%), linear-gradient(135deg, #ccc 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ccc 75%), linear-gradient(135deg, transparent 75%, #ccc 75%) /*! @noflip */'; + const ColorButton = (props) => { const { bgColor, @@ -24,4 +27,12 @@ const ColorButton = (props) => { /> ); }; + +ColorButton.propTypes = { + bgColor: PropTypes.string.isRequired, + className: PropTypes.string, + disablePopover: PropTypes.bool.isRequired, + isBgColorValid: PropTypes.bool.isRequired, +}; + export default ColorButton; diff --git a/packages/web/src/components/ColorInput/index.jsx b/packages/web/src/components/ColorInput/index.jsx index 027e0af7..e1be650e 100644 --- a/packages/web/src/components/ColorInput/index.jsx +++ b/packages/web/src/components/ColorInput/index.jsx @@ -1,8 +1,10 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { Controller, useFormContext } from 'react-hook-form'; import { MuiColorInput } from 'mui-color-input'; import ColorButton from './ColorButton'; -export default function ColorInput(props) { + +function ColorInput(props) { const { control } = useFormContext(); const { required, @@ -32,3 +34,12 @@ export default function ColorInput(props) { /> ); } + +ColorInput.propTypes = { + shouldUnregister: PropTypes.bool, + name: PropTypes.string.isRequired, + disabled: PropTypes.bool, + required: PropTypes.bool, +}; + +export default ColorInput; diff --git a/packages/web/src/components/ConditionalIconButton/index.jsx b/packages/web/src/components/ConditionalIconButton/index.jsx index cf7f405d..50125c32 100644 --- a/packages/web/src/components/ConditionalIconButton/index.jsx +++ b/packages/web/src/components/ConditionalIconButton/index.jsx @@ -1,9 +1,11 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { useTheme } from '@mui/material/styles'; import useMediaQuery from '@mui/material/useMediaQuery'; import Button from '@mui/material/Button'; import { IconButton } from './style'; -export default function ConditionalIconButton(props) { + +function ConditionalIconButton(props) { const { icon, ...buttonProps } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('md')); @@ -24,3 +26,9 @@ export default function ConditionalIconButton(props) { } return )} - {confirmButtionChildren && onConfirm && ( + {confirmButtonChildren && onConfirm && ( )} ); } + +ConfirmationDialog.propTypes = { + onClose: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, + title: PropTypes.node.isRequired, + description: PropTypes.node.isRequired, + cancelButtonChildren: PropTypes.node.isRequired, + confirmButtonChildren: PropTypes.node.isRequired, + open: PropTypes.bool, + 'data-test': PropTypes.string, +}; + +export default ConfirmationDialog; diff --git a/packages/web/src/components/Container/index.jsx b/packages/web/src/components/Container/index.jsx index 07228073..ffafaa14 100644 --- a/packages/web/src/components/Container/index.jsx +++ b/packages/web/src/components/Container/index.jsx @@ -1,8 +1,10 @@ import * as React from 'react'; import MuiContainer from '@mui/material/Container'; + export default function Container(props) { return ; } + Container.defaultProps = { maxWidth: 'lg', }; diff --git a/packages/web/src/components/ControlledAutocomplete/index.jsx b/packages/web/src/components/ControlledAutocomplete/index.jsx index cd5ae7b9..a88d5038 100644 --- a/packages/web/src/components/ControlledAutocomplete/index.jsx +++ b/packages/web/src/components/ControlledAutocomplete/index.jsx @@ -1,10 +1,13 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import FormHelperText from '@mui/material/FormHelperText'; import Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete'; import Typography from '@mui/material/Typography'; + const getOption = (options, value) => options.find((option) => option.value === value) || null; + // Enables filtering by value in autocomplete dropdown const filterOptions = createFilterOptions({ stringify: ({ label, value }) => ` @@ -12,6 +15,7 @@ const filterOptions = createFilterOptions({ ${value} `, }); + function ControlledAutocomplete(props) { const { control, watch, setValue, resetField } = useFormContext(); const { @@ -113,4 +117,18 @@ function ControlledAutocomplete(props) { /> ); } + +ControlledAutocomplete.propTypes = { + shouldUnregister: PropTypes.bool, + name: PropTypes.string.isRequired, + required: PropTypes.bool, + showOptionValue: PropTypes.bool, + description: PropTypes.string, + dependsOn: PropTypes.arrayOf(PropTypes.string), + defaultValue: PropTypes.any, + onBlur: PropTypes.func, + onChange: PropTypes.func, + options: PropTypes.array, +}; + export default ControlledAutocomplete; diff --git a/packages/web/src/components/ControlledCheckbox/index.jsx b/packages/web/src/components/ControlledCheckbox/index.jsx index 27c9aaf3..95400479 100644 --- a/packages/web/src/components/ControlledCheckbox/index.jsx +++ b/packages/web/src/components/ControlledCheckbox/index.jsx @@ -1,7 +1,9 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { Controller, useFormContext } from 'react-hook-form'; import Checkbox from '@mui/material/Checkbox'; -export default function ControlledCheckbox(props) { + +function ControlledCheckbox(props) { const { control } = useFormContext(); const { required, @@ -52,3 +54,15 @@ export default function ControlledCheckbox(props) { /> ); } + +ControlledCheckbox.propTypes = { + name: PropTypes.string.isRequired, + defaultValue: PropTypes.bool, + dataTest: PropTypes.string, + required: PropTypes.bool, + disabled: PropTypes.bool, + onBlur: PropTypes.func, + onChange: PropTypes.func, +}; + +export default ControlledCheckbox; diff --git a/packages/web/src/components/ControlledCustomAutocomplete/Controller.jsx b/packages/web/src/components/ControlledCustomAutocomplete/Controller.jsx index aa914b83..3c10427f 100644 --- a/packages/web/src/components/ControlledCustomAutocomplete/Controller.jsx +++ b/packages/web/src/components/ControlledCustomAutocomplete/Controller.jsx @@ -1,5 +1,7 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { Controller as RHFController, useFormContext } from 'react-hook-form'; + function Controller(props) { const { control } = useFormContext(); const { @@ -20,4 +22,13 @@ function Controller(props) { /> ); } + +Controller.propTypes = { + defaultValue: PropTypes.string, + name: PropTypes.string.isRequired, + required: PropTypes.bool, + shouldUnregister: PropTypes.bool, + children: PropTypes.element.isRequired, +}; + export default Controller; diff --git a/packages/web/src/components/ControlledCustomAutocomplete/CustomOptions.jsx b/packages/web/src/components/ControlledCustomAutocomplete/CustomOptions.jsx index a0516f41..e0d74725 100644 --- a/packages/web/src/components/ControlledCustomAutocomplete/CustomOptions.jsx +++ b/packages/web/src/components/ControlledCustomAutocomplete/CustomOptions.jsx @@ -1,11 +1,14 @@ +import PropTypes from 'prop-types'; import Paper from '@mui/material/Paper'; import Popper from '@mui/material/Popper'; import Tab from '@mui/material/Tab'; import * as React from 'react'; import Suggestions from 'components/PowerInput/Suggestions'; import TabPanel from 'components/TabPanel'; +import { FieldDropdownOptionPropType } from 'propTypes/propTypes'; import Options from './Options'; import { Tabs } from './style'; + const CustomOptions = (props) => { const { open, @@ -69,4 +72,23 @@ const CustomOptions = (props) => { ); }; + +CustomOptions.propTypes = { + open: PropTypes.bool.isRequired, + anchorEl: PropTypes.oneOfType([PropTypes.element, PropTypes.func]).isRequired, + data: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + output: PropTypes.arrayOf(PropTypes.object).isRequired, + }), + ).isRequired, + options: PropTypes.arrayOf(FieldDropdownOptionPropType).isRequired, + onSuggestionClick: PropTypes.func.isRequired, + onOptionClick: PropTypes.func.isRequired, + onTabChange: PropTypes.func.isRequired, + label: PropTypes.string, + initialTabIndex: PropTypes.oneOf([0, 1]), +}; + export default CustomOptions; diff --git a/packages/web/src/components/ControlledCustomAutocomplete/Options.jsx b/packages/web/src/components/ControlledCustomAutocomplete/Options.jsx index 9560b2a7..2d1cb3c8 100644 --- a/packages/web/src/components/ControlledCustomAutocomplete/Options.jsx +++ b/packages/web/src/components/ControlledCustomAutocomplete/Options.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemText from '@mui/material/ListItemText'; import throttle from 'lodash/throttle'; @@ -7,12 +8,16 @@ import { Typography } from '@mui/material'; import SearchInput from 'components/SearchInput'; import useFormatMessage from 'hooks/useFormatMessage'; import { SearchInputWrapper } from './style'; +import { FieldDropdownOptionPropType } from 'propTypes/propTypes'; + const SHORT_LIST_LENGTH = 4; const LIST_ITEM_HEIGHT = 64; + const computeListHeight = (currentLength) => { const numberOfRenderedItems = Math.min(SHORT_LIST_LENGTH, currentLength); return LIST_ITEM_HEIGHT * numberOfRenderedItems; }; + const renderItemFactory = ({ onOptionClick }) => (props) => { @@ -44,6 +49,7 @@ const renderItemFactory = ); }; + const Options = (props) => { const formatMessage = useFormatMessage(); const { data, onOptionClick } = props; @@ -108,4 +114,10 @@ const Options = (props) => { ); }; + +Options.propTypes = { + data: PropTypes.arrayOf(FieldDropdownOptionPropType).isRequired, + onOptionClick: PropTypes.func.isRequired, +}; + export default Options; diff --git a/packages/web/src/components/ControlledCustomAutocomplete/index.jsx b/packages/web/src/components/ControlledCustomAutocomplete/index.jsx index e18f452d..87996e5e 100644 --- a/packages/web/src/components/ControlledCustomAutocomplete/index.jsx +++ b/packages/web/src/components/ControlledCustomAutocomplete/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { useController, useFormContext } from 'react-hook-form'; import { IconButton } from '@mui/material'; @@ -28,6 +29,7 @@ import { import CustomOptions from './CustomOptions'; import { processStepWithExecutions } from 'components/PowerInput/data'; import { StepExecutionsContext } from 'contexts/StepExecutions'; + function ControlledCustomAutocomplete(props) { const { defaultValue = '', @@ -257,4 +259,23 @@ function ControlledCustomAutocomplete(props) { ); } + +ControlledCustomAutocomplete.propTypes = { + options: PropTypes.array, + loading: PropTypes.bool.isRequired, + showOptionValue: PropTypes.bool, + dependsOn: PropTypes.arrayOf(PropTypes.string), + defaultValue: PropTypes.string, + name: PropTypes.string.isRequired, + label: PropTypes.string, + type: PropTypes.string, + required: PropTypes.bool, + readOnly: PropTypes.bool, + description: PropTypes.string, + docUrl: PropTypes.string, + clickToCopy: PropTypes.bool, + disabled: PropTypes.bool, + shouldUnregister: PropTypes.bool, +}; + export default ControlledCustomAutocomplete; diff --git a/packages/web/src/components/CustomLogo/index.ee.jsx b/packages/web/src/components/CustomLogo/index.ee.jsx index ccea8c55..7408d6dd 100644 --- a/packages/web/src/components/CustomLogo/index.ee.jsx +++ b/packages/web/src/components/CustomLogo/index.ee.jsx @@ -1,5 +1,6 @@ import useConfig from 'hooks/useConfig'; import { LogoImage } from './style.ee'; + const CustomLogo = () => { const { config, loading } = useConfig(['logo.svgData']); if (loading || !config?.['logo.svgData']) return null; @@ -11,4 +12,5 @@ const CustomLogo = () => { /> ); }; + export default CustomLogo; diff --git a/packages/web/src/components/DefaultLogo/index.jsx b/packages/web/src/components/DefaultLogo/index.jsx index 01043558..82795db0 100644 --- a/packages/web/src/components/DefaultLogo/index.jsx +++ b/packages/web/src/components/DefaultLogo/index.jsx @@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl'; import MationLogo from 'components/MationLogo'; import useAutomatischInfo from 'hooks/useAutomatischInfo'; -export default function DefaultLogo() { +const DefaultLogo = () => { const { data: automatischInfo, isPending } = useAutomatischInfo(); const isMation = automatischInfo?.data.isMation; @@ -16,4 +16,6 @@ export default function DefaultLogo() { ); -} +}; + +export default DefaultLogo; diff --git a/packages/web/src/components/DeleteAccountDialog/index.ee.jsx b/packages/web/src/components/DeleteAccountDialog/index.ee.jsx index e21c3219..c4d3d08c 100644 --- a/packages/web/src/components/DeleteAccountDialog/index.ee.jsx +++ b/packages/web/src/components/DeleteAccountDialog/index.ee.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { useNavigate } from 'react-router-dom'; import { useMutation } from '@apollo/client'; @@ -8,7 +9,8 @@ import { DELETE_CURRENT_USER } from 'graphql/mutations/delete-current-user.ee'; import useAuthentication from 'hooks/useAuthentication'; import useFormatMessage from 'hooks/useFormatMessage'; import useCurrentUser from 'hooks/useCurrentUser'; -export default function DeleteAccountDialog(props) { + +function DeleteAccountDialog(props) { const [deleteCurrentUser] = useMutation(DELETE_CURRENT_USER); const formatMessage = useFormatMessage(); const currentUser = useCurrentUser(); @@ -27,7 +29,13 @@ export default function DeleteAccountDialog(props) { onClose={props.onClose} onConfirm={handleConfirm} cancelButtonChildren={formatMessage('deleteAccountDialog.cancel')} - confirmButtionChildren={formatMessage('deleteAccountDialog.confirm')} + confirmButtonChildren={formatMessage('deleteAccountDialog.confirm')} /> ); } + +DeleteAccountDialog.propTypes = { + onClose: PropTypes.func.isRequired, +}; + +export default DeleteAccountDialog; diff --git a/packages/web/src/components/DeleteRoleButton/index.ee.jsx b/packages/web/src/components/DeleteRoleButton/index.ee.jsx index ec6aa318..69dec7e0 100644 --- a/packages/web/src/components/DeleteRoleButton/index.ee.jsx +++ b/packages/web/src/components/DeleteRoleButton/index.ee.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useMutation } from '@apollo/client'; import DeleteIcon from '@mui/icons-material/Delete'; import IconButton from '@mui/material/IconButton'; @@ -7,7 +8,8 @@ import Can from 'components/Can'; import ConfirmationDialog from 'components/ConfirmationDialog'; import { DELETE_ROLE } from 'graphql/mutations/delete-role.ee'; import useFormatMessage from 'hooks/useFormatMessage'; -export default function DeleteRoleButton(props) { + +function DeleteRoleButton(props) { const { disabled, roleId } = props; const [showConfirmation, setShowConfirmation] = React.useState(false); const [deleteRole] = useMutation(DELETE_ROLE, { @@ -52,9 +54,16 @@ export default function DeleteRoleButton(props) { onClose={() => setShowConfirmation(false)} onConfirm={handleConfirm} cancelButtonChildren={formatMessage('deleteRoleButton.cancel')} - confirmButtionChildren={formatMessage('deleteRoleButton.confirm')} + confirmButtonChildren={formatMessage('deleteRoleButton.confirm')} data-test="delete-role-modal" /> ); } + +DeleteRoleButton.propTypes = { + disabled: PropTypes.bool, + roleId: PropTypes.string.isRequired, +}; + +export default DeleteRoleButton; diff --git a/packages/web/src/components/DeleteUserButton/index.ee.jsx b/packages/web/src/components/DeleteUserButton/index.ee.jsx index 099b4f44..40b45d91 100644 --- a/packages/web/src/components/DeleteUserButton/index.ee.jsx +++ b/packages/web/src/components/DeleteUserButton/index.ee.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useMutation } from '@apollo/client'; import DeleteIcon from '@mui/icons-material/Delete'; import IconButton from '@mui/material/IconButton'; @@ -6,7 +7,8 @@ import * as React from 'react'; import ConfirmationDialog from 'components/ConfirmationDialog'; import { DELETE_USER } from 'graphql/mutations/delete-user.ee'; import useFormatMessage from 'hooks/useFormatMessage'; -export default function DeleteUserButton(props) { + +function DeleteUserButton(props) { const { userId } = props; const [showConfirmation, setShowConfirmation] = React.useState(false); const [deleteUser] = useMutation(DELETE_USER, { @@ -46,9 +48,15 @@ export default function DeleteUserButton(props) { onClose={() => setShowConfirmation(false)} onConfirm={handleConfirm} cancelButtonChildren={formatMessage('deleteUserButton.cancel')} - confirmButtionChildren={formatMessage('deleteUserButton.confirm')} + confirmButtonChildren={formatMessage('deleteUserButton.confirm')} data-test="delete-user-modal" /> ); } + +DeleteUserButton.propTypes = { + userId: PropTypes.string.isRequired, +}; + +export default DeleteUserButton; diff --git a/packages/web/src/components/Drawer/index.jsx b/packages/web/src/components/Drawer/index.jsx index 8cf9234a..e124d56f 100644 --- a/packages/web/src/components/Drawer/index.jsx +++ b/packages/web/src/components/Drawer/index.jsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import { useTheme } from '@mui/material/styles'; import Toolbar from '@mui/material/Toolbar'; import List from '@mui/material/List'; @@ -8,10 +9,12 @@ import Badge from '@mui/material/Badge'; import ListItemLink from 'components/ListItemLink'; import useFormatMessage from 'hooks/useFormatMessage'; import { Drawer as BaseDrawer } from './style'; + const iOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent); -export default function Drawer(props) { + +function Drawer(props) { const { links = [], bottomLinks = [], ...drawerProps } = props; const theme = useTheme(); const matchSmallScreens = useMediaQuery(theme.breakpoints.down('md')); @@ -70,3 +73,20 @@ export default function Drawer(props) { ); } + +const DrawerLinkPropTypes = PropTypes.shape({ + Icon: PropTypes.elementType.isRequired, + primary: PropTypes.string.isRequired, + to: PropTypes.string.isRequired, + target: PropTypes.oneOf(['_blank']), + badgeContent: PropTypes.node, + dataTest: PropTypes.string, +}); + +Drawer.propTypes = { + links: PropTypes.arrayOf(DrawerLinkPropTypes).isRequired, + bottomLinks: PropTypes.arrayOf(DrawerLinkPropTypes), + onClose: PropTypes.func.isRequired, +}; + +export default Drawer; diff --git a/packages/web/src/components/DynamicField/index.jsx b/packages/web/src/components/DynamicField/index.jsx index b22fce2a..03eb8d2e 100644 --- a/packages/web/src/components/DynamicField/index.jsx +++ b/packages/web/src/components/DynamicField/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { v4 as uuidv4 } from 'uuid'; import { useFormContext, useWatch } from 'react-hook-form'; @@ -9,6 +10,8 @@ import RemoveIcon from '@mui/icons-material/Remove'; import AddIcon from '@mui/icons-material/Add'; import InputCreator from 'components/InputCreator'; import { EditorContext } from 'contexts/Editor'; +import { FieldsPropType } from 'propTypes/propTypes'; + function DynamicField(props) { const { label, description, fields, name, defaultValue, stepId } = props; const { control, setValue, getValues } = useFormContext(); @@ -107,4 +110,23 @@ function DynamicField(props) { ); } + +DynamicField.propTypes = { + onChange: PropTypes.func, + onBlur: PropTypes.func, + defaultValue: PropTypes.arrayOf(PropTypes.object), + name: PropTypes.string.isRequired, + label: PropTypes.string.isRequired, + type: PropTypes.string, + required: PropTypes.bool, + readOnly: PropTypes.bool, + description: PropTypes.string, + docUrl: PropTypes.string, + clickToCopy: PropTypes.bool, + disabled: PropTypes.bool, + fields: FieldsPropType.isRequired, + shouldUnregister: PropTypes.bool, + stepId: PropTypes.string, +}; + export default DynamicField; diff --git a/packages/web/src/components/EditableTypography/index.jsx b/packages/web/src/components/EditableTypography/index.jsx index 52a7016e..b30fcb1e 100644 --- a/packages/web/src/components/EditableTypography/index.jsx +++ b/packages/web/src/components/EditableTypography/index.jsx @@ -1,8 +1,11 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import Typography from '@mui/material/Typography'; import EditIcon from '@mui/icons-material/Edit'; import { Box, TextField } from './style'; + const noop = () => null; + function EditableTypography(props) { const { children, onConfirm = noop, sx, ...typographyProps } = props; const [editing, setEditing] = React.useState(false); @@ -55,4 +58,11 @@ function EditableTypography(props) { ); } + +EditableTypography.propTypes = { + children: PropTypes.string.isRequired, + onConfirm: PropTypes.func, + sx: PropTypes.object, +}; + export default EditableTypography; diff --git a/packages/web/src/components/Editor/index.jsx b/packages/web/src/components/Editor/index.jsx index 4f9b9e3a..4c133a92 100644 --- a/packages/web/src/components/Editor/index.jsx +++ b/packages/web/src/components/Editor/index.jsx @@ -7,6 +7,8 @@ import { GET_FLOW } from 'graphql/queries/get-flow'; import { CREATE_STEP } from 'graphql/mutations/create-step'; import { UPDATE_STEP } from 'graphql/mutations/update-step'; import FlowStep from 'components/FlowStep'; +import { FlowPropType } from 'propTypes/propTypes'; + function updateHandlerFactory(flowId, previousStepId) { return function createStepUpdateHandler(cache, mutationResult) { const { data } = mutationResult; @@ -28,7 +30,8 @@ function updateHandlerFactory(flowId, previousStepId) { }); }; } -export default function Editor(props) { + +function Editor(props) { const [updateStep] = useMutation(UPDATE_STEP); const [createStep, { loading: creationInProgress }] = useMutation( CREATE_STEP, @@ -118,3 +121,9 @@ export default function Editor(props) { ); } + +Editor.propTypes = { + flow: FlowPropType.isRequired, +}; + +export default Editor; diff --git a/packages/web/src/components/EditorLayout/index.jsx b/packages/web/src/components/EditorLayout/index.jsx index 040d7e42..52ed1586 100644 --- a/packages/web/src/components/EditorLayout/index.jsx +++ b/packages/web/src/components/EditorLayout/index.jsx @@ -17,6 +17,7 @@ import { UPDATE_FLOW_STATUS } from 'graphql/mutations/update-flow-status'; import { UPDATE_FLOW } from 'graphql/mutations/update-flow'; import { GET_FLOW } from 'graphql/queries/get-flow'; import * as URLS from 'config/urls'; + export default function EditorLayout() { const { flowId } = useParams(); const formatMessage = useFormatMessage(); diff --git a/packages/web/src/components/ExecutionHeader/index.jsx b/packages/web/src/components/ExecutionHeader/index.jsx index 3a45c6be..2b2b7a46 100644 --- a/packages/web/src/components/ExecutionHeader/index.jsx +++ b/packages/web/src/components/ExecutionHeader/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { DateTime } from 'luxon'; import Stack from '@mui/material/Stack'; @@ -5,6 +6,8 @@ import Box from '@mui/material/Box'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; import useFormatMessage from 'hooks/useFormatMessage'; +import { ExecutionPropType } from 'propTypes/propTypes'; + function ExecutionName(props) { return ( @@ -12,6 +15,11 @@ function ExecutionName(props) { ); } + +ExecutionName.propTypes = { + name: PropTypes.string.isRequired, +}; + function ExecutionId(props) { const formatMessage = useFormatMessage(); const id = ( @@ -27,6 +35,11 @@ function ExecutionId(props) { ); } + +ExecutionId.propTypes = { + id: PropTypes.string.isRequired, +}; + function ExecutionDate(props) { const createdAt = DateTime.fromMillis(parseInt(props.createdAt, 10)); const relativeCreatedAt = createdAt.toRelative(); @@ -40,7 +53,13 @@ function ExecutionDate(props) { ); } -export default function ExecutionHeader(props) { + +ExecutionDate.propTypes = { + createdAt: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]) + .isRequired, +}; + +function ExecutionHeader(props) { const { execution } = props; if (!execution) return ; return ( @@ -59,3 +78,9 @@ export default function ExecutionHeader(props) { ); } + +ExecutionHeader.propTypes = { + execution: ExecutionPropType, +}; + +export default ExecutionHeader; diff --git a/packages/web/src/components/ExecutionRow/index.jsx b/packages/web/src/components/ExecutionRow/index.jsx index 17551428..82013a36 100644 --- a/packages/web/src/components/ExecutionRow/index.jsx +++ b/packages/web/src/components/ExecutionRow/index.jsx @@ -9,9 +9,12 @@ import * as URLS from 'config/urls'; import useFormatMessage from 'hooks/useFormatMessage'; import FlowAppIcons from 'components/FlowAppIcons'; import { Apps, CardContent, ArrowContainer, Title, Typography } from './style'; -export default function ExecutionRow(props) { +import { ExecutionPropType } from 'propTypes/propTypes'; + +function ExecutionRow(props) { const formatMessage = useFormatMessage(); const { execution } = props; + const { flow } = execution; const createdAt = DateTime.fromMillis(parseInt(execution.createdAt, 10)); const relativeCreatedAt = createdAt.toRelative(); @@ -66,3 +69,9 @@ export default function ExecutionRow(props) { ); } + +ExecutionRow.propTypes = { + execution: ExecutionPropType.isRequired, +}; + +export default ExecutionRow; diff --git a/packages/web/src/components/ExecutionStep/index.jsx b/packages/web/src/components/ExecutionStep/index.jsx index 8aaf8555..21881523 100644 --- a/packages/web/src/components/ExecutionStep/index.jsx +++ b/packages/web/src/components/ExecutionStep/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { DateTime } from 'luxon'; import Stack from '@mui/material/Stack'; @@ -21,6 +22,8 @@ import { Metadata, Wrapper, } from './style'; +import { ExecutionStepPropType, StepPropType } from 'propTypes/propTypes'; + function ExecutionStepId(props) { const formatMessage = useFormatMessage(); const id = ( @@ -36,6 +39,11 @@ function ExecutionStepId(props) { ); } + +ExecutionStepId.propTypes = { + id: PropTypes.string.isRequired, +}; + function ExecutionStepDate(props) { const formatMessage = useFormatMessage(); const createdAt = DateTime.fromMillis(parseInt(props.createdAt, 10)); @@ -52,9 +60,15 @@ function ExecutionStepDate(props) { ); } + +ExecutionStepDate.propTypes = { + createdAt: PropTypes.string.isRequired, +}; + const validIcon = ; const errorIcon = ; -export default function ExecutionStep(props) { + +function ExecutionStep(props) { const { executionStep } = props; const [activeTabIndex, setActiveTabIndex] = React.useState(0); const step = executionStep.step; @@ -136,3 +150,12 @@ export default function ExecutionStep(props) { ); } + +ExecutionStep.propTypes = { + collapsed: PropTypes.bool, + step: StepPropType.isRequired, + index: PropTypes.number, + executionStep: ExecutionStepPropType.isRequired, +}; + +export default ExecutionStep; diff --git a/packages/web/src/components/FlowAppIcons/index.jsx b/packages/web/src/components/FlowAppIcons/index.jsx index d8b1d9a0..f95874e6 100644 --- a/packages/web/src/components/FlowAppIcons/index.jsx +++ b/packages/web/src/components/FlowAppIcons/index.jsx @@ -1,7 +1,9 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; import AppIcon from 'components/AppIcon'; import IntermediateStepCount from 'components/IntermediateStepCount'; -export default function FlowAppIcons(props) { + +function FlowAppIcons(props) { const { steps } = props; const stepsCount = steps.length; const firstStep = steps[0]; @@ -31,3 +33,13 @@ export default function FlowAppIcons(props) { ); } + +FlowAppIcons.propTypes = { + steps: PropTypes.arrayOf( + PropTypes.shape({ + iconUrl: PropTypes.string, + }), + ).isRequired, +}; + +export default FlowAppIcons; diff --git a/packages/web/src/components/FlowContextMenu/index.jsx b/packages/web/src/components/FlowContextMenu/index.jsx index 16118b1b..713ac779 100644 --- a/packages/web/src/components/FlowContextMenu/index.jsx +++ b/packages/web/src/components/FlowContextMenu/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import { useMutation } from '@apollo/client'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; @@ -9,7 +10,8 @@ import * as URLS from 'config/urls'; import { DELETE_FLOW } from 'graphql/mutations/delete-flow'; import { DUPLICATE_FLOW } from 'graphql/mutations/duplicate-flow'; import useFormatMessage from 'hooks/useFormatMessage'; -export default function ContextMenu(props) { + +function ContextMenu(props) { const { flowId, onClose, anchorEl } = props; const enqueueSnackbar = useEnqueueSnackbar(); const [deleteFlow] = useMutation(DELETE_FLOW); @@ -80,3 +82,14 @@ export default function ContextMenu(props) { ); } + +ContextMenu.propTypes = { + flowId: PropTypes.string.isRequired, + onClose: PropTypes.func.isRequired, + anchorEl: PropTypes.oneOfType([ + PropTypes.func, + PropTypes.shape({ current: PropTypes.instanceOf(Element) }), + ]).isRequired, +}; + +export default ContextMenu; diff --git a/packages/web/src/components/FlowRow/index.jsx b/packages/web/src/components/FlowRow/index.jsx index 410f91d9..dc012d6c 100644 --- a/packages/web/src/components/FlowRow/index.jsx +++ b/packages/web/src/components/FlowRow/index.jsx @@ -11,6 +11,8 @@ import FlowContextMenu from 'components/FlowContextMenu'; import useFormatMessage from 'hooks/useFormatMessage'; import * as URLS from 'config/urls'; import { Apps, CardContent, ContextMenu, Title, Typography } from './style'; +import { FlowPropType } from 'propTypes/propTypes'; + function getFlowStatusTranslationKey(status) { if (status === 'published') { return 'flow.published'; @@ -19,6 +21,7 @@ function getFlowStatusTranslationKey(status) { } return 'flow.draft'; } + function getFlowStatusColor(status) { if (status === 'published') { return 'success'; @@ -27,7 +30,8 @@ function getFlowStatusColor(status) { } return 'info'; } -export default function FlowRow(props) { + +function FlowRow(props) { const formatMessage = useFormatMessage(); const contextButtonRef = React.useRef(null); const [anchorEl, setAnchorEl] = React.useState(null); @@ -113,3 +117,9 @@ export default function FlowRow(props) { ); } + +FlowRow.propTypes = { + flow: FlowPropType.isRequired, +}; + +export default FlowRow; diff --git a/packages/web/src/components/FlowStep/index.jsx b/packages/web/src/components/FlowStep/index.jsx index df987e11..8d360498 100644 --- a/packages/web/src/components/FlowStep/index.jsx +++ b/packages/web/src/components/FlowStep/index.jsx @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { useLazyQuery } from '@apollo/client'; import Stack from '@mui/material/Stack'; @@ -33,8 +34,11 @@ import { Wrapper, } from './style'; import isEmpty from 'helpers/isEmpty'; +import { StepPropType } from 'propTypes/propTypes'; + const validIcon = ; const errorIcon = ; + function generateValidationSchema(substeps) { const fieldValidations = substeps?.reduce( (allValidations, { arguments: args }) => { @@ -91,7 +95,8 @@ function generateValidationSchema(substeps) { }); return yupResolver(validationSchema); } -export default function FlowStep(props) { + +function FlowStep(props) { const { collapsed, onChange, onContinue } = props; const editorContext = React.useContext(EditorContext); const contextButtonRef = React.useRef(null); @@ -309,3 +314,15 @@ export default function FlowStep(props) { ); } + +FlowStep.propTypes = { + collapsed: PropTypes.bool, + step: StepPropType.isRequired, + index: PropTypes.number, + onOpen: PropTypes.func, + onClose: PropTypes.func, + onChange: PropTypes.func.isRequired, + onContinue: PropTypes.func, +}; + +export default FlowStep; diff --git a/packages/web/src/components/FlowStepContextMenu/index.jsx b/packages/web/src/components/FlowStepContextMenu/index.jsx index 2f11b577..e6e9e05a 100644 --- a/packages/web/src/components/FlowStepContextMenu/index.jsx +++ b/packages/web/src/components/FlowStepContextMenu/index.jsx @@ -1,9 +1,11 @@ +import PropTypes from 'prop-types'; import * as React from 'react'; import { useMutation } from '@apollo/client'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import { DELETE_STEP } from 'graphql/mutations/delete-step'; import useFormatMessage from 'hooks/useFormatMessage'; + function FlowStepContextMenu(props) { const { stepId, onClose, anchorEl, deletable } = props; const [deleteStep] = useMutation(DELETE_STEP, { @@ -32,4 +34,12 @@ function FlowStepContextMenu(props) { ); } + +FlowStepContextMenu.propTypes = { + stepId: PropTypes.string.isRequired, + onClose: PropTypes.func.isRequired, + anchorEl: PropTypes.element.isRequired, + deletable: PropTypes.bool.isRequired, +}; + export default FlowStepContextMenu; diff --git a/packages/web/src/components/TestSubstep/index.jsx b/packages/web/src/components/TestSubstep/index.jsx index 314d8cbf..6d5d0f45 100644 --- a/packages/web/src/components/TestSubstep/index.jsx +++ b/packages/web/src/components/TestSubstep/index.jsx @@ -91,8 +91,8 @@ function TestSubstep(props) { severity="error" sx={{ mb: 2, fontWeight: 500, width: '100%' }} > - {serializeErrors(error.graphQLErrors).map((error) => ( -
{error.message}
+ {serializeErrors(error.graphQLErrors).map((error, i) => ( +
{error.message}
))} )} diff --git a/packages/web/src/propTypes/propTypes.js b/packages/web/src/propTypes/propTypes.js new file mode 100644 index 00000000..6e2caa1d --- /dev/null +++ b/packages/web/src/propTypes/propTypes.js @@ -0,0 +1,479 @@ +import PropTypes from 'prop-types'; + +export const JSONValuePropType = PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.bool, + PropTypes.object, + PropTypes.array, +]); + +export const AuthenticationStepFieldPropType = PropTypes.shape({ + name: PropTypes.string, + value: PropTypes.oneOfType([PropTypes.string]), + properties: PropTypes.arrayOf( + PropTypes.shape({ + name: PropTypes.string, + value: PropTypes.string, + }), + ), +}); + +export const AuthenticationStepPropType = PropTypes.shape({ + type: PropTypes.oneOf(['mutation', 'openWithPopup']), + name: PropTypes.string, + arguments: PropTypes.arrayOf(AuthenticationStepFieldPropType), +}); + +export const FieldTextPropType = PropTypes.shape({ + key: PropTypes.string, + label: PropTypes.string, + type: PropTypes.oneOf(['string']), + required: PropTypes.bool, + readOnly: PropTypes.bool, + value: PropTypes.string, + placeholder: PropTypes.oneOfType([PropTypes.string]), + description: PropTypes.string, + docUrl: PropTypes.string, + clickToCopy: PropTypes.bool, + variables: PropTypes.bool, + dependsOn: PropTypes.arrayOf(PropTypes.string), +}); + +export const FieldDropdownSourcePropType = PropTypes.shape({ + type: PropTypes.string, + name: PropTypes.string, + arguments: PropTypes.arrayOf( + PropTypes.shape({ + name: PropTypes.string, + value: PropTypes.string, + }), + ), +}); + +export const FieldDropdownAdditionalFieldsPropType = PropTypes.shape({ + type: PropTypes.string, + name: PropTypes.string, + arguments: PropTypes.arrayOf( + PropTypes.shape({ + name: PropTypes.string, + value: PropTypes.string, + }), + ), +}); + +export const FieldDropdownOptionPropType = PropTypes.shape({ + label: PropTypes.string, + value: PropTypes.oneOfType([ + PropTypes.bool, + PropTypes.string, + PropTypes.number, + ]), +}); + +export const FieldDropdownPropType = PropTypes.shape({ + key: PropTypes.string, + label: PropTypes.string, + type: PropTypes.oneOf(['dropdown']), + required: PropTypes.bool, + readOnly: PropTypes.bool, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), + placeholder: PropTypes.oneOfType([PropTypes.string]), + description: PropTypes.string, + docUrl: PropTypes.string, + clickToCopy: PropTypes.bool, + variables: PropTypes.bool, + dependsOn: PropTypes.arrayOf(PropTypes.string), + options: PropTypes.arrayOf(FieldDropdownOptionPropType), + source: FieldDropdownSourcePropType, + additionalFields: FieldDropdownAdditionalFieldsPropType, +}); + +export const FieldsPropType = PropTypes.arrayOf( + PropTypes.oneOfType([FieldDropdownPropType, FieldTextPropType]), +); + +export const FieldDynamicPropType = PropTypes.shape({ + key: PropTypes.string, + label: PropTypes.string, + type: PropTypes.oneOf(['dynamic']), + required: PropTypes.bool, + readOnly: PropTypes.bool, + description: PropTypes.string, + value: PropTypes.arrayOf(PropTypes.object), + fields: FieldsPropType, +}); + +export const FieldPropType = PropTypes.oneOfType([ + FieldDropdownPropType, + FieldTextPropType, + FieldDynamicPropType, +]); + +export const SubstepPropType = PropTypes.shape({ + key: PropTypes.string, + name: PropTypes.string, + arguments: PropTypes.arrayOf(FieldPropType), +}); + +export const RawTriggerPropType = PropTypes.shape({ + name: PropTypes.string, + key: PropTypes.string, + type: PropTypes.oneOf(['webhook', 'polling']), + showWebhookUrl: PropTypes.bool, + pollInterval: PropTypes.number, + description: PropTypes.string, + useSingletonWebhook: PropTypes.bool, + singletonWebhookRefValueParameter: PropTypes.string, + getInterval: PropTypes.func, + run: PropTypes.func, + testRun: PropTypes.func, + registerHook: PropTypes.func, + unregisterHook: PropTypes.func, + arguments: PropTypes.arrayOf(FieldPropType), +}); + +export const TriggerPropType = PropTypes.shape({ + name: PropTypes.string, + key: PropTypes.string, + type: PropTypes.oneOf(['webhook', 'polling']), + showWebhookUrl: PropTypes.bool, + pollInterval: PropTypes.number, + description: PropTypes.string, + useSingletonWebhook: PropTypes.bool, + singletonWebhookRefValueParameter: PropTypes.string, + getInterval: PropTypes.func, + run: PropTypes.func, + testRun: PropTypes.func, + registerHook: PropTypes.func, + unregisterHook: PropTypes.func, + substeps: PropTypes.arrayOf(SubstepPropType), +}); + +export const RawActionPropType = PropTypes.shape({ + name: PropTypes.string, + key: PropTypes.string, + description: PropTypes.string, + run: PropTypes.func, + arguments: PropTypes.arrayOf(FieldPropType), +}); + +export const ActionPropType = PropTypes.shape({ + name: PropTypes.string, + key: PropTypes.string, + description: PropTypes.string, + run: PropTypes.func, + substeps: PropTypes.arrayOf(SubstepPropType), +}); + +export const AuthPropType = PropTypes.shape({ + generateAuthUrl: PropTypes.func, + verifyCredentials: PropTypes.func, + isStillVerified: PropTypes.func, + refreshToken: PropTypes.func, + verifyWebhook: PropTypes.func, + isRefreshTokenRequested: PropTypes.bool, + fields: PropTypes.arrayOf(FieldPropType), + authenticationSteps: PropTypes.arrayOf(AuthenticationStepPropType), + reconnectionSteps: PropTypes.arrayOf(AuthenticationStepPropType), + sharedAuthenticationSteps: PropTypes.arrayOf(AuthenticationStepPropType), + sharedReconnectionSteps: PropTypes.arrayOf(AuthenticationStepPropType), +}); + +export const AppPropType = PropTypes.shape({ + name: PropTypes.string, + key: PropTypes.string, + iconUrl: PropTypes.string, + docUrl: PropTypes.string, + authDocUrl: PropTypes.string, + primaryColor: PropTypes.string, + supportsConnections: PropTypes.bool, + apiBaseUrl: PropTypes.string, + baseUrl: PropTypes.string, + auth: AuthPropType, + connectionCount: PropTypes.number, + flowCount: PropTypes.number, + beforeRequest: PropTypes.arrayOf(PropTypes.func), + dynamicData: PropTypes.object, + dynamicFields: PropTypes.object, + triggers: PropTypes.arrayOf(TriggerPropType), + actions: PropTypes.arrayOf(ActionPropType), +}); + +export const ConnectionPropType = PropTypes.shape({ + id: PropTypes.string, + key: PropTypes.string, + data: PropTypes.string, + formattedData: PropTypes.object, + userId: PropTypes.string, + verified: PropTypes.bool, + count: PropTypes.number, + flowCount: PropTypes.number, + appData: AppPropType, + createdAt: PropTypes.string, + reconnectable: PropTypes.bool, + appAuthClientId: PropTypes.string, +}); + +AppPropType.connection = PropTypes.arrayOf(ConnectionPropType); + +export const ExecutionStepPropType = PropTypes.shape({ + id: PropTypes.string, + executionId: PropTypes.string, + stepId: PropTypes.string, + dataIn: PropTypes.object, + dataOut: PropTypes.object, + errorDetails: PropTypes.object, + status: PropTypes.string, + createdAt: PropTypes.string, + updatedAt: PropTypes.string, +}); + +export const FlowPropType = PropTypes.shape({ + id: PropTypes.string, + name: PropTypes.string, + userId: PropTypes.string, + active: PropTypes.bool, + status: PropTypes.oneOf(['paused', 'published', 'draft']), + createdAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), + updatedAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), + remoteWebhookId: PropTypes.string, + lastInternalId: PropTypes.func, +}); + +export const StepPropType = PropTypes.shape({ + id: PropTypes.string, + name: PropTypes.string, + flowId: PropTypes.string, + key: PropTypes.string, + appKey: PropTypes.string, + iconUrl: PropTypes.string, + webhookUrl: PropTypes.string, + type: PropTypes.oneOf(['action', 'trigger']), + connectionId: PropTypes.string, + status: PropTypes.string, + position: PropTypes.number, + parameters: PropTypes.object, + connection: ConnectionPropType, + flow: FlowPropType, + executionSteps: PropTypes.arrayOf(ExecutionStepPropType), + output: PropTypes.object, + appData: AppPropType, +}); + +ExecutionStepPropType.step = StepPropType; +FlowPropType.steps = PropTypes.arrayOf(StepPropType); + +export const ExecutionPropType = PropTypes.shape({ + id: PropTypes.string, + flowId: PropTypes.string, + flow: FlowPropType, + testRun: PropTypes.bool, + status: PropTypes.oneOf(['success', 'failure']), + executionSteps: PropTypes.arrayOf(ExecutionStepPropType), + updatedAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), + createdAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), +}); + +export const PermissionPropType = PropTypes.shape({ + id: PropTypes.string, + action: PropTypes.string, + subject: PropTypes.string, + conditions: PropTypes.arrayOf(PropTypes.string), +}); + +export const RolePropType = PropTypes.shape({ + id: PropTypes.string, + key: PropTypes.string, + name: PropTypes.string, + description: PropTypes.string, + isAdmin: PropTypes.bool, + permissions: PropTypes.arrayOf(PermissionPropType), +}); + +export const UserPropType = PropTypes.shape({ + id: PropTypes.string, + fullName: PropTypes.string, + email: PropTypes.string, + password: PropTypes.string, + connections: PropTypes.arrayOf(ConnectionPropType), + flows: PropTypes.arrayOf(FlowPropType), + steps: PropTypes.arrayOf(StepPropType), + role: RolePropType, + permissions: PropTypes.arrayOf(PermissionPropType), + createdAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), + updatedAt: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), + trialExpiryDate: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.instanceOf(Date), + ]), +}); + +export const PermissionCatalogPropType = PropTypes.shape({ + actions: PropTypes.arrayOf( + PropTypes.shape({ + label: PropTypes.string, + key: PropTypes.string, + subjects: PropTypes.arrayOf(PropTypes.string), + }), + ), + subjects: PropTypes.arrayOf( + PropTypes.shape({ + label: PropTypes.string, + key: PropTypes.string, + }), + ), + conditions: PropTypes.arrayOf( + PropTypes.shape({ + label: PropTypes.string, + key: PropTypes.string, + }), + ), +}); + +export const ConfigPropType = PropTypes.shape({ + id: PropTypes.string, + key: PropTypes.string, + value: PropTypes.object, +}); + +export const TriggerItemPropType = PropTypes.shape({ + raw: PropTypes.object, + meta: PropTypes.shape({ + internalId: PropTypes.string, + }), +}); + +export const TriggerOutputPropType = PropTypes.shape({ + data: PropTypes.arrayOf(TriggerItemPropType), + error: PropTypes.object, +}); + +export const ActionItemPropType = PropTypes.shape({ + raw: PropTypes.object, +}); + +export const IActionOutputPropType = PropTypes.shape({ + data: ActionItemPropType, + error: PropTypes.object, +}); + +export const AuthenticationPropType = PropTypes.shape({ + client: PropTypes.any, + verifyCredentials: PropTypes.func, + isStillVerified: PropTypes.func, +}); + +export const PaymentPlanPropType = PropTypes.shape({ + price: PropTypes.string, + name: PropTypes.string, + limit: PropTypes.string, + productId: PropTypes.string, +}); + +export const BillingTextCardActionPropType = PropTypes.shape({ + type: PropTypes.oneOf(['text']), + text: PropTypes.string, +}); + +export const BillingLinkCardActionPropType = PropTypes.shape({ + type: PropTypes.oneOf(['link']), + text: PropTypes.string, + src: PropTypes.string, +}); + +export const BillingCardActionPropType = PropTypes.oneOfType([ + BillingTextCardActionPropType, + BillingLinkCardActionPropType, +]); + +export const SubscriptionPropType = PropTypes.shape({ + status: PropTypes.string, + monthlyQuota: PropTypes.shape({ + title: PropTypes.string, + action: BillingCardActionPropType, + }), + nextBillDate: PropTypes.shape({ + title: PropTypes.string, + action: BillingCardActionPropType, + }), + nextBillAmount: PropTypes.shape({ + title: PropTypes.string, + action: BillingCardActionPropType, + }), +}); + +export const InvoicePropType = PropTypes.shape({ + id: PropTypes.number, + amount: PropTypes.number, + currency: PropTypes.string, + payout_date: PropTypes.string, + receipt_url: PropTypes.string, +}); + +export const SamlAuthProviderPropType = PropTypes.shape({ + id: PropTypes.string, + name: PropTypes.string, + certificate: PropTypes.string, + signatureAlgorithm: PropTypes.oneOf(['sha1', 'sha256', 'sha512']), + issuer: PropTypes.string, + entryPoint: PropTypes.string, + firstnameAttributeName: PropTypes.string, + surnameAttributeName: PropTypes.string, + emailAttributeName: PropTypes.string, + roleAttributeName: PropTypes.string, + defaultRoleId: PropTypes.string, + active: PropTypes.bool, + loginUrl: PropTypes.string, +}); + +export const SamlAuthProviderRolePropType = PropTypes.shape({ + id: PropTypes.string, + samlAuthProviderId: PropTypes.string, + roleId: PropTypes.string, + remoteRoleName: PropTypes.string, +}); + +export const AppConfigPropType = PropTypes.shape({ + id: PropTypes.string, + key: PropTypes.string, + allowCustomConnection: PropTypes.bool, + canConnect: PropTypes.bool, + canCustomConnect: PropTypes.bool, + shared: PropTypes.bool, + disabled: PropTypes.bool, +}); + +export const AppAuthClientPropType = PropTypes.shape({ + id: PropTypes.string, + name: PropTypes.string, + appConfigId: PropTypes.string, + authDefaults: PropTypes.string, + formattedAuthDefaults: PropTypes.object, + active: PropTypes.bool, +}); + +export const NotificationPropType = PropTypes.shape({ + name: PropTypes.string, + createdAt: PropTypes.string, + documentationUrl: PropTypes.string, + description: PropTypes.string, +}); diff --git a/yarn.lock b/yarn.lock index 2321a1a9..95a2c116 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5123,14 +5123,6 @@ aria-query@^5.0.0: resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz" integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" @@ -5162,17 +5154,6 @@ array-includes@^3.1.3, array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-includes@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -5196,41 +5177,6 @@ array.prototype.flatmap@^1.2.5: define-properties "^1.1.3" es-abstract "^1.19.0" -array.prototype.flatmap@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - arrify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" @@ -5285,13 +5231,6 @@ async@^3.2.3: resolved "https://registry.npmjs.org/async/-/async-3.2.3.tgz" integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -5319,13 +5258,6 @@ autoprefixer@^10.4.2: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" @@ -5850,17 +5782,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -6983,15 +6904,6 @@ defer-to-connect@^1.0.1: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" @@ -7004,15 +6916,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - defined@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" @@ -7505,107 +7408,11 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" - call-bind "^1.0.7" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.1" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-iterator-helpers@^1.0.12: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.22.4" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - has-property-descriptors "^1.0.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" - es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== -es-set-tostringtag@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" @@ -7964,28 +7771,6 @@ eslint-plugin-react@^7.27.1: semver "^6.3.0" string.prototype.matchall "^4.0.6" -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - eslint-plugin-testing-library@^5.0.1: version "5.0.4" resolved "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.0.4.tgz" @@ -8598,13 +8383,6 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" @@ -8739,31 +8517,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gauge@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" @@ -8826,17 +8584,6 @@ get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" @@ -8894,15 +8641,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - getopts@2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz" @@ -9041,13 +8779,6 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^11.0.1, globby@^11.0.2, globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -9065,13 +8796,6 @@ goober@^2.0.33: resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.13.tgz#e3c06d5578486212a76c9eba860cbc3232ff6d7c" integrity sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" @@ -9190,11 +8914,6 @@ has-bigints@^1.0.1: resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -9205,18 +8924,6 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" @@ -9234,13 +8941,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" @@ -9258,13 +8958,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" @@ -9678,15 +9371,6 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -internal-slot@^1.0.5, internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - interpret@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" @@ -9757,14 +9441,6 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -9775,13 +9451,6 @@ is-arrayish@^0.3.1: resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" @@ -9809,11 +9478,6 @@ is-buffer@~1.1.6: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" @@ -9826,13 +9490,6 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz" @@ -9847,7 +9504,7 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -9864,13 +9521,6 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" @@ -9888,13 +9538,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -9920,11 +9563,6 @@ is-lambda@^1.0.1: resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" @@ -9935,11 +9573,6 @@ is-negative-zero@^2.0.1: resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-negative-zero@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - is-npm@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" @@ -10032,23 +9665,11 @@ is-root@^2.1.0: resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-shared-array-buffer@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz" integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== -is-shared-array-buffer@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - is-ssh@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" @@ -10087,38 +9708,18 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.1, is-weakref@^1.0.2: +is-weakref@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" @@ -10131,11 +9732,6 @@ is-yarn-global@^0.3.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -10198,17 +9794,6 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - jake@^10.6.1: version "10.8.2" resolved "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz" @@ -11523,13 +11108,6 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@^5.0.1: version "5.1.0" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" @@ -12225,11 +11803,6 @@ object-inspect@^1.11.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" @@ -12258,16 +11831,6 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - object.entries@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" @@ -12277,15 +11840,6 @@ object.entries@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - object.fromentries@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" @@ -12295,15 +11849,6 @@ object.fromentries@^2.0.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.fromentries@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.3" resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz" @@ -12321,14 +11866,6 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - object.values@^1.1.0, object.values@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" @@ -12338,15 +11875,6 @@ object.values@^1.1.0, object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.values@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - objection@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/objection/-/objection-3.0.1.tgz" @@ -12929,11 +12457,6 @@ portfinder@^1.0.28: debug "^3.1.1" mkdirp "^0.5.5" -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - postcss-attribute-case-insensitive@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz" @@ -14211,19 +13734,6 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" -reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - regenerate-unicode-properties@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz" @@ -14266,16 +13776,6 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - regexpp@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" @@ -14454,15 +13954,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^2.0.0-next.4: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - responselike@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" @@ -14572,16 +14063,6 @@ rxjs@^6.6.0: dependencies: tslib "^1.9.0" -safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" - isarray "^2.0.5" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" @@ -14592,15 +14073,6 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - safe-stable-stringify@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz" @@ -14721,7 +14193,7 @@ semver@7.0.0: resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -14830,28 +14302,6 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" @@ -15330,30 +14780,6 @@ string.prototype.matchall@^4.0.6: regexp.prototype.flags "^1.3.1" side-channel "^1.0.4" -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" @@ -15362,15 +14788,6 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" @@ -15379,15 +14796,6 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -16060,50 +15468,6 @@ type-is@^1.6.4, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" @@ -16146,16 +15510,6 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - undefsafe@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" @@ -16730,45 +16084,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.14, which-typed-array@^1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz"