diff --git a/app/Root.jsx b/app/Root.jsx index a5d986e00184a2ea4f36252602fab6ef270e5914..a9129436c9989311c4458aa6cb64dbf087af9709 100644 --- a/app/Root.jsx +++ b/app/Root.jsx @@ -1,26 +1,43 @@ /* eslint-disable no-param-reassign */ import React from 'react' +// import { BrowserRouter } from 'react-router-dom' +// import PropTypes from 'prop-types' +// import { ThemeProvider } from 'styled-components' +// import { ApolloProvider } from '@apollo/react-components' +// import { ApolloClient } from 'apollo-client' +// import { WebSocketLink } from 'apollo-link-ws' +// import { split, ApolloLink } from 'apollo-link' +// import { getMainDefinition } from 'apollo-utilities' +// import { setContext } from 'apollo-link-context' +// import { +// InMemoryCache, +// IntrospectionFragmentMatcher, +// } from 'apollo-cache-inmemory' +// import { createUploadLink } from 'apollo-upload-client' +import GlobalStyle from './theme/elements/GlobalStyle' + +// import introspectionQueryResultData from './fragmentTypes.json' + import { BrowserRouter } from 'react-router-dom' import PropTypes from 'prop-types' import { ThemeProvider } from 'styled-components' -import { ApolloProvider } from '@apollo/react-components' -import { ApolloClient } from 'apollo-client' -import { WebSocketLink } from 'apollo-link-ws' -import { split, ApolloLink } from 'apollo-link' -import { getMainDefinition } from 'apollo-utilities' -import { setContext } from 'apollo-link-context' import { - InMemoryCache, - IntrospectionFragmentMatcher, -} from 'apollo-cache-inmemory' + ApolloProvider, + ApolloClient, + ApolloLink, + split, + gql, +} from '@apollo/client' +// import { ApolloClient } from 'apollo-client' +import { WebSocketLink } from '@apollo/client/link/ws' +// import { split, ApolloLink } from 'apollo-link' +import { getMainDefinition } from '@apollo/client/utilities' +import { setContext } from '@apollo/client/link/context' +import { InMemoryCache } from '@apollo/client/cache' import { createUploadLink } from 'apollo-upload-client' -import GlobalStyle from './theme/elements/GlobalStyle' -import introspectionQueryResultData from './fragmentTypes.json' - -const fragmentMatcher = new IntrospectionFragmentMatcher({ - introspectionQueryResultData, -}) +import { GET_CURRENT_USER } from './queries' +import currentRolesVar from './shared/currentRolesVar' // See https://github.com/apollographql/apollo-feature-requests/issues/6#issuecomment-465305186 export function stripTypenames(obj) { @@ -83,7 +100,25 @@ const makeApolloClient = (makeConfig, connectToWebSocket) => { } const config = { link, - cache: new InMemoryCache({ fragmentMatcher }), + cache: new InMemoryCache({ + possibleTypes: { + Identity: ['LocalIdentity', 'ExternalIdentity'], + }, + typePolicies: { + Manuscript: { + fields: { + _currentRoles: { + read(existing, { cache, args, readField }) { + const currentRoles = currentRolesVar() + const currentId = readField('id') + const r = currentRoles.find(r => r.id === currentId) + return (r && r.roles) || [] + }, + }, + }, + }, + }, + }), } return new ApolloClient(makeConfig ? makeConfig(config) : config) } diff --git a/app/app.js b/app/app.js index a2b58f454fc55c7c4f7b8ed7f3bd3eba4fb2dd6f..03597a268478f7cacbb2bf01c2cf25f89823327e 100644 --- a/app/app.js +++ b/app/app.js @@ -9,7 +9,7 @@ import theme from './theme' import { JournalProvider } from './components/xpub-journal' import { XpubProvider } from './components/xpub-with-context' -import * as journal from './config/journal' +import * as journal from '../config/journal' import routes from './routes' const history = createBrowserHistory() diff --git a/app/components/AdminPage.js b/app/components/AdminPage.js index fef8ac26882c663b4deba29a80dc9fa7dc2f4dae..114eee5766afe34b8d420fe83fb91e5dca6f6b41 100644 --- a/app/components/AdminPage.js +++ b/app/components/AdminPage.js @@ -1,11 +1,10 @@ -import React, { useContext } from 'react' +import React, { useContext, useCallback, useRef } from 'react' import styled from 'styled-components' import { compose } from 'recompose' -import { useQuery, useApolloClient } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import { withRouter, matchPath, - Router, Route, Switch, Redirect, @@ -27,9 +26,12 @@ import FormBuilderPage from '../components/component-formbuilder/src/components/ import NewSubmissionPage from '../components/component-submit/src/components/NewSubmissionPage' import { Profile } from '../components/component-profile/src' -import queries from '../graphql' +import { GET_CURRENT_USER } from '../queries' import Menu from './Menu' +import { Spinner } from './shared' + +import currentRolesVar from '../shared/currentRolesVar' const getParams = routerPath => { const path = '/journal/versions/:version' @@ -67,20 +69,47 @@ const PrivateRoute = ({ component: Component, ...rest }) => ( /> ) -const AdminPage = ({ children, history, match }) => { - const client = useApolloClient() +const updateStuff = data => { + currentRolesVar(data.currentUser._currentRoles) +} +const AdminPage = ({ children, history, match }) => { const journal = useContext(JournalContext) const [conversion] = useContext(XpubContext) - const { data } = useQuery(queries.currentUser) + // Get the current user every 5 seconds (this includes authorization info) + const { loading, error, data } = useQuery(GET_CURRENT_USER, { + pollInterval: 5000, + notifyOnNetworkStatusChange: true, + fetchPolicy: 'network-only', + // TODO: useCallback used because of bug: https://github.com/apollographql/apollo-client/issues/6301 + onCompleted: useCallback(data => updateStuff(data), []), + }) + + const previousDataRef = useRef(null) + + // Do this to prevent polling-related flicker + if (loading && !previousDataRef.current) { + return <Spinner /> + } + + let notice = '' + if (error) { + if (error.networkError) { + notice = 'You are offline.' + } else { + return <Redirect to="/login" /> + } + } + const currentUser = data && data.currentUser + previousDataRef.current = data + const { pathname } = history.location const showLinks = pathname.match(/^\/(submit|manuscript)/g) let links = [] const formBuilderLink = `/journal/admin/form-builder` - const profileLink = `/journal/profile` const homeLink = '/journal/dashboard' if (showLinks) { @@ -119,6 +148,7 @@ const AdminPage = ({ children, history, match }) => { brandLink="/journal/dashboard" loginLink="/login?next=/journal/dashboard" navLinkComponents={links} + notice={notice} user={currentUser} /> <Switch> diff --git a/app/components/Menu.js b/app/components/Menu.js index ffb5e2e8fca6f51c210e3b4fd44b3889f5038b92..f995464a9bd90b4383d914af87f8718f326ae3a9 100644 --- a/app/components/Menu.js +++ b/app/components/Menu.js @@ -1,11 +1,10 @@ import React from 'react' import styled, { css } from 'styled-components' -import PropTypes from 'prop-types' -import { override, th, grid, darken, lighten } from '@pubsweet/ui-toolkit' - -import { Icon, Action } from '@pubsweet/ui' +// import PropTypes from 'prop-types' +import { th, grid, lighten } from '@pubsweet/ui-toolkit' +import { Link } from 'react-router-dom' +import { Icon } from '@pubsweet/ui' import { UserAvatar } from '../components/component-avatar/src' -import { Link, useHistory } from 'react-router-dom' const Root = styled.nav` grid-area: menu; @@ -28,19 +27,19 @@ const Section = styled.div` // align-items: center; ` -const Logo = styled.span` - // margin: ${grid(2)} 1rem ${grid(2)} 1rem; +// const Logo = styled.span` +// // margin: ${grid(2)} 1rem ${grid(2)} 1rem; - ${override('ui.AppBar.Logo')}; -` +// ${override('ui.AppBar.Logo')}; +// ` -const LogoLink = styled(Action)` - & > * { - height: calc(${th('gridUnit')} * 6); - } +// const LogoLink = styled(Action)` +// & > * { +// height: calc(${th('gridUnit')} * 6); +// } - ${override('ui.AppBar.LogoLink')}; -` +// ${override('ui.AppBar.LogoLink')}; +// ` const NavItem = ({ className, link, name, icon }) => ( <Link className={className} to={link}> @@ -108,11 +107,18 @@ const UserInfo = styled.div` margin-left: ${grid(1)}; ` -const Menu = ({ className, loginLink = '/login', navLinkComponents, user }) => ( +const Menu = ({ + className, + loginLink = '/login', + navLinkComponents, + user, + notice, +}) => ( <Root className={className}> <Section> + {/* TODO: Place this notice (used for offline notification) better */} + {notice} <UserComponent loginLink={loginLink} user={user} /> - {navLinkComponents && navLinkComponents.map((navInfo, idx) => ( <Item @@ -129,7 +135,7 @@ const UserComponent = ({ user, loginLink }) => ( <Section> {user && ( <UserItem to="/journal/profile"> - <UserAvatar user={user} size={64} /> + <UserAvatar size={64} user={user} /> <UserInfo> {user.defaultIdentity.name || user.username} {/* ({user.username}) */} @@ -137,17 +143,17 @@ const UserComponent = ({ user, loginLink }) => ( </UserInfo> </UserItem> )} - {!user && <Item name="Login" link={loginLink} />} + {!user && <Item link={loginLink} name="Login" />} </Section> ) -Menu.propTypes = { - brandLink: PropTypes.string, - brand: PropTypes.node, - loginLink: PropTypes.string, - onLogoutClick: PropTypes.func, - user: PropTypes.object, - navLinkComponents: PropTypes.arrayOf(PropTypes.element), -} +// Menu.propTypes = { +// brandLink: PropTypes.string, +// brand: PropTypes.node, +// loginLink: PropTypes.string, +// onLogoutClick: PropTypes.func, +// user: PropTypes.object, +// navLinkComponents: PropTypes.arrayOf(PropTypes.element), +// } export default Menu diff --git a/app/components/NextPageButton/index.js b/app/components/NextPageButton/index.js index 178c3d006f7ff773d750efc9b28fab8f24d422ec..ae43bf089a3f1c61d404c1ba50a470d03bcf002e 100644 --- a/app/components/NextPageButton/index.js +++ b/app/components/NextPageButton/index.js @@ -1,7 +1,7 @@ import VisibilitySensor from 'react-visibility-sensor' import { Link } from 'react-router-dom' import React from 'react' -import PropTypes from 'prop-types' +// import PropTypes from 'prop-types' import { Spinner } from '../shared' import { HasNextPage, NextPageButton } from './style' @@ -53,14 +53,15 @@ const NextPageButtonWrapper = props => { ) } -NextPageButtonWrapper.propTypes = { - isFetchingMore: PropTypes.bool, - href: PropTypes.object, - fetchMore: PropTypes.func.isRequired, - children: PropTypes.string, - automatic: PropTypes.bool, - topOffset: PropTypes.number, - bottomOffset: PropTypes.number, -} +// TODO: Set default props +// NextPageButtonWrapper.propTypes = { +// isFetchingMore: PropTypes.bool, +// href: PropTypes.object, +// fetchMore: PropTypes.func.isRequired, +// children: PropTypes.string, +// automatic: PropTypes.bool, +// topOffset: PropTypes.number, +// bottomOffset: PropTypes.number, +// } export default NextPageButtonWrapper diff --git a/app/components/component-avatar/src/UserAvatar.js b/app/components/component-avatar/src/UserAvatar.js index 55f93f0e121c12507954bd131d6bd4a06cd6283c..d5df7987c10a37d19b0276b470cea53f06497de6 100644 --- a/app/components/component-avatar/src/UserAvatar.js +++ b/app/components/component-avatar/src/UserAvatar.js @@ -1,13 +1,10 @@ -// @flow import * as React from 'react' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import styled from 'styled-components' -// import { GET_USER } from '../../queries' -// import { UserHoverProfile } from 'src/components/hoverProfile'; +import gql from 'graphql-tag' import AvatarImage from './image' import { Container, AvatarLink, OnlineIndicator } from './style' import ConditionalWrap from '../../ConditionalWrap' -import gql from 'graphql-tag' export const GET_USER = gql` query user($id: ID, $username: String) { diff --git a/app/components/component-chat/src/Action.js b/app/components/component-chat/src/Action.js index 5e7d6bc45746c9f3bf9292a54be785d2a9b3b64c..36434c7145b2b01df027a8974f0e5ce83451eec9 100644 --- a/app/components/component-chat/src/Action.js +++ b/app/components/component-chat/src/Action.js @@ -12,9 +12,7 @@ import React from 'react' import styled, { css } from 'styled-components' -import { th, override } from '@pubsweet/ui-toolkit' - -import { Button } from '@pubsweet/ui' +import { th } from '@pubsweet/ui-toolkit' const common = css` color: ${th('colorPrimary')}; @@ -42,8 +40,6 @@ const ActionButton = styled.button` ${common}; ` -const Action = props => { - return <ActionButton {...props}>{props.children}</ActionButton> -} +const Action = props => <ActionButton {...props}>{props.children}</ActionButton> export default Action diff --git a/app/components/component-chat/src/MentionsInput/MentionsInput.jsx b/app/components/component-chat/src/MentionsInput/MentionsInput.jsx index ac03e902f11096057cdb18454e3c93ffae38dea4..3334f25748058f166fb005bc0fbef852d3b97c53 100644 --- a/app/components/component-chat/src/MentionsInput/MentionsInput.jsx +++ b/app/components/component-chat/src/MentionsInput/MentionsInput.jsx @@ -1,7 +1,7 @@ // @flow import React from 'react' import { MentionsInput, Mention } from 'react-mentions' -import { useApolloClient } from '@apollo/react-hooks' +import { useApolloClient } from '@apollo/client' import { MentionsInputStyle } from './style' import MentionSuggestion from './mentionSuggestion' import { SEARCH_USERS } from '../../../../queries' diff --git a/app/components/component-chat/src/MentionsInput/style.js b/app/components/component-chat/src/MentionsInput/style.js index cd277d83d72f913332e897a0e5d4d08ff1c0fcc0..41a8b6357e7e0a1cdb16994a77b89f1cafcff320 100644 --- a/app/components/component-chat/src/MentionsInput/style.js +++ b/app/components/component-chat/src/MentionsInput/style.js @@ -1,4 +1,4 @@ -import styled, { css } from 'styled-components' +import styled from 'styled-components' import { th } from '@pubsweet/ui-toolkit' // import theme from 'shared/theme'; diff --git a/app/components/component-chat/src/Messages/MessageRenderer.jsx b/app/components/component-chat/src/Messages/MessageRenderer.jsx index d495fb8cd77206d3e91d18c8826e286c3325bcae..03c2f6624f2abfe5113f60d896a2eae51c499844 100644 --- a/app/components/component-chat/src/Messages/MessageRenderer.jsx +++ b/app/components/component-chat/src/Messages/MessageRenderer.jsx @@ -1,7 +1,7 @@ import React from 'react' import ReactMarkdown from 'react-markdown' import htmlParser from 'react-markdown/plugins/html-parser' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import styled from 'styled-components' import { th } from '@pubsweet/ui-toolkit' diff --git a/app/components/component-chat/src/Messages/Messages.jsx b/app/components/component-chat/src/Messages/Messages.jsx index cc8e3a25b2a4ab8327cda6c51b98dadad1f71800..8ca81aaf86f06c4cd7ae419a9e21f30d83cad1f7 100644 --- a/app/components/component-chat/src/Messages/Messages.jsx +++ b/app/components/component-chat/src/Messages/Messages.jsx @@ -1,16 +1,12 @@ import React, { useEffect } from 'react' import gql from 'graphql-tag' -// import styled from 'styled-components' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import PropTypes from 'prop-types' -// import ReactMarkdown from 'react-markdown/with-html' -// import Icon from './Icon' import { UserAvatar } from '../../../component-avatar/src' import { sortAndGroupMessages } from '../../../../sortAndGroup' import NextPageButton from '../../../NextPageButton' import { convertTimestampToDate } from '../../../../shared/time-formatting' import MessageRenderer from './MessageRenderer' -// import { SmallProfileImage } from './ProfileImage' import { Timestamp, @@ -39,6 +35,15 @@ const GET_MESSAGES = gql` profilePicture online defaultIdentity { + ... on ExternalIdentity { + identifier + } + ... on LocalIdentity { + email + } + type + aff + id name } } @@ -64,6 +69,15 @@ const MESSAGES_SUBSCRIPTION = gql` profilePicture online defaultIdentity { + id + ... on ExternalIdentity { + identifier + } + ... on LocalIdentity { + email + } + type + aff name } } @@ -71,59 +85,6 @@ const MESSAGES_SUBSCRIPTION = gql` } ` -// const MESSAGES_ENHANCED_SUBSCRIPTION = gql` -// subscription messageEnhanced($channelId: ID) { -// messageEnhanced(channelId: $channelId) { -// id -// created -// updated -// content -// user { -// id -// username -// profilePicture -// online -// } -// } -// } -// ` - -// const subscribeToEnhancedMessages = (subscribeToMore, channelId) => -// subscribeToMore({ -// document: MESSAGES_ENHANCED_SUBSCRIPTION, -// variables: { channelId }, -// updateQuery: (prev, { subscriptionData }) => { -// if (!subscriptionData.data) return prev -// const { messageEnhanced } = subscriptionData.data -// const existingMessage = prev.messages.edges.find( -// ({ id }) => id === messageEnhanced.id, -// ) -// if (existingMessage) { -// return Object.assign({}, prev, { -// messages: { -// ...prev.messages, -// edges: prev.messages.edges.map(edge => { -// // Replace the optimstic update with the actual db message -// if (edge.id === existingMessage.id) -// return { -// ...edge, -// // cursor: btoa(newMessage.id), -// enhanced: subscriptionData.data.messageEnhanced.enhanced, -// } - -// return edge -// }), -// }, -// }) -// } -// return Object.assign({}, prev, { -// messages: { -// ...prev.messages, -// edges: [...prev.messages.edges, messageEnhanced], -// }, -// }) -// }, -// }) const subscribeToNewMessages = (subscribeToMore, channelId) => subscribeToMore({ diff --git a/app/components/component-chat/src/Messages/PaperEmbed.jsx b/app/components/component-chat/src/Messages/PaperEmbed.jsx index 7fe32cc02203bbc18e312e95fadbeb5e9c3dbd1c..e22b8cae6cb2a7f3e8ad3d1d9da59cbde09b1dc2 100644 --- a/app/components/component-chat/src/Messages/PaperEmbed.jsx +++ b/app/components/component-chat/src/Messages/PaperEmbed.jsx @@ -1,5 +1,5 @@ import React, { useState } from 'react' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import gql from 'graphql-tag' import styled from 'styled-components' import { th } from '@pubsweet/ui-toolkit' diff --git a/app/components/component-chat/src/SuperChatInput/SuperChatInput.jsx b/app/components/component-chat/src/SuperChatInput/SuperChatInput.jsx index 68697f73adb7cbc9ab82b19c0b223adea2cf04ab..eff4db7973a2a3ebc1cba86ba2ba4a15b15a40d3 100644 --- a/app/components/component-chat/src/SuperChatInput/SuperChatInput.jsx +++ b/app/components/component-chat/src/SuperChatInput/SuperChatInput.jsx @@ -3,7 +3,7 @@ import * as React from 'react' import { Button } from '@pubsweet/ui' import { th } from '@pubsweet/ui-toolkit' import styled from 'styled-components' -import { useMutation } from '@apollo/react-hooks' +import { useMutation } from '@apollo/client' // import compose from 'recompose/compose'; // import { connect } from 'react-redux'; diff --git a/app/components/component-chat/src/index.js b/app/components/component-chat/src/index.js index 4e371a6886f43841d52cc3c4055264311b906877..31a39bf20428c64935d42b64ae11290fb0961c09 100644 --- a/app/components/component-chat/src/index.js +++ b/app/components/component-chat/src/index.js @@ -1,9 +1,6 @@ import React from 'react' import styled from 'styled-components' import { th } from '@pubsweet/ui-toolkit' -// import { useQuery } from '@apollo/react-hooks' -// import gql from 'graphql-tag' -// import { useParams } from 'react-router-dom' import Messages from './Messages/Messages' import ChatInput from './SuperChatInput/SuperChatInput' @@ -17,21 +14,11 @@ const MessageContainer = styled.section` 'write'; ` -// const GET_CHANNEL_BY_DOI = gql` -// query findByDOI($doi: String) { -// findByDOI(doi: $doi) { -// id -// } -// } -// ` - -const Container = ({ channelId }) => { - return ( - <MessageContainer> - <Messages channelId={channelId} /> - <ChatInput channelId={channelId} /> - </MessageContainer> - ) -} +const Container = ({ channelId }) => ( + <MessageContainer> + <Messages channelId={channelId} /> + <ChatInput channelId={channelId} /> + </MessageContainer> +) export default Container diff --git a/app/components/component-dashboard/src/components/Dashboard.js b/app/components/component-dashboard/src/components/Dashboard.js index 4edda6a4ee0b34c86cb195adb771939be5093c29..221cb872ba1a6a73da87ae3ed866fdd4e5fead50 100644 --- a/app/components/component-dashboard/src/components/Dashboard.js +++ b/app/components/component-dashboard/src/components/Dashboard.js @@ -1,17 +1,11 @@ import React from 'react' -import { useQuery, useMutation } from '@apollo/react-hooks' -import { Action, Button, Icon } from '@pubsweet/ui' +import { useQuery, useMutation } from '@apollo/client' +import { Button } from '@pubsweet/ui' // import Authorize from 'pubsweet-client/src/helpers/Authorize' import queries from '../graphql/queries/' import mutations from '../graphql/mutations/' -import { - Container, - Section, - Heading, - Content, - HeadingWithAction, -} from '../style' +import { Container, Heading, HeadingWithAction, Placeholder } from '../style' import EditorItem from './sections/EditorItem' import OwnerItem from './sections/OwnerItem' import ReviewerItem from './sections/ReviewerItem' @@ -23,6 +17,8 @@ import { SectionContent, } from '../../../shared' +import hasRole from '../../../../shared/hasRole' + const updateReviewer = (proxy, { data: { reviewerResponse } }) => { const id = reviewerResponse.object.objectId const data = proxy.readQuery({ @@ -45,7 +41,7 @@ const Dashboard = ({ history, ...props }) => { // const uploadManuscript = upload() // const [conversion] = useContext(XpubContext) - const { loading, data } = useQuery(queries.dashboard) + const { loading, data, error } = useQuery(queries.dashboard) const [reviewerRespond] = useMutation(mutations.reviewerResponseMutation, { // variables: { currentUserId, action, teamId }, update: updateReviewer, @@ -65,27 +61,37 @@ const Dashboard = ({ history, ...props }) => { }) if (loading) return <Spinner /> - + if (error) return error const dashboard = (data && data.manuscripts) || [] const currentUser = data && data.currentUser + const mySubmissions = dashboard.filter(submission => + hasRole(submission, 'author'), + ) + + const toReview = dashboard.filter(submission => + hasRole(submission, 'reviewer'), + ) + + const manuscriptsImEditorOf = dashboard.filter(submission => + hasRole(submission, ['seniorEditor', 'handlingEditor']), + ) + return ( <Container> <HeadingWithAction> <Heading>Dashboard</Heading> <Button onClick={() => history.push('/journal/newSubmission')} primary> - {/* <Icon>plus</Icon> */}+ New submission + + New submission </Button> </HeadingWithAction> - {!dashboard.length && <Section>Nothing to do at the moment.</Section>} - {/* <Authorize object={dashboard} operation="can view my submission section"> */} - {dashboard.length > 0 ? ( - <SectionContent> - <SectionHeader> - <Title>My Submissions</Title> - </SectionHeader> - {dashboard.map(submission => ( + <SectionContent> + <SectionHeader> + <Title>My Submissions</Title> + </SectionHeader> + {dashboard.length > 0 ? ( + mySubmissions.map(submission => ( <SectionRow key={`submission-${submission.id}`}> <OwnerItem deleteManuscript={() => @@ -97,18 +103,17 @@ const Dashboard = ({ history, ...props }) => { version={submission} /> </SectionRow> - ))} - </SectionContent> - ) : null} - {/* </Authorize> - <Authorize object={dashboard} operation="can view review section"> */} - {dashboard.length > 0 ? ( - <SectionContent> - <SectionHeader> - <Title>To Review</Title> - </SectionHeader> - - {dashboard.map(review => ( + )) + ) : ( + <Placeholder>You have not submitted any manuscripts yet</Placeholder> + )} + </SectionContent> + <SectionContent> + <SectionHeader> + <Title>To Review</Title> + </SectionHeader> + {toReview.length > 0 ? ( + toReview.map(review => ( <SectionRow key={review.id}> <ReviewerItem currentUser={currentUser} @@ -117,25 +122,30 @@ const Dashboard = ({ history, ...props }) => { version={review} /> </SectionRow> - ))} - </SectionContent> - ) : null} - {/* </Authorize> */} + )) + ) : ( + <Placeholder>You have not been assigned any reviews yet</Placeholder> + )} + </SectionContent> - {/* <Authorize object={dashboard} operation="can view my manuscripts section"> */} - {dashboard.length > 0 ? ( - <SectionContent> - <SectionHeader> - <Title>Manuscripts I'm editor of</Title> - </SectionHeader> - {dashboard.map(manuscript => ( + <SectionContent> + <SectionHeader> + <Title>Manuscripts I'm editor of</Title> + </SectionHeader> + {manuscriptsImEditorOf.length > 0 ? ( + manuscriptsImEditorOf.map(manuscript => ( <SectionRow key={`manuscript-${manuscript.id}`}> <EditorItem version={manuscript} /> </SectionRow> - ))} - </SectionContent> - ) : null} - {/* </Authorize> */} + )) + ) : ( + <SectionRow> + <Placeholder> + You are not an editor of any manuscript yet + </Placeholder> + </SectionRow> + )} + </SectionContent> </Container> ) } diff --git a/app/components/component-dashboard/src/components/Reviews.js b/app/components/component-dashboard/src/components/Reviews.js index 5a70702a70d667910401e01fc0fe27555c37d599..ea24946941be15da7ddbe5242bc22baa9bda2be6 100644 --- a/app/components/component-dashboard/src/components/Reviews.js +++ b/app/components/component-dashboard/src/components/Reviews.js @@ -1,9 +1,9 @@ import React from 'react' import styled from 'styled-components' import { sumBy } from 'lodash' -import { JournalContext } from '../../../xpub-journal' import { Badge } from '@pubsweet/ui' import { th } from '@pubsweet/ui-toolkit' +import { JournalContext } from '../../../xpub-journal' const Root = styled.div` display: inline-flex; @@ -29,7 +29,7 @@ const getUserFromTeam = (version, role) => { } const countStatus = (version, status) => { - const teamMember = getUserFromTeam(version, 'reviewerEditor') + const teamMember = getUserFromTeam(version, 'reviewer') if (status === 'rejected' || status === 'invited') { return sumBy(teamMember, member => (member.status === status ? 1 : 0)) diff --git a/app/components/component-dashboard/src/components/sections/EditorItem.js b/app/components/component-dashboard/src/components/sections/EditorItem.js index a5b965f2c503e6d139c688c380cccb3c790519d2..dcc6d539ea3deaf6f1b557d0fd67f990d67210d4 100644 --- a/app/components/component-dashboard/src/components/sections/EditorItem.js +++ b/app/components/component-dashboard/src/components/sections/EditorItem.js @@ -1,9 +1,7 @@ import React from 'react' - import styled from 'styled-components' -// import Authorize from 'pubsweet-client/src/helpers/Authorize' import { Action, ActionGroup } from '@pubsweet/ui' -import { Item, Header, Body, StatusBadge } from '../../style' +import { Item, StatusBadge } from '../../style' import Meta from '../metadata/Meta' import MetadataSections from '../metadata/MetadataSections' import MetadataType from '../metadata/MetadataType' diff --git a/app/components/component-dashboard/src/components/sections/OwnerItem.js b/app/components/component-dashboard/src/components/sections/OwnerItem.js index 0fb2012fcb0e85eda8b2a511e89bb6e317ff314b..9fb9fb2c4bdbeb04641f34d3235721cdf8f914b5 100644 --- a/app/components/component-dashboard/src/components/sections/OwnerItem.js +++ b/app/components/component-dashboard/src/components/sections/OwnerItem.js @@ -1,10 +1,6 @@ import React from 'react' -import { pickBy } from 'lodash' - import { Action, ActionGroup } from '@pubsweet/ui' -// import Authorize from 'pubsweet-client/src/helpers/Authorize' - -import { Item, Header, Body, StatusBadge } from '../../style' +import { Item, StatusBadge } from '../../style' import VersionTitle from './VersionTitle' const OwnerItem = ({ version, journals, deleteManuscript }) => { @@ -30,33 +26,18 @@ const OwnerItem = ({ version, journals, deleteManuscript }) => { ), } - const unauthorized = ( - <ActionGroup> - {Object.values(pickBy(actionButtons, (value, key) => key !== 'delete'))} - </ActionGroup> - ) - - const actions = ( - // <Authorize - // object={version} - // operation="can delete manuscript" - // unauthorized={unauthorized} - // > - <ActionGroup>{Object.values(actionButtons)}</ActionGroup> - // </Authorize> - ) + const actions = <ActionGroup>{Object.values(actionButtons)}</ActionGroup> return ( - // <Authorize object={[version]} operation="can view my submission section"> <Item> <div> {' '} <StatusBadge minimal status={version.status} /> + {JSON.stringify(version._currentRoles)} <VersionTitle version={version} /> </div> {actions} </Item> - // </Authorize> ) } diff --git a/app/components/component-dashboard/src/components/sections/ReviewerItem.js b/app/components/component-dashboard/src/components/sections/ReviewerItem.js index 344c1bfaae713d10ff07c3c570930f7865096902..d2fa115295cfd673c9e8e01e02f6df329b8cba84 100644 --- a/app/components/component-dashboard/src/components/sections/ReviewerItem.js +++ b/app/components/component-dashboard/src/components/sections/ReviewerItem.js @@ -3,7 +3,6 @@ import { Button } from '@pubsweet/ui' // import Authorize from 'pubsweet-client/src/helpers/Authorize' import { Item, - Body, Divider, Links, LinkContainer, @@ -20,7 +19,7 @@ import VersionTitle from './VersionTitle' const ReviewerItem = ({ version, journals, currentUser, reviewerRespond }) => { const team = - (version.teams || []).find(team => team.role === 'reviewerEditor') || {} + (version.teams || []).find(team => team.role === 'reviewer') || {} const currentMember = team.members && @@ -29,25 +28,20 @@ const ReviewerItem = ({ version, journals, currentUser, reviewerRespond }) => { // Enable that when Team Models is updated // const { status } = - // getUserFromTeam(version, 'reviewerEditor').filter( + // getUserFromTeam(version, 'reviewer').filter( // member => member.id === currentUser.id, // )[0] || {} - const review = - (version.reviews || []).find( - review => - currentUser && - review.user && - review.user.id === currentUser.id && - !review.isDecision, - ) || {} + // const review = + // (version.reviews || []).find( + // review => + // currentUser && + // review.user && + // review.user.id === currentUser.id && + // !review.isDecision, + // ) || {} return ( - // <Authorize - // key={`${review.id}`} - // object={[version]} - // operation="can view review section" - // > <Item> <VersionTitle version={version} /> @@ -101,7 +95,6 @@ const ReviewerItem = ({ version, journals, currentUser, reviewerRespond }) => { )} {status === 'rejected' && 'rejected'} </Item> - // </Authorize> ) } diff --git a/app/components/component-dashboard/src/graphql/queries/index.js b/app/components/component-dashboard/src/graphql/queries/index.js index 86cf636dfb4e1f90a57a84030dffee966be88164..1b45a6149ad022cf6d15961d793e6e9f506e7d68 100644 --- a/app/components/component-dashboard/src/graphql/queries/index.js +++ b/app/components/component-dashboard/src/graphql/queries/index.js @@ -59,6 +59,7 @@ export default { date } } + _currentRoles @client } } `, diff --git a/app/components/component-dashboard/src/style.js b/app/components/component-dashboard/src/style.js index da125ae71d89f1d274aba4fb617aefc0b5b5cb4e..a26994e622dc676cb09a5e561ae11289cfed7049 100644 --- a/app/components/component-dashboard/src/style.js +++ b/app/components/component-dashboard/src/style.js @@ -76,3 +76,11 @@ export const HeadingWithAction = styled.div` ` export { StatusBadge } from '../../shared' + +export const Placeholder = styled.div` + display: grid; + place-items: center; + color: ${th('colorTextPlaceholder')}; + height: 100%; + padding: 4em; +` diff --git a/app/components/component-formbuilder/src/components/FormBuilderPage.js b/app/components/component-formbuilder/src/components/FormBuilderPage.js index 57c20bb5a80f40658b4f3cb38418e76f26360ea3..9cfb45edbf88a31a577329ef35ea428ac5dfa572 100644 --- a/app/components/component-formbuilder/src/components/FormBuilderPage.js +++ b/app/components/component-formbuilder/src/components/FormBuilderPage.js @@ -1,5 +1,5 @@ import { compose, withState, withHandlers, withProps } from 'recompose' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import { withLoader } from 'pubsweet-client' diff --git a/app/components/component-formbuilder/src/components/builderComponents/Menu.js b/app/components/component-formbuilder/src/components/builderComponents/Menu.js index f1b66b0c532a4d6c5e90d085daa6b6b4307a7197..f57c02e427b6dea710d464d18388785c606680b6 100644 --- a/app/components/component-formbuilder/src/components/builderComponents/Menu.js +++ b/app/components/component-formbuilder/src/components/builderComponents/Menu.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react' +import React from 'react' import { Select, TextField, ValidatedFieldFormik } from '@pubsweet/ui' // import { compose, withState, withHandlers } from 'recompose' import { Legend, Section } from '../styles' diff --git a/app/components/component-login/src/Login.jsx b/app/components/component-login/src/Login.jsx index dab9a14201a4eb806691b39b532ff2d2b730251d..9fd99f091f431bfbd4b8bbba646a120f0c80cc52 100644 --- a/app/components/component-login/src/Login.jsx +++ b/app/components/component-login/src/Login.jsx @@ -7,6 +7,7 @@ import { th, grid, lighten } from '@pubsweet/ui-toolkit' import { CenteredColumn, H1, Button } from '@pubsweet/ui' import styled from 'styled-components' import { Section } from '../../shared' +import { Placeholder } from '../../component-chat/src/Messages/style' const getNextUrl = () => { const url = new URL(window.location.href) @@ -56,7 +57,11 @@ const LoginButton = styled(Button)` // TODO: Shared? const Container = styled.div` - background: linear-gradient(134deg, ${th('colorPrimary')}, ${lighten('colorPrimary', 0.3)}); + background: linear-gradient( + 134deg, + ${th('colorPrimary')}, + ${lighten('colorPrimary', 0.3)} + ); height: 100vh; display: grid; place-items: center; @@ -66,35 +71,39 @@ const Content = styled.div` border-radius: ${th('borderRadius')}; box-shadow: ${th('boxShadow')}; padding: ${grid(4)}; - max-width: 30em; + max-width: 40em; background: ${th('colorBackground')}; text-align: center; h1 { margin-bottom: ${grid(2)}; } + margin-bottom: 1rem; ` +const Centered = styled.div` + text-align: center; +` -const ORCIDIcon = ({className}) => ( +const ORCIDIcon = ({ className }) => ( <span className={className}> - <svg viewBox="0 0 256 256"> - <path - d="M256,128c0,70.7-57.3,128-128,128C57.3,256,0,198.7,0,128C0,57.3,57.3,0,128,0C198.7,0,256,57.3,256,128z" - fill="#A6CE39" - /> - <g> - <path d="M86.3,186.2H70.9V79.1h15.4v48.4V186.2z" fill="#FFFFFF" /> - <path - d="M108.9,79.1h41.6c39.6,0,57,28.3,57,53.6c0,27.5-21.5,53.6-56.8,53.6h-41.8V79.1z M124.3,172.4h24.5 c34.9,0,42.9-26.5,42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z" - fill="#FFFFFF" - /> + <svg viewBox="0 0 256 256"> <path - d="M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1 C84.2,46.7,88.7,51.3,88.7,56.8z" - fill="#FFFFFF" + d="M256,128c0,70.7-57.3,128-128,128C57.3,256,0,198.7,0,128C0,57.3,57.3,0,128,0C198.7,0,256,57.3,256,128z" + fill="#A6CE39" /> - </g> - </svg> + <g> + <path d="M86.3,186.2H70.9V79.1h15.4v48.4V186.2z" fill="#FFFFFF" /> + <path + d="M108.9,79.1h41.6c39.6,0,57,28.3,57,53.6c0,27.5-21.5,53.6-56.8,53.6h-41.8V79.1z M124.3,172.4h24.5 c34.9,0,42.9-26.5,42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z" + fill="#FFFFFF" + /> + <path + d="M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1 C84.2,46.7,88.7,51.3,88.7,56.8z" + fill="#FFFFFF" + /> + </g> + </svg> </span> ) @@ -123,23 +132,31 @@ const Login = ({ logo = null, ...props }) => { return <Redirect to={redirectLink} /> } + const journalName = config.journal.metadata.name return redirectLink ? ( <Redirect to={redirectLink} /> ) : ( <Container> - <Content> - <H1>Login to Kotahi</H1> - - Kotahi uses ORCID <StyledORCIDIcon /> to identify authors and staff. Login with your - ORCID account below or{' '} + <Centered> + <Content> + {journalName === 'Aperture' && ( + <img src="/public/logo-aperture.png" /> + )} + <H1>Login to {journalName}</H1> + {journalName} uses ORCID <StyledORCIDIcon /> to identify authors and + staff. Login with your ORCID account below or{' '} <a href="https://orcid.org/signin">register at the ORCID website.</a> - <LoginButton onClick={() => window.location = "/auth/orcid"} primary> - Login with ORCID - </LoginButton> - </Content> - + <LoginButton + onClick={() => (window.location = '/auth/orcid')} + primary + > + Login with ORCID + </LoginButton> + </Content> + <div>Powered by Kotahi</div> + </Centered> </Container> ) } -export default Login \ No newline at end of file +export default Login diff --git a/app/components/component-manuscript/src/components/Manuscript.js b/app/components/component-manuscript/src/components/Manuscript.js index a939e8ae2a7ae8a91ee0402b33862df1c70eace9..1cdbedf59e8dba9586c85f958f1d7b081a6f4102 100644 --- a/app/components/component-manuscript/src/components/Manuscript.js +++ b/app/components/component-manuscript/src/components/Manuscript.js @@ -7,9 +7,9 @@ import Wax from '../../../wax-collab/src/Editoria' import MessageContainer from '../../../component-chat/src' import { Spinner } from '../../../shared' -const options = { - // schema: new CreateSchema(XpubSchema), -} +// const options = { +// // schema: new CreateSchema(XpubSchema), +// } const Info = styled.span` padding: 0; diff --git a/app/components/component-manuscript/src/components/ManuscriptPage.js b/app/components/component-manuscript/src/components/ManuscriptPage.js index 39387f32b092fbca0da81276b225aebd08a28eef..2d1847f503119b2b5ea93811d549324d4b1a34c1 100644 --- a/app/components/component-manuscript/src/components/ManuscriptPage.js +++ b/app/components/component-manuscript/src/components/ManuscriptPage.js @@ -1,5 +1,5 @@ import { compose, withProps } from 'recompose' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import { withLoader } from 'pubsweet-client' diff --git a/app/components/component-manuscripts/src/Manuscript.jsx b/app/components/component-manuscripts/src/Manuscript.jsx index 95493e7e2e6b66e6edc164e2ede0698991555261..40ee291243c384716a9050955d278d038e398612 100644 --- a/app/components/component-manuscripts/src/Manuscript.jsx +++ b/app/components/component-manuscripts/src/Manuscript.jsx @@ -1,6 +1,6 @@ import React from 'react' import gql from 'graphql-tag' -import { useMutation } from '@apollo/react-hooks' +import { useMutation } from '@apollo/client' // import { Action } from '@pubsweet/ui' import { UserAvatar } from '../../component-avatar/src' import { @@ -11,9 +11,9 @@ import { Primary, Secondary, UserInfo, - SuccessStatus, - ErrorStatus, - NormalStatus, + // SuccessStatus, + // ErrorStatus, + // NormalStatus, UserAction as Action, StatusBadge, } from './style' @@ -26,15 +26,12 @@ const DELETE_MANUSCRIPT = gql` } ` - const User = ({ manuscript }) => { const [deleteManuscript] = useMutation(DELETE_MANUSCRIPT) return ( <Row> - <Cell> - {manuscript.meta && manuscript.meta.title} - </Cell> + <Cell>{manuscript.meta && manuscript.meta.title}</Cell> <Cell>{convertTimestampToDate(manuscript.created)}</Cell> <Cell> <StatusBadge status={manuscript.status} /> @@ -46,7 +43,8 @@ const User = ({ manuscript }) => { <UserInfo> <Primary>{manuscript.submitter.defaultIdentity.name}</Primary> <Secondary> - {manuscript.submitter.email || `(${manuscript.submitter.username})`} + {manuscript.submitter.email || + `(${manuscript.submitter.username})`} </Secondary> </UserInfo> </UserCombo> diff --git a/app/components/component-manuscripts/src/Manuscripts.jsx b/app/components/component-manuscripts/src/Manuscripts.jsx index f3d89a8d8efebf2d252851ec5c6c2c5be33054de..dd3dee928e6f6d45e9e95c9b37c98c6e438ca810 100644 --- a/app/components/component-manuscripts/src/Manuscripts.jsx +++ b/app/components/component-manuscripts/src/Manuscripts.jsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' import gql from 'graphql-tag' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import Manuscript from './Manuscript' import { diff --git a/app/components/component-manuscripts/src/style.js b/app/components/component-manuscripts/src/style.js index 6f5c40a4ad1d19e7d5b8fbd2c6ae15dd96d24505..6b132297686c80cfa6838379c7d6038ddbf4155f 100644 --- a/app/components/component-manuscripts/src/style.js +++ b/app/components/component-manuscripts/src/style.js @@ -1,6 +1,5 @@ import styled from 'styled-components' import { Action } from '@pubsweet/ui' -import { th, grid } from '@pubsweet/ui-toolkit' export { Row, diff --git a/app/components/component-profile/src/ChangeUsername.jsx b/app/components/component-profile/src/ChangeUsername.jsx index ea707cca30d53ca3a4b0f81e695661779c9a4397..6c981758d7d287104baa484b98804e245b2693e8 100644 --- a/app/components/component-profile/src/ChangeUsername.jsx +++ b/app/components/component-profile/src/ChangeUsername.jsx @@ -1,7 +1,7 @@ import React, { useState } from 'react' import PropTypes from 'prop-types' import gql from 'graphql-tag' -import { useMutation } from '@apollo/react-hooks' +import { useMutation } from '@apollo/client' import { TextField, Button } from '@pubsweet/ui' import { th } from '@pubsweet/ui-toolkit' import styled from 'styled-components' diff --git a/app/components/component-profile/src/Profile.jsx b/app/components/component-profile/src/Profile.jsx index 957788567f94c52a5a6d3681283dffa57616cadd..a137940b612b238a9e0cd3986bba83dadf09d2be 100644 --- a/app/components/component-profile/src/Profile.jsx +++ b/app/components/component-profile/src/Profile.jsx @@ -3,7 +3,7 @@ import { Button, Action } from '@pubsweet/ui' // import { th } from '@pubsweet/ui-toolkit' // import styled from 'styled-components' import gql from 'graphql-tag' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import { useDropzone } from 'react-dropzone' import { Spinner } from '../../shared' diff --git a/app/components/component-profile/src/index.js b/app/components/component-profile/src/index.js index a09beba600af3781eae8ceff3b005052aa5fc878..fbc20f8175866145074b6fb581e819ae373ddcdd 100644 --- a/app/components/component-profile/src/index.js +++ b/app/components/component-profile/src/index.js @@ -1,2 +1,3 @@ import Profile from './Profile' + export { Profile } diff --git a/app/components/component-review/src/components/DecisionPage.js b/app/components/component-review/src/components/DecisionPage.js index 9e532ee08eb41b0f5064d8d1aa4db54a33d4426e..a157147ae6ab7a55917164b2bf302bc1b679fd41 100644 --- a/app/components/component-review/src/components/DecisionPage.js +++ b/app/components/component-review/src/components/DecisionPage.js @@ -3,8 +3,7 @@ import moment from 'moment' import { Tabs } from '@pubsweet/ui' import { Formik } from 'formik' -import gql from 'graphql-tag' -import { useMutation, useQuery } from '@apollo/react-hooks' +import { useMutation, useQuery, gql } from '@apollo/client' import DecisionForm from './decision/DecisionForm' import DecisionReviews from './decision/DecisionReviews' import AssignEditorsReviewers from './assignEditors/AssignEditorsReviewers' @@ -12,7 +11,7 @@ import AssignEditor from './assignEditors/AssignEditor' import ReviewMetadata from './metadata/ReviewMetadata' import Decision from './decision/Decision' // import EditorSection from './EditorSection' -import { AdminSection, Columns, Manuscript, Chat, TabsContainer } from './style' +import { AdminSection, Columns, Manuscript, Chat } from './style' // const addEditor = (manuscript, label) => ({ // content: <EditorSection manuscript={manuscript} />, @@ -161,20 +160,20 @@ const uploadReviewFilesMutation = gql` } ` -const createFileMutation = gql` - mutation($file: Upload!) { - createFile(file: $file) { - id - created - label - filename - fileType - mimeType - size - url - } - } -` +// const createFileMutation = gql` +// mutation($file: Upload!) { +// createFile(file: $file) { +// id +// created +// label +// filename +// fileType +// mimeType +// size +// url +// } +// } +// ` const makeDecisionMutation = gql` mutation($id: ID!, $decision: String) { @@ -185,28 +184,28 @@ const makeDecisionMutation = gql` } ` -const updateCacheForFileCreation = (proxy, { data: { createFile } }) => { - const data = proxy.readQuery({ - query, - variables: { - id: match.params.version, - }, - }) - - data.manuscript.reviews.map(review => { - if (review.id === file.objectId) { - review.comments.map(comment => { - if (comment.type === createFile.fileType) { - comment.files = [createFile] - } - return comment - }) - } - return review - }) - - proxy.writeQuery({ query, data }) -} +// const updateCacheForFileCreation = (proxy, { data: { createFile } }) => { +// const data = proxy.readQuery({ +// query, +// variables: { +// id: match.params.version, +// }, +// }) + +// data.manuscript.reviews.map(review => { +// if (review.id === file.objectId) { +// review.comments.map(comment => { +// if (comment.type === createFile.fileType) { +// comment.files = [createFile] +// } +// return comment +// }) +// } +// return review +// }) + +// proxy.writeQuery({ query, data }) +// } // const createFile = file => { @@ -280,17 +279,17 @@ const decisionSections = ({ return decisionSections } -const editorSections = ({ manuscript }) => { - const editorSections = [] - const manuscriptVersions = manuscript.manuscriptVersions || [] - manuscriptVersions.forEach(manuscript => { - editorSections.push(addEditor(manuscript, dateLabel(manuscript.updated))) - }, []) +// const editorSections = ({ manuscript }) => { +// const editorSections = [] +// const manuscriptVersions = manuscript.manuscriptVersions || [] +// manuscriptVersions.forEach(manuscript => { +// editorSections.push(addEditor(manuscript, dateLabel(manuscript.updated))) +// }, []) - if (manuscript.status !== 'revising') { - editorSections.push(addEditor(manuscript, dateLabel())) - } -} +// if (manuscript.status !== 'revising') { +// editorSections.push(addEditor(manuscript, dateLabel())) +// } +// } const DecisionPage = ({ match }) => { // Hooks from the old world @@ -312,7 +311,7 @@ const DecisionPage = ({ match }) => { if (loading) return <Spinner /> if (error) return `Error! ${error.message}` - const manuscript = data.manuscript + const { manuscript } = data // Protect if channels don't exist for whatever reason let channelId @@ -326,15 +325,15 @@ const DecisionPage = ({ match }) => { file, }, }).then(({ data }) => { - const newFile = { - url: data.upload.url, - filename: file.name, - size: file.size, - object: 'Review', - objectId: updateReview.id, - fileType: type, - } - createFile(newFile) + // const newFile = { + // url: data.upload.url, + // filename: file.name, + // size: file.size, + // object: 'Review', + // objectId: updateReview.id, + // fileType: type, + // } + // createFile(newFile) }) const updateReview = (data, file) => { diff --git a/app/components/component-review/src/components/ReviewPage.js b/app/components/component-review/src/components/ReviewPage.js index 0acc2b86393b5c5387175031afeebbf782cb053c..99cb6ff80f674da0003f56d42e6b57b74f988944 100644 --- a/app/components/component-review/src/components/ReviewPage.js +++ b/app/components/component-review/src/components/ReviewPage.js @@ -1,9 +1,7 @@ import React from 'react' -// import { compose, withProps } from 'recompose' -import { useMutation, useQuery } from '@apollo/react-hooks' +import { useMutation, useQuery } from '@apollo/client' import gql from 'graphql-tag' import { Formik } from 'formik' -// import { withLoader } from 'pubsweet-client' import { cloneDeep } from 'lodash' import { getCommentContent } from './review/util' import ReviewLayout from '../components/review/ReviewLayout' @@ -191,7 +189,7 @@ export default ({ match, ...props }) => { const [updateReviewMutation] = useMutation(updateReviewMutationQuery) // File upload - const [uploadReviewFiles] = useMutation(uploadReviewFilesMutation) + // const [uploadReviewFiles] = useMutation(uploadReviewFilesMutation) const [updateTeam] = useMutation(updateTeamMutation) @@ -235,7 +233,7 @@ export default ({ match, ...props }) => { if (loading) return <Spinner /> if (error) return `Error! ${error.message}` - const manuscript = data.manuscript + const { manuscript } = data const channelId = manuscript.channels.find(c => c.type === 'editorial').id const review = @@ -245,10 +243,11 @@ export default ({ match, ...props }) => { )) || {} + // eslint-disable-next-line const status = ( ( - (manuscript.teams.find(team => team.role === 'reviewerEditor') || {}) - .status || [] + (manuscript.teams.find(team => team.role === 'reviewer') || {}).status || + [] ).find(status => status.user === currentUser.id) || {} ).status @@ -311,7 +310,7 @@ export default ({ match, ...props }) => { const completeReview = history => { const team = cloneDeep(manuscript.teams).find( - team => team.role === 'reviewerEditor', + team => team.role === 'reviewer', ) team.members = team.members.map(m => { if (m.user.id === currentUser.id) { @@ -434,7 +433,7 @@ export default ({ match, ...props }) => { // ) || {}, // status: ( // ( -// (manuscript.teams.find(team => team.role === 'reviewerEditor') || {}) +// (manuscript.teams.find(team => team.role === 'reviewer') || {}) // .status || [] // ).find(status => status.user === currentUser.id) || {} // ).status, @@ -495,7 +494,7 @@ export default ({ match, ...props }) => { // }), // completeReview: history => { // const team = cloneDeep(manuscript.teams).find( -// team => team.role === 'reviewerEditor', +// team => team.role === 'reviewer', // ) // team.members = team.members.map(m => { // if (m.user.id === currentUser.id) { diff --git a/app/components/component-review/src/components/ReviewersPage.js b/app/components/component-review/src/components/ReviewersPage.js index f94c6319f0fffc6c2293c7ce7cc4eb36521b5eb0..6331ff1f7fb497afcc8ad5f89de5ad5bb67da522 100644 --- a/app/components/component-review/src/components/ReviewersPage.js +++ b/app/components/component-review/src/components/ReviewersPage.js @@ -1,6 +1,6 @@ import { compose, withProps } from 'recompose' import { withFormik } from 'formik' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import { withLoader } from 'pubsweet-client' import { omit } from 'lodash' @@ -142,15 +142,14 @@ const handleSubmit = ( { user }, { props: { manuscript, updateTeamMutation, createTeamMutation, match } }, ) => { - const team = - manuscript.teams.find(team => team.role === 'reviewerEditor') || {} + const team = manuscript.teams.find(team => team.role === 'reviewer') || {} const teamAdd = { objectId: manuscript.id, objectType: 'Manuscript', // status: [{ user: user.id, status: 'invited' }], - name: 'Reviewer Editor', - role: 'reviewerEditor', + name: 'Reviewers', + role: 'reviewer', members: [{ user: { id: user.id }, status: 'invited' }], } if (team.id) { @@ -207,7 +206,7 @@ export default compose( const reviewersTeam = teams.find( team => - team.role === 'reviewerEditor' && + team.role === 'reviewer' && team.object.objectId === manuscript.id && team.object.objectType === 'Manuscript', ) || {} diff --git a/app/components/component-review/src/components/assignEditors/AssignEditor.js b/app/components/component-review/src/components/assignEditors/AssignEditor.js index a7f634cd130b0888176aa0557558ff2af8e42b00..51cd4ab4d846021f406c697da7a401ad354a768d 100644 --- a/app/components/component-review/src/components/assignEditors/AssignEditor.js +++ b/app/components/component-review/src/components/assignEditors/AssignEditor.js @@ -3,7 +3,7 @@ import config from 'config' import { compose, withProps } from 'recompose' import { cloneDeep, get } from 'lodash' import { Menu } from '@pubsweet/ui' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import { withLoader } from 'pubsweet-client' diff --git a/app/components/component-review/src/components/assignEditors/AssignEditor.md b/app/components/component-review/src/components/assignEditors/AssignEditor.md deleted file mode 100644 index 49085706311761ea72d1fda712a31c5b85ccf935..0000000000000000000000000000000000000000 --- a/app/components/component-review/src/components/assignEditors/AssignEditor.md +++ /dev/null @@ -1,92 +0,0 @@ -A drop-down menu for assigning an editor to a project. - -```js -const { JournalProvider } = require('xpub-journal') -const journal = require('@pubsweet/styleguide/config/journal') - -const project = { - id: faker.random.uuid(), -} - -const team = { - members: [], -} - -const manuscriptTemplate = () => ({ - id: faker.random.uuid(), - teams: [ - { - id: faker.random.uuid(), - role: 'reviewerEditor', - name: 'reviewer', - object: { - id: faker.random.uuid(), - __typename: 'Manuscript', - }, - objectType: 'manuscript', - members: [ - { - user: { id: 1 }, - }, - ], - }, - ], - meta: { - title: faker.lorem.sentence(25), - abstract: faker.lorem.sentence(100), - articleType: 'original-research', - declarations: { - openData: 'yes', - openPeerReview: 'no', - preregistered: 'yes', - previouslySubmitted: 'yes', - researchNexus: 'no', - streamlinedReview: 'no', - }, - }, - decision: { - id: faker.random.uuid(), - comments: [{ type: 'note', content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - status: '<p>This is a decision</p>', - user: { id: 1 }, - }, - reviews: [ - { - comments: [{ content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - recommendation: 'revise', - user: { id: 1, username: 'test user' }, - }, - ], -}) - -const manuscript = Object.assign({}, manuscriptTemplate()) - -const options = [ - { - value: faker.random.uuid(), - label: faker.internet.userName(), - }, - { - value: faker.random.uuid(), - label: faker.internet.userName(), - }, - { - value: faker.random.uuid(), - label: faker.internet.userName(), - }, -] -;<JournalProvider journal={journal}> - <AssignEditor - manuscript={manuscript} - team={team} - teamName="Senior Editor" - teamTypeName="seniorEditor" - options={options} - addUserToTeam={value => console.log(value)} - /> -</JournalProvider> -``` diff --git a/app/components/component-review/src/components/assignEditors/AssignEditorsReviewers.js b/app/components/component-review/src/components/assignEditors/AssignEditorsReviewers.js index 5add8e65bdb2a58244e20e9b0903870669c4ad7e..2d00884c20e693911712d1323049f610a334527d 100644 --- a/app/components/component-review/src/components/assignEditors/AssignEditorsReviewers.js +++ b/app/components/component-review/src/components/assignEditors/AssignEditorsReviewers.js @@ -1,13 +1,5 @@ import React from 'react' -import styled from 'styled-components' -import { Action } from '@pubsweet/ui' -import { - Roles, - Container, - SectionHeader, - SectionRowGrid, - Title, -} from '../style' +import { Container, SectionHeader, SectionRowGrid, Title } from '../style' const AssignEditorsReviewers = ({ manuscript, AssignEditor }) => ( <Container> diff --git a/app/components/component-review/src/components/decision/DecisionForm.js b/app/components/component-review/src/components/decision/DecisionForm.js index 16e5ddaf53fc2ac8df3d5dd8b8e576588c8d0a88..b70b7f3682836669671d10164a72fcfec7262016 100644 --- a/app/components/component-review/src/components/decision/DecisionForm.js +++ b/app/components/component-review/src/components/decision/DecisionForm.js @@ -20,7 +20,6 @@ import { } from '../review/util' import { - AdminSection, Container, Title, SectionHeader, diff --git a/app/components/component-review/src/components/decision/DecisionReviews.js b/app/components/component-review/src/components/decision/DecisionReviews.js index 0416fbc03ac441be6e0fa2baddf97b13b6ce6a74..e889f256ac2e06777a3a760b81c09d791430145f 100644 --- a/app/components/component-review/src/components/decision/DecisionReviews.js +++ b/app/components/component-review/src/components/decision/DecisionReviews.js @@ -1,18 +1,17 @@ import React from 'react' +import { Action } from '@pubsweet/ui' import DecisionReview from './DecisionReview' import { Container, SectionHeader, SectionRow, Title } from '../style' -import { H1, Action } from '@pubsweet/ui' // TODO: read reviewer ordinal and name from project reviewer // const { status } = -// getUserFromTeam(manuscript, 'reviewerEditor').filter( +// getUserFromTeam(manuscript, 'reviewer').filter( // member => member.user.id === currentUser.id, // )[0] || {} // return status const getCompletedReviews = (manuscript, currentUser) => { - const team = - manuscript.teams.find(team => team.role === 'reviewerEditor') || {} + const team = manuscript.teams.find(team => team.role === 'reviewer') || {} if (!team.members) { return null } diff --git a/app/components/component-review/src/components/metadata/ReviewMetadata.js b/app/components/component-review/src/components/metadata/ReviewMetadata.js index a59f6851b053d42f2790d94f650dafc0392d68f8..25bec27634eff8829a8f23cb22c0e250db654579 100644 --- a/app/components/component-review/src/components/metadata/ReviewMetadata.js +++ b/app/components/component-review/src/components/metadata/ReviewMetadata.js @@ -6,13 +6,7 @@ import { Attachment } from '@pubsweet/ui' import form from '../../../../../storage/forms/submit.json' -import { - Container, - Title, - SectionHeader, - SectionRow, - SectionRowGrid, -} from '../style' +import { Container, Title, SectionHeader, SectionRowGrid } from '../style' const Heading = styled.span` font-weight: inherit; @@ -42,8 +36,8 @@ const Cell = styled.span` const getNote = (notes, type) => notes.find(note => note.notesType === type) || {} -const getDeclarations = (manuscript, field) => - ((manuscript.meta || {}).declarations || {})[field] +// const getDeclarations = (manuscript, field) => +// ((manuscript.meta || {}).declarations || {})[field] const getSupplementaryFiles = supplementary => (supplementary || []).filter(file => file.fileType === 'supplementary') || [] @@ -68,7 +62,7 @@ const ReviewMetadata = ({ manuscript: rawManuscript }) => { } const sortedFormElements = form.children.sort((a, b) => - parseInt(a.order || '0') > parseInt(b.order | '0') ? 1 : -1, + parseInt(a.order || '0', 10) > parseInt(b.order || '0', 10) ? 1 : -1, ) return ( diff --git a/app/components/component-review/src/components/metadata/ReviewMetadata.md b/app/components/component-review/src/components/metadata/ReviewMetadata.md deleted file mode 100644 index 7666b612eec17aaec702fcc2e584472effbb85d2..0000000000000000000000000000000000000000 --- a/app/components/component-review/src/components/metadata/ReviewMetadata.md +++ /dev/null @@ -1,63 +0,0 @@ -Project metadata, displayed at the top of the review form. - -```js -const manuscriptTemplate = () => ({ - id: faker.random.uuid(), - teams: [ - { - id: faker.random.uuid(), - role: 'reviewerEditor', - name: 'Reviewer', - object: { - id: faker.random.uuid(), - __typename: 'Manuscript', - }, - objectType: 'manuscript', - members: [ - { - user: { - id: 1, - username: 'test user', - }, - status: 'accepted', - }, - ], - }, - ], - meta: { - title: faker.lorem.sentence(25), - abstract: faker.lorem.sentence(100), - articleType: 'original-research', - declarations: { - openData: 'yes', - openPeerReview: 'no', - preregistered: 'yes', - previouslySubmitted: 'yes', - researchNexus: 'no', - streamlinedReview: 'no', - }, - }, - decision: { - id: faker.random.uuid(), - comments: [{ type: 'note', content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - status: '<p>This is a decision</p>', - user: { id: 1 }, - }, - reviews: [ - { - comments: [{ content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - recommendation: 'revise', - user: { id: 1, username: 'test user' }, - }, - ], -}) - -const manuscript = Object.assign({}, manuscriptTemplate(), { - manuscriptVersions: [manuscriptTemplate()], -}) -;<ReviewMetadata manuscript={manuscript} /> -``` diff --git a/app/components/component-review/src/components/review/ReviewForm.js b/app/components/component-review/src/components/review/ReviewForm.js index fe45ab10fcbb1fa8224f6885b7ffb4f623912186..9febfa9b5822f688285bbdd6efc257417066d8ff 100644 --- a/app/components/component-review/src/components/review/ReviewForm.js +++ b/app/components/component-review/src/components/review/ReviewForm.js @@ -1,5 +1,4 @@ import React, { useContext } from 'react' -import styled from 'styled-components' import { cloneDeep, set } from 'lodash' import { Field } from 'formik' import { NoteEditor } from 'xpub-edit' diff --git a/app/components/component-review/src/components/review/ReviewLayout.js b/app/components/component-review/src/components/review/ReviewLayout.js index 330e64203430d40af3a886cb309588f94301837c..df4b3d968bfdab9009f0bd07c3e9580e6034c8ba 100644 --- a/app/components/component-review/src/components/review/ReviewLayout.js +++ b/app/components/component-review/src/components/review/ReviewLayout.js @@ -7,7 +7,7 @@ import ReviewForm from './ReviewForm' import ReviewMetadata from '../metadata/ReviewMetadata' import Review from './Review' import EditorSection from '../decision/EditorSection' -import { Columns, Manuscript, Chat, AdminSection } from '../style' +import { Columns, Manuscript, Chat } from '../style' import MessageContainer from '../../../../component-chat/src' const addEditor = (manuscript, label) => ({ diff --git a/app/components/component-review/src/components/reviewers/ReviewerForm.md b/app/components/component-review/src/components/reviewers/ReviewerForm.md deleted file mode 100644 index 28ba3f44b2e30c6e50ac6e0bf0c41100539edef3..0000000000000000000000000000000000000000 --- a/app/components/component-review/src/components/reviewers/ReviewerForm.md +++ /dev/null @@ -1,40 +0,0 @@ -A form for inviting a reviewer to a version of a project. - -```js -const { withFormik } = require('formik') - -const reviewerUsers = [ - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, -] - -const loadOptions = input => { - // TODO: filter users - - return Promise.resolve({ options: reviewerUsers }) -} - -const ConnectedReviewerForm = withFormik({ - initialValues: {}, - mapPropsToValues: ({ manuscript }) => manuscript, - displayName: 'reviewers', - handleSubmit: () => {}, -})(ReviewerForm) -;<ConnectedReviewerForm - loadOptions={loadOptions} - form={{ values: { teams: [] } }} -/> -``` diff --git a/app/components/component-review/src/components/reviewers/Reviewers.js b/app/components/component-review/src/components/reviewers/Reviewers.js index 913b74086776dfb12ded6b5d719ff5785d3fc3d8..2cdf32c8c50f3683e8868ab50414cda853cd712b 100644 --- a/app/components/component-review/src/components/reviewers/Reviewers.js +++ b/app/components/component-review/src/components/reviewers/Reviewers.js @@ -1,7 +1,6 @@ import React from 'react' import styled from 'styled-components' import { Link } from '@pubsweet/ui' -import { th } from '@pubsweet/ui-toolkit' import ReviewerForm from './ReviewerForm' import { Container, PaddedContent } from '../../../../shared' diff --git a/app/components/component-review/src/components/reviewers/Reviewers.md b/app/components/component-review/src/components/reviewers/Reviewers.md deleted file mode 100644 index af59ba8a78bd87cf531da1aca607646a3701194b..0000000000000000000000000000000000000000 --- a/app/components/component-review/src/components/reviewers/Reviewers.md +++ /dev/null @@ -1,146 +0,0 @@ -On the reviewers page, the handling editor can: - -- Search users by entering a username or email address. -- Add a user as a reviewer of this version (which also adds them as a reviewer of the project, if not already present). -- View a list of reviewers of this version and perform actions on each reviewer. - -```js -const { withFormik } = require('formik') -const { compose, withHandlers } = require('recompose') -const Reviewer = require('./Reviewer').default -const ReviewerForm = require('./ReviewerForm').default - -const journal = { - id: faker.random.uuid(), - reviewers: [ - { - id: faker.random.uuid(), - user: faker.random.uuid(), - }, - ], -} - -const manuscriptTemplate = () => ({ - id: faker.random.uuid(), - teams: [ - { - id: faker.random.uuid(), - role: 'reviewerEditor', - name: 'reviewer', - object: { - id: faker.random.uuid(), - __typename: 'Manuscript', - }, - objectType: 'manuscript', - members: [ - { - user: { id: 1 }, - }, - ], - }, - ], - meta: { - title: faker.lorem.sentence(25), - abstract: faker.lorem.sentence(100), - articleType: 'original-research', - declarations: { - openData: 'yes', - openPeerReview: 'no', - preregistered: 'yes', - previouslySubmitted: 'yes', - researchNexus: 'no', - streamlinedReview: 'no', - }, - }, - decision: { - id: faker.random.uuid(), - comments: [{ type: 'note', content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - status: '<p>This is a decision</p>', - user: { id: 1 }, - }, - reviews: [ - { - comments: [{ content: 'this needs review' }], - created: 'Thu Oct 11 2018', - open: false, - recommendation: 'revise', - user: { id: 1, username: 'test user' }, - }, - ], -}) - -const manuscript = Object.assign({}, manuscriptTemplate()) - -const reviewers = [ - { - status: 'invited', - user: { id: 1, username: 'test user' }, - }, -] - -const reviewerUsers = [ - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, - { - id: faker.random.uuid(), - email: faker.internet.email(), - username: faker.internet.userName(), - }, -] - -initialState = { - reviewers, -} - -const ReviewerFormContainer = compose( - withFormik({ - form: 'reviewers', - handleSubmit: ({ user }) => { - setState({ - reviewers: state.reviewers.concat({ - id: faker.random.uuid(), - reviewer: faker.random.uuid(), - events: { - invited: new Date().toISOString(), - }, - _user: user, - _reviewer: { - ordinal: null, - }, - }), - }) - }, - }), - withHandlers({ - loadOptions: props => input => - Promise.resolve({ options: props.reviewerUsers }), - }), -)(ReviewerForm) - -const ReviewerContainer = withHandlers({ - removeReviewer: props => () => - setState({ - reviewers: state.reviewers.filter( - reviewer => reviewer.id !== props.reviewer.id, - ), - }), -})(Reviewer) -;<Reviewers - ReviewerForm={ReviewerFormContainer} - Reviewer={ReviewerContainer} - journal={journal} - manuscript={manuscript} - reviewers={state.reviewers} - reviewerUsers={reviewerUsers} -/> -``` diff --git a/app/components/component-submit/src/components/FormTemplate.js b/app/components/component-submit/src/components/FormTemplate.js index 23d6c95103a125efbf1b9a4a4229eda705a27b30..6baed800ae0a1e2957ab05330ddd6472879cf433 100644 --- a/app/components/component-submit/src/components/FormTemplate.js +++ b/app/components/component-submit/src/components/FormTemplate.js @@ -1,6 +1,5 @@ import React from 'react' import styled from 'styled-components' -import { th } from '@pubsweet/ui-toolkit' import { unescape, groupBy, isArray, get, set, cloneDeep } from 'lodash' import { FieldArray } from 'formik' import * as uiComponents from '@pubsweet/ui' diff --git a/app/components/component-submit/src/components/NewSubmissionPage.jsx b/app/components/component-submit/src/components/NewSubmissionPage.jsx index 96a65839dcbfe74e13b2316494d86e2a1dd7e067..2ce2b53f61730cc79c8d318ae341cf6313c0cdce 100644 --- a/app/components/component-submit/src/components/NewSubmissionPage.jsx +++ b/app/components/component-submit/src/components/NewSubmissionPage.jsx @@ -1,5 +1,5 @@ import React from 'react' -import { useQuery, useMutation, ApolloConsumer } from '@apollo/react-hooks' +import { useQuery, useMutation, ApolloConsumer } from '@apollo/client' // import Authorize from 'pubsweet-client/src/helpers/Authorize' import config from 'config' diff --git a/app/components/component-submit/src/components/Submit.js b/app/components/component-submit/src/components/Submit.js index f31448cfe3e5738e0a3ac7b7b29946b1050601d1..79f7cdf9d1e12a7a7b3768caa9c3591f03f550e7 100644 --- a/app/components/component-submit/src/components/Submit.js +++ b/app/components/component-submit/src/components/Submit.js @@ -1,7 +1,5 @@ import React from 'react' -import styled from 'styled-components' import { Tabs } from '@pubsweet/ui' -import { th } from '@pubsweet/ui-toolkit' import moment from 'moment' import CurrentVersion from './CurrentVersion' import DecisionReviewColumn from './DecisionReviewColumn' diff --git a/app/components/component-submit/src/components/SubmitPage.js b/app/components/component-submit/src/components/SubmitPage.js index 53814f4ee0947c7b40f0e9d7168d8eb4d098a4b6..6bd3e8adab5575cc305e712363ed75d521aafcf0 100644 --- a/app/components/component-submit/src/components/SubmitPage.js +++ b/app/components/component-submit/src/components/SubmitPage.js @@ -1,6 +1,6 @@ import { debounce, cloneDeep, isEmpty, set } from 'lodash' import { compose, withProps, withState, withHandlers } from 'recompose' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import { withFormik } from 'formik' import { withLoader } from 'pubsweet-client' diff --git a/app/components/component-teams-manager/src/components/TeamsManagerPage.js b/app/components/component-teams-manager/src/components/TeamsManagerPage.js index 58a52ce95a69843da8618505e8b050107e7cb468..9a4c7cd09b5e6a982bbc196665cd1bc6813261ae 100644 --- a/app/components/component-teams-manager/src/components/TeamsManagerPage.js +++ b/app/components/component-teams-manager/src/components/TeamsManagerPage.js @@ -1,7 +1,7 @@ import { compose } from 'recompose' import { omit } from 'lodash' import config from 'config' -import { graphql } from '@apollo/react-hoc' +import { graphql } from '@apollo/client/react/hoc' import gql from 'graphql-tag' import queries from './graphql/queries' diff --git a/app/components/component-users-manager/src/User.jsx b/app/components/component-users-manager/src/User.jsx index 0d6341ba0017c25159be5b1c12285c708d1cbbae..31b144cbcfbed6efb2fd052f2f7974ea21a6e66b 100644 --- a/app/components/component-users-manager/src/User.jsx +++ b/app/components/component-users-manager/src/User.jsx @@ -1,6 +1,6 @@ import React from 'react' import gql from 'graphql-tag' -import { useMutation } from '@apollo/react-hooks' +import { useMutation } from '@apollo/client' import { Action } from '@pubsweet/ui' import { UserAvatar } from '../../component-avatar/src' import { Row, Cell, LastCell } from './style' diff --git a/app/components/component-users-manager/src/UsersManager.jsx b/app/components/component-users-manager/src/UsersManager.jsx index 83392a18c3d0eee04abc4bd0887dc74a60235678..5a09925c7978a4b2f0839064440df7e8c0540a9f 100644 --- a/app/components/component-users-manager/src/UsersManager.jsx +++ b/app/components/component-users-manager/src/UsersManager.jsx @@ -1,6 +1,6 @@ import React, { useState } from 'react' import gql from 'graphql-tag' -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' // import { Heading } from '@pubsweet/ui' import User from './User' diff --git a/app/components/wax-collab/src/EditorElements.js b/app/components/wax-collab/src/EditorElements.js index 3bb44c3fc0a663ffca99c57ac2923846f9908f14..b4a5419d609a0da2ed28e5384ac840590e0eee40 100644 --- a/app/components/wax-collab/src/EditorElements.js +++ b/app/components/wax-collab/src/EditorElements.js @@ -1,4 +1,4 @@ -import styled, { css } from 'styled-components' +import { css } from 'styled-components' /* All styles regarding ProseMirror surface and elements */ diff --git a/app/components/wax-collab/src/Editoria.js b/app/components/wax-collab/src/Editoria.js index e791dceb8bdc61498d007fe93b542332b5347078..91b2b586f155a78bde9f0ad492f0c86de778f577 100644 --- a/app/components/wax-collab/src/Editoria.js +++ b/app/components/wax-collab/src/Editoria.js @@ -1,22 +1,22 @@ import React, { Fragment } from 'react' import { Wax } from 'wax-prosemirror-core' -import styled, { createGlobalStyle } from 'styled-components' +// import styled from 'styled-components' import EditoriaLayout from './EditoriaLayout' import { config } from './config' -const StyledWax = styled(Wax)` - // .wax-surface-scroll { - // height: ${props => (props.debug ? '50vh' : '100%')}; - // } -` +// const StyledWax = styled(Wax)` +// // .wax-surface-scroll { +// // height: ${props => (props.debug ? '50vh' : '100%')}; +// // } +// ` const renderImage = file => { const reader = new FileReader() - return new Promise((accept, fail) => { - reader.onload = () => accept(reader.result) - reader.onerror = () => fail(reader.error) + return new Promise((resolve, reject) => { + reader.onload = () => resolve(reader.result) + reader.onerror = () => reject(reader.error) // Some extra delay to make the asynchronicity visible setTimeout(() => reader.readAsDataURL(file), 150) }) @@ -35,11 +35,11 @@ const Editoria = ({ content, readonly }) => ( config={config} fileUpload={file => renderImage(file)} layout={EditoriaLayout} - value={content} - readonly={readonly} placeholder="Type Something..." - // onChange={source => console.log(source)} + readonly={readonly} user={user} + // onChange={source => console.log(source)} + value={content} /> </Fragment> ) diff --git a/app/components/wax-collab/src/config/config.js b/app/components/wax-collab/src/config/config.js index 22337c1901cefe8fca00c5200777c9bebb1029cb..203896dcd031bdabd62c4d15e32708ea30bc9e14 100644 --- a/app/components/wax-collab/src/config/config.js +++ b/app/components/wax-collab/src/config/config.js @@ -17,10 +17,10 @@ import { PlaceholderService, InlineAnnotationsService, LinkService, - ListsService, - ListToolGroupService, - TablesService, - TableToolGroupService, + // ListsService, + // ListToolGroupService, + // TablesService, + // TableToolGroupService, BaseService, BaseToolGroupService, DisplayBlockLevelService, @@ -28,17 +28,17 @@ import { ImageToolGroupService, TextBlockLevelService, TextToolGroupService, - NoteService, - NoteToolGroupService, - TrackChangeService, - CommentsService, + // NoteService, + // NoteToolGroupService, + // TrackChangeService, + // CommentsService, } from 'wax-prosemirror-services' -import _ from 'lodash' +// import _ from 'lodash' import invisibles, { - space, + // space, hardBreak, - paragraph, + // paragraph, } from '@guardian/prosemirror-invisibles' // const ydoc = new Y.Doc(); diff --git a/app/components/wax-collab/src/serviceWorker.js b/app/components/wax-collab/src/serviceWorker.js index 3c99c936831875a4a88e1dea5440c12e3826c996..35729282135819f18654d9a04881ae355335dfab 100644 --- a/app/components/wax-collab/src/serviceWorker.js +++ b/app/components/wax-collab/src/serviceWorker.js @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ // This optional code is used to register a service worker. // register() is not called by default. diff --git a/app/config/journal/article-sections.js b/app/config/journal/article-sections.js deleted file mode 100644 index ab5c5e94d62fc58cf8bb7b12a7ac462f1ddba050..0000000000000000000000000000000000000000 --- a/app/config/journal/article-sections.js +++ /dev/null @@ -1,30 +0,0 @@ -export default [ - { - label: 'Cognitive Psychology', - value: 'cognitive-psychology', - }, - { - label: 'Social Psychology', - value: 'social-psychology', - }, - { - label: 'Personality Psychology', - value: 'personality-psychology', - }, - { - label: 'Developmental Psychology', - value: 'developmental-psychology', - }, - { - label: 'Clinical Psychology', - value: 'clinical-psychology', - }, - { - label: 'Organizational Behavior', - value: 'organizational-behavior', - }, - { - label: 'Methodology and Research Practice', - value: 'methodology', - }, -] diff --git a/app/config/journal/declarations.js b/app/config/journal/declarations.js deleted file mode 100644 index dca117515f29e1b3a1da05eda8390dbdabb6de2b..0000000000000000000000000000000000000000 --- a/app/config/journal/declarations.js +++ /dev/null @@ -1,101 +0,0 @@ -export default { - questions: [ - { - id: 'openData', - legend: 'Data is open ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No/Not Applicable', - value: 'no', - }, - ], - description: - 'The journal requires data be openly available, and our full policy is <a href="https://www.collabra.org/about/editorialpolicies/#open-data-open-analytic-methods-code-and-research-materials-transparency" target="_blank">here</a>. If you have exceptions that need to be considered, please click "No" and explain in your cover letter below. Please click N/A if your submission does not feature data.', - }, - { - id: 'previouslySubmitted', - legend: 'Previously submitted ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No', - value: 'no', - }, - ], - description: - 'Provide further details in your cover letter below, if necessary.', - }, - { - id: 'openPeerReview', - legend: 'Open peer review ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No', - value: 'no', - }, - ], - description: - 'Please read a description of our <a href="https://www.collabra.org/about/editorialpolicies/#open-peer-review" target="_blank">“Open Reviewâ€</a> option and select “Yes†if you choose this process.', - }, - { - id: 'streamlinedReview', - legend: 'Streamlined review ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No', - value: 'no', - }, - ], - description: - 'Please read a description of our <a href="https://www.collabra.org/about/editorialpolicies/#streamlined-review" target="_blank">“Streamlined Reviewâ€</a> option and select “Yes†if you choose this process. If “Yesâ€, please upload your ported decision letter and reviews as “Supplementary Files†below, clearly labeled.', - }, - { - id: 'researchNexus', - legend: - 'Submitted as part of the <a href="https://www.collabra.org/collections/special/" target="_blank">research nexus</a> ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No', - value: 'no', - }, - ], - description: - 'If yes, mention the name of the Research Nexus in your cover letter below.', - }, - { - id: 'preregistered', - legend: 'Pre-registered ?', - options: [ - { - label: 'Yes', - value: 'yes', - }, - { - label: 'No', - value: 'no', - }, - ], - description: - 'If any or all elements of your study have been pre-registered, click yes and ensure details are in the Acknowledgements section of your manuscript, following these <a href="https://www.collabra.org/about/editorialpolicies/#preregistration-of-studies-and-analysis-plans" target="_blank">guidelines</a>.', - }, - ], -} diff --git a/app/config/journal/editors.js b/app/config/journal/editors.js deleted file mode 100644 index 9c2affbc43fbe73e0b011e8d2a715d27581f35c1..0000000000000000000000000000000000000000 --- a/app/config/journal/editors.js +++ /dev/null @@ -1,32 +0,0 @@ -export default { - handlingEditor: [ - { - name: 'Handling Editor One', - user: 5, - }, - { - name: 'Handling Editor Two', - user: 6, - }, - ], - managingEditor: [ - { - name: 'Managing Editor One', - user: 1, - }, - { - name: 'Managing Editor Two', - user: 2, - }, - ], - seniorEditor: [ - { - name: 'Senior Editor One', - user: 3, - }, - { - name: 'Senior Editor Two', - user: 4, - }, - ], -} diff --git a/app/config/journal/index.js b/app/config/journal/index.js deleted file mode 100644 index bace9afc1f05303ab256c4582c0cedc8b1ac9f00..0000000000000000000000000000000000000000 --- a/app/config/journal/index.js +++ /dev/null @@ -1,12 +0,0 @@ -export { default as metadata } from './metadata' -export { default as declarations } from './declarations' -export { default as decisions } from './decisions' -export { default as recommendations } from './recommendations' -export { default as sections } from './sections' -export { default as articleSections } from './article-sections' -export { default as articleTypes } from './article-types' -export { default as editors } from './editors' -export { default as roles } from './roles' -export { default as reviewStatus } from './review-status' -export { default as notes } from './submit-notes' -export { default as supplementary } from './supplementary' diff --git a/app/config/journal/metadata.js b/app/config/journal/metadata.js deleted file mode 100644 index bdb2ef3289a660810bd39e48102d350d6667173b..0000000000000000000000000000000000000000 --- a/app/config/journal/metadata.js +++ /dev/null @@ -1,4 +0,0 @@ -export default { - issn: '0000-0001', - name: 'SimpleJ', -} diff --git a/app/config/journal/review-status.js b/app/config/journal/review-status.js deleted file mode 100644 index fd8c98ac00f8dadbeaf93e619bc26499ab95c7b6..0000000000000000000000000000000000000000 --- a/app/config/journal/review-status.js +++ /dev/null @@ -1 +0,0 @@ -export default ['invited', 'accepted', 'rejected', 'completed'] diff --git a/app/globals.js b/app/globals.js index 0135d12727193960a9d932afe202bfdffb303f6e..27fc9489ae164c585d255838dffbf1e2c5e390c1 100644 --- a/app/globals.js +++ b/app/globals.js @@ -12,6 +12,7 @@ export const hexa = (hex, alpha) => { return `rgb(${r}, ${g}, ${b})` } +// eslint-disable-next-line func-names export const zIndex = new (function() { // Write down a camel-cased element descriptor as the name (e.g. modal or chatInput). // Define at a component level here, then use math to handle order at a local level. diff --git a/app/graphql/index.js b/app/graphql/index.js deleted file mode 100644 index b980b81b6a6225ecbaa97d7ccc6576e7243d1afa..0000000000000000000000000000000000000000 --- a/app/graphql/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// TODO: Combine this with app/queries/index - -import gql from 'graphql-tag' - -export default { - currentUser: gql` - { - currentUser { - id - username - admin - profilePicture - defaultIdentity { - aff - name - } - } - } - `, -} diff --git a/app/hooks/useCurrentUser.js b/app/hooks/useCurrentUser.js index 5a5ec77ce07fd2d226772200140dc16e0c81074f..6477060da8aa262b9b05798792ebe0205ab33c9b 100644 --- a/app/hooks/useCurrentUser.js +++ b/app/hooks/useCurrentUser.js @@ -1,4 +1,4 @@ -import { useQuery } from '@apollo/react-hooks' +import { useQuery } from '@apollo/client' import { GET_CURRENT_USER } from '../queries' diff --git a/app/queries/index.js b/app/queries/index.js index 8aaf5dbb875500c0bcb0f6b06f7587f81ade91f2..17d6b3ba206f39b9addd2edd475969fc85f5c51a 100644 --- a/app/queries/index.js +++ b/app/queries/index.js @@ -6,6 +6,7 @@ export const GET_CURRENT_USER = gql` id profilePicture username + admin defaultIdentity { aff name @@ -17,6 +18,11 @@ export const GET_CURRENT_USER = gql` email } } + online + _currentRoles { + id + roles + } } } ` diff --git a/app/routes.js b/app/routes.js index ab13a06de6fde2a51ff54c66d85b684910a578ae..ac455bdf69d3d384d13584c093ee041c1a8361df 100644 --- a/app/routes.js +++ b/app/routes.js @@ -1,43 +1,16 @@ import React from 'react' -import { Route, Switch, Redirect } from 'react-router-dom' +import { Route, Switch } from 'react-router-dom' import Login from './components/component-login' import AdminPage from './components/AdminPage' -// const createReturnUrl = ({ pathname, search = '' }) => pathname + search -// const loginUrl = location => `/login?next=${createReturnUrl(location)}` - -// const adminWrap = Component => props => ( -// <AdminPage {...props}> -// <Component {...props} /> -// </AdminPage> -// ) -// TODO: use componentDidMount to fetch the current user before rendering? - export default ( <Switch> {/* AdminPage has nested routes within */} <Route path="/journal"> <AdminPage /> </Route> - - {/* <PrivateRoute - component={FindReviewersPage} - exact - path="/journals/:journal/versions/:version/find-reviewers" - /> - <PrivateRoute - component={FindReviewersAuthorPage} - exact - path="/journals/:journal/versions/:version/find-reviewers/author/:id" - /> - <PrivateRoute - component={FindReviewersPaperPage} - exact - path="/journals/:journal/versions/:version/find-reviewers/paper/:id" - /> */} - <Route component={Login} path="/login" /> </Switch> ) diff --git a/app/shared/currentRolesVar.js b/app/shared/currentRolesVar.js new file mode 100644 index 0000000000000000000000000000000000000000..7278c2abd93fc6a0f6a784c56b0682472910ca92 --- /dev/null +++ b/app/shared/currentRolesVar.js @@ -0,0 +1,5 @@ +import { makeVar } from '@apollo/client' + +const currenRolesVar = makeVar([]) + +export default currenRolesVar diff --git a/app/shared/hasRole.js b/app/shared/hasRole.js new file mode 100644 index 0000000000000000000000000000000000000000..23a73b87ff2ef9413884e3ed0e4ca726b12063e9 --- /dev/null +++ b/app/shared/hasRole.js @@ -0,0 +1,11 @@ +const hasRole = (obj, role) => { + const currentRoles = (obj && obj._currentRoles) || [] + + // When multiple roles are provided it acts as an 'OR' + if (Array.isArray(role)) { + return role.some(r => currentRoles.includes(r)) + } + return currentRoles.includes(role) +} + +export default hasRole diff --git a/app/sortAndGroup.js b/app/sortAndGroup.js index 3ee32d7944fcb34059c9b99f71b60099f3a57741..87956bcd9b61f56c985967529e0858bd93e8437c 100644 --- a/app/sortAndGroup.js +++ b/app/sortAndGroup.js @@ -66,6 +66,7 @@ export const sortAndGroupMessages = messages => { } else { // if we're on to the second message, we need to evaulate the timestamp // if the second message is older than the first message by our variance + // eslint-disable-next-line no-lonely-if if (oldMessage(messages[i], messages[i - 1])) { // push the batch of messages to master array masterArray.push(newArray) diff --git a/app/theme/elements/ButtonStyles.js b/app/theme/elements/ButtonStyles.js index ede85e5c2d1e1d866dcc1ea73d46b40d557a549c..df6f9870bb37bfb006a5d34ad2025dac787e4f90 100644 --- a/app/theme/elements/ButtonStyles.js +++ b/app/theme/elements/ButtonStyles.js @@ -1,4 +1,4 @@ -import styled, { css } from 'styled-components' +import { css } from 'styled-components' export default css` background: #fff; diff --git a/app/theme/index.js b/app/theme/index.js index 18926d361975fae7334586fcdac531a0be98550b..9ecac132a259087b9e7994fcc02f54b879b89b1e 100644 --- a/app/theme/index.js +++ b/app/theme/index.js @@ -17,7 +17,7 @@ const cokoTheme = { /* Colors */ colorBackground: 'white', colorSecondaryBackground: '#f9fafb', // custom - colorPrimary: '#0D83DD', + colorPrimary: '#3AAE2A', colorSecondary: '#9e9e9e', colorFurniture: '#E8E8E8', colorBorder: '#AAA', diff --git a/config/authsome.js b/config/authsome.js index 8423ba891854508b84d792884a62d2a1c90c28d4..423148f99fc78f23577e5740a522969782397a32 100644 --- a/config/authsome.js +++ b/config/authsome.js @@ -1,8 +1,10 @@ const { pickBy } = require('lodash') -class SimpleJMode { +const objType = obj => (obj.constructor && obj.constructor.name) || obj.type + +class AuthsomeMode { /** - * Creates a new instance of SimpleJMode + * Creates a new instance of AuthsomeMode * * @param {string} userId A user's UUID * @param {string} operation The operation you're authorizing for @@ -12,28 +14,11 @@ class SimpleJMode { */ constructor(userId, operation, object, context) { this.userId = userId - this.operation = SimpleJMode.mapOperation(operation) + this.operation = operation this.object = object this.context = context } - /** - * Maps operations from HTTP verbs to semantic verbs - * - * @param {any} operation - * @returns {string} - */ - static mapOperation(operation) { - const operationMap = { - GET: 'read', - POST: 'create', - PATCH: 'update', - DELETE: 'delete', - } - - return operationMap[operation] ? operationMap[operation] : operation - } - /** * Checks if user is a member of a team of a certain type for a certain object * @@ -42,16 +27,23 @@ class SimpleJMode { * @returns {boolean} */ async isTeamMember(role, object) { - if (!this.user || !Array.isArray(this.user.teams)) { + if (!this.user) { return false } + this.user.teams = + this.user.teams || + ( + await this.context.models.User.query() + .findById(this.user.id) + .eager('teams') + ).teams + let membershipCondition if (object) { // We're asking if a user is a member of a team for a specific object membershipCondition = team => { - // TODO: This needs to be fixed... - const objectId = team.objectId || (team.object && team.object.objectId) + const { objectId } = team return team.role === role && objectId === object.id } } else { @@ -60,11 +52,8 @@ class SimpleJMode { } const memberships = await Promise.all( - this.user.teams.map(async teamId => { - // TODO: This needs to be fixed... - const id = teamId.id ? teamId.id : teamId - const team = await this.context.models.Team.find(id) - if (!team) return [false] + this.user.teams.map(async team => { + if (!team) return false return membershipCondition(team) }), @@ -85,8 +74,7 @@ class SimpleJMode { } /** - * Checks if the user is an admin, as represented with the owners - * relationship + * Checks if the user is an admin * * @returns {boolean} */ @@ -122,21 +110,24 @@ class SimpleJMode { } /** - * Checks if user is a senior editor (member of a team of type senior editor) for an object + * Checks if user is an editor (any editor) globally * * @returns {boolean} */ - isManagingEditor(object) { - return this.isTeamMember('managingEditor', object) + async isGlobalEditor(object) { + const seniorEditor = await this.isTeamMember('seniorEditor') + const handlingEditor = await this.isTeamMember('handlingEditor') + + return seniorEditor || handlingEditor } /** - * Checks if user is a reviewer editor (member of a team of type reviewer editor) for an object + * Checks if user is a reviewer (member of a team of type reviewer) for an object * * @returns {boolean} */ - isAssignedReviewerEditor(object) { - return this.isTeamMember('reviewerEditor', object) + isAssignedReviewer(object) { + return this.isTeamMember('reviewer', object) } /** @@ -149,15 +140,6 @@ class SimpleJMode { return !!this.userId } - /** - * Checks if a user can create a collection. - * - * @returns {boolean} - */ - canCreateCollection() { - return this.isAuthenticated() - } - /** * Checks if a user can read a specific collection * @@ -173,11 +155,6 @@ class SimpleJMode { const manuscript = this.object - // TODO: Enable more team types - // if (await this.isManagingEditor(manuscript)) { - // return true - // } - let permission = await this.checkTeamMembers( [ 'isAssignedSeniorEditor', @@ -258,13 +235,6 @@ class SimpleJMode { { id: fragment.collections[0] }, ) - // permission = permission - // ? true - // : await this.isAssignedManagingEditor(fragment) - // Caveat: this means every logged-in user can read every fragment (but needs its UUID) - // Ideally we'd check if the fragment (version) belongs to a collection (project) - // where the user is a member of a team with the appropriate rights. However there is no - // link from a fragment back to a collection at this point. Something to keep in mind! return permission } @@ -273,41 +243,41 @@ class SimpleJMode { * * @returns {boolean} */ - // async canListManuscripts() { - // if (!this.isAuthenticated()) { - // return false - // } - - // this.user = await getUserAndTeams(this.userId, this.context) - - // return { - // filter: async manuscripts => { - // const filteredManuscripts = await Promise.all( - // manuscripts.map(async manuscript => { - // let condition = await this.checkTeamMembers( - // [ - // 'isAssignedSeniorEditor', - // 'isAssignedHandlingEditor', - // 'isManagingEditor', - // 'isAssignedReviewerEditor', - // ], - // manuscript, - // ) - // // condition = condition - // // ? true - // // : await this.canReadatLeastOneFragmentOfCollection(collection, [ - // // 'isAssignedReviewerEditor', - // // ]) - - // condition = condition ? true : await this.isAuthor(manuscript) - // return condition ? manuscript : false - // }), - // ) - - // return filteredManuscripts.filter(manuscript => manuscript) - // }, - // } - // } + async canListManuscripts() { + if (!this.isAuthenticated()) { + return false + } + + this.user = await getUserAndTeams(this.userId, this.context) + + return { + filter: async manuscripts => { + const filteredManuscripts = await Promise.all( + manuscripts.map(async manuscript => { + let condition = await this.checkTeamMembers( + [ + 'isAssignedSeniorEditor', + 'isAssignedHandlingEditor', + 'isManagingEditor', + 'isAssignedReviewerEditor', + ], + manuscript, + ) + // condition = condition + // ? true + // : await this.canReadatLeastOneFragmentOfCollection(collection, [ + // 'isAssignedReviewerEditor', + // ]) + + condition = condition ? true : await this.isAuthor(manuscript) + return condition ? manuscript : false + }), + ) + + return filteredManuscripts.filter(manuscript => manuscript) + }, + } + } /** * Checks if a user can create fragments @@ -384,7 +354,7 @@ class SimpleJMode { * Checks if a user can create a team * * @returns {boolean} - * @memberof SimpleJMode + * @memberof AuthsomeMode */ async canCreateTeam() { if (!this.isAuthenticated()) { @@ -472,23 +442,6 @@ class SimpleJMode { return permission } - /** - * Checks if a user can update manuscript - * - * @returns {boolean} - */ - // async canUpdateManuscript() { - // this.user = await getUserAndTeams(this.userId, this.context) - // const { current } = this.object - // if (current) { - // return this.checkTeamMembers( - // ['isAuthor', 'isAssignedSeniorEditor', 'isAssignedHandlingEditor'], - // current, - // ) - // } - // return false - // } - /** * Checks if a user can delete Manuscript * @@ -531,31 +484,6 @@ class SimpleJMode { ) } - async canViewMySubmissionSection() { - this.user = await getUserAndTeams(this.userId, this.context) - const manuscripts = await Promise.all( - this.object.map(async manuscript => this.isAuthor(manuscript)), - ) - - return manuscripts.some(manuscript => manuscript) - } - - async canViewReviewSection() { - this.user = await getUserAndTeams(this.userId, this.context) - - const collection = await Promise.all( - this.object.map(async manuscript => { - const permission = await this.checkTeamMembers( - ['isAssignedReviewerEditor'], - manuscript, - ) - - return permission - }), - ) - return collection.some(collection => collection) - } - async canViewManuscripts() { this.user = await getUserAndTeams(this.userId, this.context) const manuscripts = await Promise.all( @@ -571,101 +499,7 @@ class SimpleJMode { ), ) - return manuscripts.some(collection => collection) - } - - async canViewPage() { - this.user = await getUserAndTeams(this.userId, this.context) - const { path, params } = this.object - - if (path === '/teams') { - return !!this.isAdmin() - } - - if (path === '/journals/:journal/versions/:version/submit') { - return this.checkPageSubmit(params) - } - - if (path === '/journals/:journal/versions/:version/reviews/:review') { - return this.checkPageReviews(params) - } - - if ( - path === '/journals/:journal/versions/:version/review' || - path === '/journals/:journal/versions/:version/reviewers' - ) { - return this.checkPageReview(params) - } - - if (path === '/journals/:journal/versions/:version/decisions/:decision') { - return this.checkPageDecision(params) - } - - return true - } - - async checkPageSubmit(params) { - const collection = this.context.models.Collection.find(params.project) - let permission = await this.isAuthor(collection) - - // permission = permission - // ? true - // : await !this.canReadatLeastOneFragmentOfCollection(collection, [ - // 'isAssignedReviewerEditor', - // ]) - - permission = permission - ? true - : await this.checkTeamMembers( - [ - 'isAssignedSeniorEditor', - 'isAssignedHandlingEditor', - 'isAssignedReviewerEditor', - ], - collection, - ) - - return permission - } - - async checkPageDecision(params) { - const collection = this.context.models.Collection.find(params.project) - - if (this.isAuthor(collection)) return false - - const permission = await this.checkTeamMembers( - ['isAssignedSeniorEditor', 'isAssignedHandlingEditor'], - collection, - ) - - return permission - } - - async checkPageReviews(params) { - const fragment = this.context.models.Fragment.find(params.version) - - const permission = await this.checkTeamMembers( - ['isAssignedReviewerEditor'], - fragment, - ) - - return permission - } - - async checkPageReview(params) { - const collection = this.context.models.Collection.find(params.project) - - const permission = await this.checkTeamMembers( - ['isAssignedSeniorEditor', 'isAssignedHandlingEditor'], - collection, - ) - - return permission - } - - async checkTeamMembers(team, object) { - const permission = await Promise.all(team.map(t => this[t](object))) - return permission.includes(true) + return manuscripts.some(m => m) } } @@ -690,21 +524,11 @@ module.exports = { const user = await getUserAndTeams(userId, context) if (!user) return false - // we need to introduce a new Role Managing Editor - // currently we take for granted that an admin is the Managing Editor - // Temporally we need this if statement to prevent admin from seeing - // review and submission section on dashboard (ME permissions) - // if ( - // operation === 'can view review section' || - // operation === 'can view my submission section' || - // operation === 'can view my manuscripts section' - // ) - // return false return user.admin }, create: (userId, operation, object, context) => true, update: async (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) + const mode = new AuthsomeMode(userId, operation, object, context) if ( mode.object === 'Manuscript' || @@ -734,59 +558,43 @@ module.exports = { return false }, delete: (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) + const mode = new AuthsomeMode(userId, operation, object, context) - if (object && object.type === 'users') { + if (object && objType(object) === 'users') { return mode.canDeleteUser() } - if (object === 'Manuscript' || object.type === 'Manuscript') { + if (object === 'Manuscript' || objType(object) === 'Manuscript') { return mode.isAuthor(object) } - if (object === 'Team' || object.type === 'Team') { + if (object === 'Team' || objType(object) === 'Team') { return true // return mode.canDeleteTeam() } return false }, - 'can view my submission section': (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) - return mode.canViewMySubmissionSection() - }, - 'can view my manuscripts section': (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) - return mode.canViewManuscripts() - }, - 'can view review section': (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) - return mode.canViewReviewSection() - }, - 'can delete manuscript': (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) - return mode.canDeleteManuscript() - }, - 'can view page': (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) - return mode.canViewPage() - }, - 'can view only admin': () => false, read: async (userId, operation, object, context) => { - const mode = new SimpleJMode(userId, operation, object, context) + const mode = new AuthsomeMode(userId, operation, object, context) + // Can a user read (list) Manuscripts or Reviews? if (object === 'Manuscript' || object === 'Review') { return true } - if (object.type === 'Review') { + // Can a user read a specific Review? + if (objType(object) === 'Review') { return mode.isAllowedToReview(object) } - if (object.type === 'Manuscript') { + // Can a user read a specific Manuscript? + if (objType(object) === 'Manuscript') { return mode.canReadManuscript() } - if (object.type === 'team' || object === 'Team') { + + // Can a user read + if (objType(object) === 'team' || object === 'Team') { return mode.canReadTeam() } @@ -798,7 +606,7 @@ module.exports = { return mode.canListUsers() } - if (object.type === 'user' || object === 'User') { + if (objType(object) === 'user' || object === 'User') { return mode.canReadUser() } diff --git a/config/custom-environment-variables.json b/config/custom-environment-variables.json new file mode 100644 index 0000000000000000000000000000000000000000..9cd99c2cfc4b2aa585fd019b32bee51e408c42c3 --- /dev/null +++ b/config/custom-environment-variables.json @@ -0,0 +1,6 @@ +{ + "auth-orcid": { + "clientID": "ORCID_CLIENT_ID", + "clientSecret": "ORCID_CLIENT_SECRET" + } +} \ No newline at end of file diff --git a/config/default.js b/config/default.js index 5ba4fcd8fd2f46a462f0f6034255c039a55f9188..3986e834308267490a553720339ccad8a7b01c49 100644 --- a/config/default.js +++ b/config/default.js @@ -44,7 +44,6 @@ module.exports = { db: {}, port: 3000, logger, - enableExperimentalGraphql: true, uploads: 'uploads', typeDefs: ` extend type User { @@ -134,16 +133,9 @@ module.exports = { }, 'pubsweet-client': { API_ENDPOINT: '/api', - 'login-redirect': '/', - 'redux-log': false, + 'login-redirect': '/journal/dashboard', theme: process.env.PUBSWEET_THEME, }, - 'password-reset': { - url: - process.env.PUBSWEET_PASSWORD_RESET_URL || - 'http://localhost:3000/password-reset', - sender: process.env.PUBSWEET_PASSWORD_RESET_SENDER || 'dev@example.com', - }, 'pubsweet-component-xpub-dashboard': { acceptUploadFiles: [ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', @@ -155,15 +147,6 @@ module.exports = { 'application/zip', ], }, - 'pubsweet-component-ink-backend': { - inkEndpoint: process.env.INK_ENDPOINT || 'http://167.99.161.30:3000/', - email: process.env.INK_USERNAME, - password: process.env.INK_PASSWORD, - maxRetries: 500, - recipes: { - 'editoria-typescript': '2', - }, - }, publicKeys: [ 'pubsweet-client', 'authsome', @@ -172,6 +155,8 @@ module.exports = { 'pubsweet-component-xpub-formbuilder', 'pubsweet', 'detectionMethodCorrelations', + 'journal', ], schema: {}, + journal: require('./journal'), } diff --git a/config/development.js b/config/development.js index 98b60078ef5e5d71c2f4043a62c2912a3e4fcc16..8abc7e59a77254a424869b9311aa21ac7d916616 100644 --- a/config/development.js +++ b/config/development.js @@ -1,5 +1,3 @@ -const { deferConfig } = require('config/defer') - module.exports = { 'pubsweet-server': { db: { @@ -8,13 +6,11 @@ module.exports = { }, port: process.env.PORT || 3000, pool: { min: 0, max: 10, idleTimeoutMillis: 1000 }, - baseUrl: deferConfig( - cfg => `http://localhost:${cfg['pubsweet-server'].port}`, - ), + baseUrl: `http://localhost:4000`, secret: 'secret-string', }, 'pubsweet-client': { - baseUrl: 'http://localhost:4000/', + baseUrl: `http://localhost:4000`, }, mailer: { from: 'simplej@example.com', diff --git a/app/config/journal/article-types.js b/config/journal/article-types.js similarity index 93% rename from app/config/journal/article-types.js rename to config/journal/article-types.js index a5d08e5f9823fcce6aa1ff85435a1b798ac5629a..ccd22cb56c98870b5520cd9d5850a36720f03efb 100644 --- a/app/config/journal/article-types.js +++ b/config/journal/article-types.js @@ -1,4 +1,4 @@ -export default [ +module.exports = [ { label: 'Original Research Report', value: 'original-research', diff --git a/app/config/journal/decisions.js b/config/journal/decisions.js similarity index 96% rename from app/config/journal/decisions.js rename to config/journal/decisions.js index 3b1e485081ec770ff34278be18f7a410bcdd2143..bb05921d47b9c444a1bad6dbb54aed74b992b33e 100644 --- a/app/config/journal/decisions.js +++ b/config/journal/decisions.js @@ -1,4 +1,4 @@ -export default { +module.exports = { accepted: { color: 'green', label: 'Accept', diff --git a/config/journal/index.js b/config/journal/index.js new file mode 100644 index 0000000000000000000000000000000000000000..8b7b245e19968a33c6e1dc6ac15ab2de9b24b165 --- /dev/null +++ b/config/journal/index.js @@ -0,0 +1,11 @@ +module.exports = { + metadata: require('./metadata'), + decisions: require('./decisions'), + recommendations: require('./recommendations'), + sections: require('./sections'), + articleTypes: require('./article-types'), + roles: require('./roles'), + reviewStatus: require('./review-status'), + notes: require('./submit-notes'), + supplementary: require('./supplementary'), +} diff --git a/config/journal/metadata.js b/config/journal/metadata.js new file mode 100644 index 0000000000000000000000000000000000000000..47074571b820d9123bb8fdec3442a8e024c0a669 --- /dev/null +++ b/config/journal/metadata.js @@ -0,0 +1,4 @@ +module.exports = { + issn: '0000-0001', + name: 'Aperture', +} diff --git a/app/config/journal/recommendations.js b/config/journal/recommendations.js similarity index 91% rename from app/config/journal/recommendations.js rename to config/journal/recommendations.js index 642d16fafd9cd4672ac44d82d85298506de23528..b378e93713aa43f220786f9a874a0b2ab29c0849 100644 --- a/app/config/journal/recommendations.js +++ b/config/journal/recommendations.js @@ -1,4 +1,4 @@ -export default [ +module.exports = [ { color: 'green', label: 'Accept', diff --git a/config/journal/review-status.js b/config/journal/review-status.js new file mode 100644 index 0000000000000000000000000000000000000000..3a728ff5236e4080801492328330ba790f3d7c27 --- /dev/null +++ b/config/journal/review-status.js @@ -0,0 +1 @@ +module.exports = ['invited', 'accepted', 'rejected', 'completed'] diff --git a/app/config/journal/roles.js b/config/journal/roles.js similarity index 87% rename from app/config/journal/roles.js rename to config/journal/roles.js index 0f9334d4c66a69a75359e50150a8f7b40f153ee6..95129e0a1ec5d4e512cf548d971ea7f470f04c5b 100644 --- a/app/config/journal/roles.js +++ b/config/journal/roles.js @@ -1,4 +1,4 @@ -export default { +module.exports = { author: 'Author', handlingEditor: 'Handling Editor', managingEditor: 'Managing Editor', diff --git a/app/config/journal/sections.js b/config/journal/sections.js similarity index 76% rename from app/config/journal/sections.js rename to config/journal/sections.js index 72bbd760b76499147343cb51e9a73954f71eade3..063ea160fa01ef9233d1f6812f87d2c5d6753162 100644 --- a/app/config/journal/sections.js +++ b/config/journal/sections.js @@ -1,4 +1,4 @@ -export default [ +module.exports = [ { id: 'submissions', label: 'My Submissions', diff --git a/app/config/journal/submit-notes.js b/config/journal/submit-notes.js similarity index 97% rename from app/config/journal/submit-notes.js rename to config/journal/submit-notes.js index 1e811e33f2f486a39145d73202acd57d33444cba..d5e7bd08b12db071b607b73f0eb1c69f0e9e02ac 100644 --- a/app/config/journal/submit-notes.js +++ b/config/journal/submit-notes.js @@ -1,4 +1,4 @@ -export default { +module.exports = { fundingAcknowledgement: { placeholder: 'Enter an acknowledgment…', title: 'Funding body acknowledgement (required)', diff --git a/app/config/journal/supplementary.js b/config/journal/supplementary.js similarity index 84% rename from app/config/journal/supplementary.js rename to config/journal/supplementary.js index 6904c399a874b03484df1097b1be6648cd753138..2b0aff3f7a0a6c968a20a403c52abb83bb4dec03 100644 --- a/app/config/journal/supplementary.js +++ b/config/journal/supplementary.js @@ -1,4 +1,4 @@ -export default { +module.exports = { description: ` <pre>All neccessary supplementary files for your research objects </pre> diff --git a/config/permissions.js b/config/permissions.js new file mode 100644 index 0000000000000000000000000000000000000000..ebd6f8dc0a311248b2e4b18e0b50ce4b27638727 --- /dev/null +++ b/config/permissions.js @@ -0,0 +1,40 @@ +// eslint-disable-next-line no-unused-vars +const { rule, shield, and, or, not, allow, deny } = require('graphql-shield') + +const isAdmin = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => ctx.user.admin, +) + +const isEditor = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => { + const rows = ctx.user + .$relatedQuery('teams') + .where({ role: 'seniorEditor' }) + .orWhere({ role: 'handlingEditor' }) + .resultSize() + return rows !== 0 + }, +) + +const isAuthenticated = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => !!ctx.user, +) + +const permissions = shield( + { + Query: { + paginatedManuscripts: isAdmin, + }, + Mutation: { + createManuscript: isAuthenticated, + }, + // Fruit: isAuthenticated, + // Customer: isAdmin, + }, + { + allowExternalErrors: true, + fallbackRule: or(isAdmin, isEditor), + }, +) + +module.exports = permissions diff --git a/cypress/dumps/initialState.sql b/cypress/dumps/initialState.sql new file mode 100644 index 0000000000000000000000000000000000000000..54976467b5bd466564000a01a9e73389f6e596ba --- /dev/null +++ b/cypress/dumps/initialState.sql @@ -0,0 +1,637 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 10.5 +-- Dumped by pg_dump version 10.5 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: pgboss; Type: SCHEMA; Schema: -; Owner: test +-- + +CREATE SCHEMA pgboss; + + +ALTER SCHEMA pgboss OWNER TO test; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +-- +-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public; + + +-- +-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; + + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: aliases; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.aliases ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP, + updated timestamp with time zone DEFAULT CURRENT_TIMESTAMP, + name character varying(255), + email character varying(255), + aff character varying(255) +); + + +ALTER TABLE public.aliases OWNER TO test; + +-- +-- Name: channel_members; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.channel_members ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + user_id uuid NOT NULL, + channel_id uuid NOT NULL +); + + +ALTER TABLE public.channel_members OWNER TO test; + +-- +-- Name: channels; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.channels ( + id uuid NOT NULL, + manuscript_id uuid, + team_id uuid, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + topic text, + type text +); + + +ALTER TABLE public.channels OWNER TO test; + +-- +-- Name: entities; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.entities ( + id uuid NOT NULL, + data jsonb +); + + +ALTER TABLE public.entities OWNER TO test; + +-- +-- Name: files; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.files ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + object text, + object_id uuid, + label text, + file_type text, + filename text, + url text, + mime_type text, + size integer, + type text NOT NULL +); + + +ALTER TABLE public.files OWNER TO test; + +-- +-- Name: identities; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.identities ( + id uuid NOT NULL, + user_id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + type text NOT NULL, + identifier text, + name text, + aff text, + oauth jsonb, + is_default boolean +); + + +ALTER TABLE public.identities OWNER TO test; + +-- +-- Name: manuscripts; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.manuscripts ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + parent_id uuid, + submitter_id uuid, + status text, + decision text, + authors jsonb, + suggestions jsonb, + meta jsonb, + submission jsonb, + type text NOT NULL +); + + +ALTER TABLE public.manuscripts OWNER TO test; + +-- +-- Name: messages; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.messages ( + id uuid NOT NULL, + user_id uuid NOT NULL, + channel_id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + content text +); + + +ALTER TABLE public.messages OWNER TO test; + +-- +-- Name: migrations; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.migrations ( + id text NOT NULL, + run_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP +); + + +ALTER TABLE public.migrations OWNER TO test; + +-- +-- Name: reviews; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.reviews ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + recommendation text, + is_decision boolean DEFAULT false, + comments jsonb, + user_id uuid, + manuscript_id uuid, + type text NOT NULL +); + + +ALTER TABLE public.reviews OWNER TO test; + +-- +-- Name: team_members; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.team_members ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP, + updated timestamp with time zone DEFAULT CURRENT_TIMESTAMP, + status character varying(255), + team_id uuid, + user_id uuid, + alias_id uuid +); + + +ALTER TABLE public.team_members OWNER TO test; + +-- +-- Name: teams; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.teams ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + name text, + role text NOT NULL, + owners jsonb, + global boolean, + type text NOT NULL, + object_id uuid, + object_type character varying(255) +); + + +ALTER TABLE public.teams OWNER TO test; + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: test +-- + +CREATE TABLE public.users ( + id uuid NOT NULL, + created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated timestamp with time zone, + admin boolean, + email text, + username text, + password_hash text, + teams jsonb, + password_reset_token text, + password_reset_timestamp timestamp with time zone, + type text NOT NULL, + profile_picture text, + online boolean +); + + +ALTER TABLE public.users OWNER TO test; + +-- +-- Data for Name: aliases; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: channel_members; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: channels; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: entities; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: files; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: identities; Type: TABLE DATA; Schema: public; Owner: test +-- + +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('d341a633-cdce-4a7f-a9ad-5afc03cd0dd1', '027afa6a-edbc-486e-bb31-71e12f8ea1c5', '2020-07-21 16:17:24.741+02', '2020-07-21 16:17:25.87+02', 'orcid', '0000-0002-0564-2016', 'Emily Clay', NULL, '{"accessToken": "079a1165-31e5-4b59-9a99-d80ff7a21ebf", "refreshToken": "ccadc737-defc-419e-823b-a9f3673848ba"}', true); +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('bcda196e-765a-42c8-94da-ca2e43b80f96', '3802b0e7-aadc-45de-9cf9-918fede99b97', '2020-07-21 16:30:45.721+02', '2020-07-21 16:33:26.742+02', 'orcid', '0000-0002-5641-5729', 'Sinead Sullivan', NULL, '{"accessToken": "ef1ed3ec-8371-41b2-a136-fd196ae52a72", "refreshToken": "6972dace-d9a6-4cd3-a2ad-ec7eb3e457c7"}', true); +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('4af83984-6359-47c5-a075-5ddfa9c555d9', '0da0bbec-9261-4706-b990-0c10aa3cc6b4', '2020-07-21 16:35:06.127+02', '2020-07-21 16:35:07.104+02', 'orcid', '0000-0002-7645-9921', 'Sherry Crofoot', NULL, '{"accessToken": "2ad4e130-0775-4e13-87fb-8e8f5a0570ae", "refreshToken": "159933d9-2020-4c02-bdfb-163af41017dc"}', true); +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('acfa1777-0aec-4fe1-bc16-92bb9d19e884', '85e1300e-003c-4e96-987b-23812f902477', '2020-07-21 16:35:38.384+02', '2020-07-21 16:35:39.358+02', 'orcid', '0000-0002-9429-4446', 'Elaine Barnes', NULL, '{"accessToken": "dcf07bc7-e59c-41b3-9ce0-924ac20aeeea", "refreshToken": "ae49d6a1-8e62-419d-8767-4a3ec22c1950"}', true); +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('88c85115-d83c-42d7-a1a1-0139827977da', '40e3d054-9ac8-4c0f-84ed-e3c6307662cd', '2020-07-21 16:36:24.975+02', '2020-07-21 16:36:26.059+02', 'orcid', '0000-0001-5956-7341', 'Gale Davis', NULL, '{"accessToken": "3e9f6f6c-7cc0-4afa-9fdf-6ed377c36aad", "refreshToken": "80b1e911-df97-43f1-9f11-17b61913f6d7"}', true); +INSERT INTO public.identities (id, user_id, created, updated, type, identifier, name, aff, oauth, is_default) VALUES ('2ac76834-4ddf-493a-8e50-16c3ecba1b94', '34785737-493d-4819-9982-f522abfaffe6', '2020-07-21 16:39:14.755+02', '2020-07-21 16:39:15.753+02', 'orcid', '0000-0003-1838-2441', 'Joanne Pilger', NULL, '{"accessToken": "fd3da810-1439-4666-ac1d-e737a8ba96bd", "refreshToken": "d11215a2-9921-4a74-be7e-2bec4946d1fb"}', true); + + +-- +-- Data for Name: manuscripts; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: messages; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: migrations; Type: TABLE DATA; Schema: public; Owner: test +-- + +INSERT INTO public.migrations (id, run_at) VALUES ('1524494862-entities.sql', '2020-07-21 16:01:00.856209+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1537450834-files.sql', '2020-07-21 16:01:00.866487+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1537450834-review.sql', '2020-07-21 16:01:00.876573+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1542276313-initial-user-migration.sql', '2020-07-21 16:01:00.887088+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1542801241-initial-team-migration.sql', '2020-07-21 16:01:00.898301+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1547596236-initial-team-member-migration.js', '2020-07-21 16:01:00.954317+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1548205275-move-members.js', '2020-07-21 16:01:01.009825+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1548205276-simplify-object.js', '2020-07-21 16:01:01.025532+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1548328420-add-alias-migration.js', '2020-07-21 16:01:01.068783+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1560771823-add-unique-constraints-to-users.sql', '2020-07-21 16:01:01.078878+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1580908536-add-identities.sql', '2020-07-21 16:01:01.092107+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1581371297-migrate-users-to-identities.js', '2020-07-21 16:01:01.107057+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1581450834-manuscript.sql', '2020-07-21 16:01:01.118725+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1582930582-drop-fragments-and-collections.js', '2020-07-21 16:01:01.12668+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1585323910-add-channels.sql', '2020-07-21 16:01:01.14497+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1585344885-add-messages.sql', '2020-07-21 16:01:01.15657+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1585513226-add-profile-pic.sql', '2020-07-21 16:01:01.162443+02'); +INSERT INTO public.migrations (id, run_at) VALUES ('1592915682-change-identities-constraint.sql', '2020-07-21 16:01:01.17359+02'); + + +-- +-- Data for Name: reviews; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: team_members; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: teams; Type: TABLE DATA; Schema: public; Owner: test +-- + + + +-- +-- Data for Name: users; Type: TABLE DATA; Schema: public; Owner: test +-- + +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('0da0bbec-9261-4706-b990-0c10aa3cc6b4', '2020-07-21 16:35:06.125+02', '2020-07-21 16:35:24.978+02', NULL, NULL, '0000000276459921', NULL, NULL, NULL, NULL, 'user', NULL, false); +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('85e1300e-003c-4e96-987b-23812f902477', '2020-07-21 16:35:38.381+02', '2020-07-21 16:36:08.629+02', NULL, NULL, '0000000294294446', NULL, NULL, NULL, NULL, 'user', NULL, false); +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('40e3d054-9ac8-4c0f-84ed-e3c6307662cd', '2020-07-21 16:36:24.973+02', '2020-07-21 16:39:03.909+02', NULL, NULL, '0000000159567341', NULL, NULL, NULL, NULL, 'user', NULL, false); +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('34785737-493d-4819-9982-f522abfaffe6', '2020-07-21 16:39:14.753+02', '2020-07-21 16:39:29.593+02', NULL, NULL, '0000000318382441', NULL, NULL, NULL, NULL, 'user', NULL, false); +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('027afa6a-edbc-486e-bb31-71e12f8ea1c5', '2020-07-21 16:17:24.734+02', '2020-07-21 16:40:03+02', NULL, NULL, '0000000205642016', NULL, NULL, NULL, NULL, 'user', NULL, false); +INSERT INTO public.users (id, created, updated, admin, email, username, password_hash, teams, password_reset_token, password_reset_timestamp, type, profile_picture, online) VALUES ('3802b0e7-aadc-45de-9cf9-918fede99b97', '2020-07-21 16:30:45.719+02', '2020-07-21 16:41:40.685+02', true, NULL, '0000000256415729', NULL, NULL, NULL, NULL, 'user', NULL, true); + + +-- +-- Name: aliases aliases_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.aliases + ADD CONSTRAINT aliases_pkey PRIMARY KEY (id); + + +-- +-- Name: channel_members channel_members_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channel_members + ADD CONSTRAINT channel_members_pkey PRIMARY KEY (id); + + +-- +-- Name: channels channels_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channels + ADD CONSTRAINT channels_pkey PRIMARY KEY (id); + + +-- +-- Name: entities entities_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.entities + ADD CONSTRAINT entities_pkey PRIMARY KEY (id); + + +-- +-- Name: files files_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.files + ADD CONSTRAINT files_pkey PRIMARY KEY (id); + + +-- +-- Name: identities identities_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.identities + ADD CONSTRAINT identities_pkey PRIMARY KEY (id); + + +-- +-- Name: manuscripts manuscripts_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.manuscripts + ADD CONSTRAINT manuscripts_pkey PRIMARY KEY (id); + + +-- +-- Name: messages messages_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_pkey PRIMARY KEY (id); + + +-- +-- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.migrations + ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: reviews reviews_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.reviews + ADD CONSTRAINT reviews_pkey PRIMARY KEY (id); + + +-- +-- Name: team_members team_members_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.team_members + ADD CONSTRAINT team_members_pkey PRIMARY KEY (id); + + +-- +-- Name: teams teams_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.teams + ADD CONSTRAINT teams_pkey PRIMARY KEY (id); + + +-- +-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_email_key UNIQUE (email); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: users users_username_key; Type: CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_username_key UNIQUE (username); + + +-- +-- Name: channel_members_idx; Type: INDEX; Schema: public; Owner: test +-- + +CREATE INDEX channel_members_idx ON public.channel_members USING btree (user_id, channel_id); + + +-- +-- Name: is_default_idx; Type: INDEX; Schema: public; Owner: test +-- + +CREATE UNIQUE INDEX is_default_idx ON public.identities USING btree (is_default, user_id) WHERE (is_default IS TRUE); + + +-- +-- Name: team_members_team_id_user_id_index; Type: INDEX; Schema: public; Owner: test +-- + +CREATE INDEX team_members_team_id_user_id_index ON public.team_members USING btree (team_id, user_id); + + +-- +-- Name: teams_object_id_object_type_index; Type: INDEX; Schema: public; Owner: test +-- + +CREATE INDEX teams_object_id_object_type_index ON public.teams USING btree (object_id, object_type); + + +-- +-- Name: channel_members channel_members_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channel_members + ADD CONSTRAINT channel_members_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id); + + +-- +-- Name: channel_members channel_members_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channel_members + ADD CONSTRAINT channel_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; + + +-- +-- Name: channels channels_manuscript_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channels + ADD CONSTRAINT channels_manuscript_id_fkey FOREIGN KEY (manuscript_id) REFERENCES public.manuscripts(id) ON DELETE CASCADE; + + +-- +-- Name: channels channels_team_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.channels + ADD CONSTRAINT channels_team_id_fkey FOREIGN KEY (team_id) REFERENCES public.teams(id); + + +-- +-- Name: manuscripts manuscripts_submitter_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.manuscripts + ADD CONSTRAINT manuscripts_submitter_id_fkey FOREIGN KEY (submitter_id) REFERENCES public.users(id); + + +-- +-- Name: messages messages_channel_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_channel_id_fkey FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE; + + +-- +-- Name: messages messages_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.messages + ADD CONSTRAINT messages_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; + + +-- +-- Name: identities sidentities_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.identities + ADD CONSTRAINT sidentities_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; + + +-- +-- Name: team_members team_members_alias_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.team_members + ADD CONSTRAINT team_members_alias_id_foreign FOREIGN KEY (alias_id) REFERENCES public.aliases(id); + + +-- +-- Name: team_members team_members_team_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.team_members + ADD CONSTRAINT team_members_team_id_foreign FOREIGN KEY (team_id) REFERENCES public.teams(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: team_members team_members_user_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: test +-- + +ALTER TABLE ONLY public.team_members + ADD CONSTRAINT team_members_user_id_foreign FOREIGN KEY (user_id) REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/cypress/integration/login_spec.js b/cypress/integration/login_spec.js index 069a9f38345efe2e7fa691f91fe37656f13f2334..42ec338b90f86141b5e71a8b9fb61d6860e39bab 100644 --- a/cypress/integration/login_spec.js +++ b/cypress/integration/login_spec.js @@ -1,23 +1,17 @@ describe('Login test', () => { it('Can log in as admin (and logout)', () => { - cy.task('db:seed') - cy.visit('/dashboard') + cy.task('restore', 'initialState') + cy.task('createToken', 'Sinead Sullivan').then(token => { + cy.setToken(token) + cy.visit('/journal/dashboard') + }) - const username = 'admin' - const password = 'password' + // console.log(localStorage.getItem('token')) - cy.get('input[name="username"]').type(username) - cy.get('input[name="password"]').type(password) - cy.get('button[type="submit"]').click() - - cy.url().should('include', '/dashboard') - cy.get('nav') - .contains('Login') - .should('not.exist') + cy.get('nav').contains('Sinead') + cy.get('nav').contains('Dashboard') cy.get('nav').contains('admin') - cy.get('nav').contains('Logout') - cy.get('nav button').click() - cy.get('nav').contains('Login') + cy.contains('You have not submitted any manuscripts yet') }) }) diff --git a/cypress/integration/submission_spec.js b/cypress/integration/submission_spec.js index c0217f90fcfa8f3194d4ea72976918cc93303526..e897322d6ba42619225a8cb1a09b6fbec6282827 100644 --- a/cypress/integration/submission_spec.js +++ b/cypress/integration/submission_spec.js @@ -1,243 +1,243 @@ -// TODO: What's with the wait? - -const login = (username, password = 'password') => { - cy.get('input[name="username"]') - .click() - .wait(200) - .focus() - .type(username) - .blur() - cy.get('input[name="password"]') - .click() - .wait(200) - .focus() - .type(password) - .blur() - cy.get('button[type="submit"]').click() - // cy.wait(1000) -} - -const doReview = (username, note, confidential, recommendation) => { - // 1. Login - login(username) - - // 2. Accept and do the review - cy.get('[data-testid=accept-review]').click() - cy.contains('Do Review').click() - - cy.get('[placeholder*="Enter your review"] div[contenteditable="true"]') - .focus() - .type(note) - .blur() - cy.wait(1000) - cy.get( - '[placeholder*="Enter a confidential note"] div[contenteditable="true"]', - ) - .focus() - .type(confidential) - .blur() - cy.wait(1000) - // 0 == accept, 1 == revise, 2 == reject - cy.get(`[class*=Radio__Label]:nth(${recommendation})`).click() - cy.get('button[type=submit]').click() - - // 3. Logout - cy.get('nav button').click() -} - -describe('PDF submission test', () => { - it('can upload and submit a PDF', () => { - cy.task('db:seed') - - cy.visit('/dashboard') - - // 1. Log in as author - login('author') - - // 2. Submit a PDF - cy.fixture('test-pdf.pdf', 'base64').then(fileContent => { - cy.get('[data-testid="dropzone"]').upload( - { - fileContent, - fileName: 'test-pdf.pdf', - encoding: 'base64', - mimeType: 'application/pdf', - }, - { subjectType: 'drag-n-drop' }, - ) - }) - - cy.get('body').contains('Submission information') - cy.get('[data-testid="meta.title"]').contains('test pdf') - cy.get('[data-testid="meta.title"] div[contenteditable="true"]') - .click() - .type('{selectall}{del}A Manuscript For The Ages') - - cy.get('[data-testid="meta.abstract"] div[contenteditable="true"]') - .click() - .type( - `{selectall}{del}Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem.`, - ) - - cy.get('[data-testid="meta.keywords"]').type('quantum, machines, nature') - - // TODO: Find a way to not match by partial class - cy.get('[class*="Menu__Root"]').click() - cy.get('[class*="Menu__Root"] [role="option"]:first').click() - - // TODO: Find a way to remove the forces - cy.get('[name="meta.articleSections"]:first').click({ force: true }) - cy.get('[name="meta.declarations.openData"]:first').click({ force: true }) - cy.get('[name="meta.declarations.previouslySubmitted"]:nth(1)').click({ - force: true, - }) - cy.get('[name="meta.declarations.openPeerReview"]:first').click({ - force: true, - }) - cy.get('[name="meta.declarations.streamlinedReview"]:nth(1)').click({ - force: true, - }) - cy.get('[name="meta.declarations.researchNexus"]:nth(1)').click({ - force: true, - }) - cy.get('[name="meta.declarations.preregistered"]:first').click({ - force: true, - }) - - cy.get('[data-testid="suggestions.reviewers.suggested"]').type('Jane Doe') - cy.get('[data-testid="suggestions.reviewers.opposed"]').type('James Doe') - - cy.get('[data-testid="suggestions.editors.suggested"]').type('John Ode') - cy.get('[data-testid="suggestions.editors.opposed"]').type('Gina Ode') - - cy.get('[name="meta.notes.0.content"] div[contenteditable="true"]') - .click() - .type( - 'This work was supported by the Trust [grant numbers 393,295]; the Natural Environment Research Council [grant number 49493].', - ) - cy.get('[name="meta.notes.1.content"] div[contenteditable="true"]') - .click() - .type('This is extremely divisive work, choose reviewers with care.') - - cy.get('form button:last').click() - cy.get('button[type="submit"]').click() - - cy.visit('/dashboard') - cy.contains('A Manuscript For The Ages') - - // 3. Logout - cy.get('nav button').click() - - // 4. And login as admin - login('admin', 'password') - - cy.get('[data-testid="control-panel"]').click() - - // 5. Assign senior editor - // TODO: Find a way to not match by partial class - cy.get('[class*="AssignEditor"] [class*="Menu__Root"]:first').click() - cy.get( - '[class*="AssignEditor"] [class*="Menu__Root"]:first [role="option"]:nth(1)', - ).click() - - // 6. Assign handling editor - cy.get('[class*="AssignEditor"] [class*="Menu__Root"]:nth(1)').click() - cy.get( - '[class*="AssignEditor"] [class*="Menu__Root"]:nth(1) [role="option"]:nth(2)', - ).click() - - // 7. Logout - cy.get('nav button').click() - - // 8. And login as handling editor - cy.wait(1000) - login('heditor') - cy.get('[data-testid="control-panel"]').click() - - // 9. Assign reviewers - cy.get('[class*="AssignEditorsReviewers"] a').click() - - cy.get('.Select-control').click() - cy.get('.Select-menu[role="listbox"] [role="option"]:nth(3)').click() - cy.get('button[type="submit"]').click() - cy.get('[class*="Reviewer__"]').should('have.length', 1) - - cy.get('.Select-control').click() - cy.get('.Select-menu[role="listbox"] [role="option"]:nth(4)').click() - cy.get('button[type="submit"]').click() - cy.get('[class*="Reviewer__"]').should('have.length', 2) - - cy.get('.Select-control').click() - cy.get('.Select-menu[role="listbox"] [role="option"]:nth(5)').click() - cy.get('button[type="submit"]').click() - cy.get('[class*="Reviewer__"]').should('have.length', 3) - - // 10. Check that 3 reviewers are invited - cy.contains('SimpleJ').click() - cy.get('[data-testid="invited"]').contains('3') - - // 11. Logout - cy.get('nav button').click() - - doReview( - 'reviewer1', - 'Great research into CC bases in the ky289 variant are mutated to TC which results in the truncation of the SAD-1.', - 'Not too bad.', - 0, - ) - doReview( - 'reviewer2', - 'Mediocre analysis of Iron-Sulfur ClUster assembly enzyme homolog.', - 'It is so so.', - 1, - ) - doReview( - 'reviewer3', - 'mTOR-Is positively influence the occurrence and course of certain tumors after solid organ transplantation.', - 'It is not good.', - 2, - ) - - // 12. Log in as handling editor - login('heditor') - cy.get('[data-testid="completed"]').contains('3') - - cy.task('dump', '3reviewscompleted') - }) - - it('accept a submitted paper', () => { - cy.task('restore', '3reviewscompleted') - cy.visit('/dashboard') - login('heditor') - cy.get('[data-testid="completed"]').contains('3') - - cy.get('[data-testid="control-panel"]').click() - cy.contains('reviewer1') - cy.contains('reviewer2') - cy.contains('reviewer3') - - // Write a decision - cy.get('[placeholder*="Write/paste"] div[contenteditable="true"]') - .focus() - .type("Let's do this!") - .blur() - .wait(1000) - cy.get(`[class*=Radio__Label]:nth(0)`) - .click() - .wait(1000) - - cy.get('button[type=submit]').click() - cy.wait(2000) - cy.visit('/dashboard') - cy.contains('accepted') - }) - - it('can delete a submission', () => { - cy.task('restore', '3reviewscompleted') - cy.visit('/dashboard') - login('admin') - cy.get('button:contains("Delete")').click() - cy.visit('/dashboard') - cy.contains('Nothing to do at the moment') - }) -}) +// // TODO: What's with the wait? + +// const login = (username, password = 'password') => { +// cy.get('input[name="username"]') +// .click() +// .wait(200) +// .focus() +// .type(username) +// .blur() +// cy.get('input[name="password"]') +// .click() +// .wait(200) +// .focus() +// .type(password) +// .blur() +// cy.get('button[type="submit"]').click() +// // cy.wait(1000) +// } + +// const doReview = (username, note, confidential, recommendation) => { +// // 1. Login +// login(username) + +// // 2. Accept and do the review +// cy.get('[data-testid=accept-review]').click() +// cy.contains('Do Review').click() + +// cy.get('[placeholder*="Enter your review"] div[contenteditable="true"]') +// .focus() +// .type(note) +// .blur() +// cy.wait(1000) +// cy.get( +// '[placeholder*="Enter a confidential note"] div[contenteditable="true"]', +// ) +// .focus() +// .type(confidential) +// .blur() +// cy.wait(1000) +// // 0 == accept, 1 == revise, 2 == reject +// cy.get(`[class*=Radio__Label]:nth(${recommendation})`).click() +// cy.get('button[type=submit]').click() + +// // 3. Logout +// cy.get('nav button').click() +// } + +// describe('PDF submission test', () => { +// it('can upload and submit a PDF', () => { +// cy.task('db:seed') + +// cy.visit('/dashboard') + +// // 1. Log in as author +// login('author') + +// // 2. Submit a PDF +// cy.fixture('test-pdf.pdf', 'base64').then(fileContent => { +// cy.get('[data-testid="dropzone"]').upload( +// { +// fileContent, +// fileName: 'test-pdf.pdf', +// encoding: 'base64', +// mimeType: 'application/pdf', +// }, +// { subjectType: 'drag-n-drop' }, +// ) +// }) + +// cy.get('body').contains('Submission information') +// cy.get('[data-testid="meta.title"]').contains('test pdf') +// cy.get('[data-testid="meta.title"] div[contenteditable="true"]') +// .click() +// .type('{selectall}{del}A Manuscript For The Ages') + +// cy.get('[data-testid="meta.abstract"] div[contenteditable="true"]') +// .click() +// .type( +// `{selectall}{del}Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem.`, +// ) + +// cy.get('[data-testid="meta.keywords"]').type('quantum, machines, nature') + +// // TODO: Find a way to not match by partial class +// cy.get('[class*="Menu__Root"]').click() +// cy.get('[class*="Menu__Root"] [role="option"]:first').click() + +// // TODO: Find a way to remove the forces +// cy.get('[name="meta.articleSections"]:first').click({ force: true }) +// cy.get('[name="meta.declarations.openData"]:first').click({ force: true }) +// cy.get('[name="meta.declarations.previouslySubmitted"]:nth(1)').click({ +// force: true, +// }) +// cy.get('[name="meta.declarations.openPeerReview"]:first').click({ +// force: true, +// }) +// cy.get('[name="meta.declarations.streamlinedReview"]:nth(1)').click({ +// force: true, +// }) +// cy.get('[name="meta.declarations.researchNexus"]:nth(1)').click({ +// force: true, +// }) +// cy.get('[name="meta.declarations.preregistered"]:first').click({ +// force: true, +// }) + +// cy.get('[data-testid="suggestions.reviewers.suggested"]').type('Jane Doe') +// cy.get('[data-testid="suggestions.reviewers.opposed"]').type('James Doe') + +// cy.get('[data-testid="suggestions.editors.suggested"]').type('John Ode') +// cy.get('[data-testid="suggestions.editors.opposed"]').type('Gina Ode') + +// cy.get('[name="meta.notes.0.content"] div[contenteditable="true"]') +// .click() +// .type( +// 'This work was supported by the Trust [grant numbers 393,295]; the Natural Environment Research Council [grant number 49493].', +// ) +// cy.get('[name="meta.notes.1.content"] div[contenteditable="true"]') +// .click() +// .type('This is extremely divisive work, choose reviewers with care.') + +// cy.get('form button:last').click() +// cy.get('button[type="submit"]').click() + +// cy.visit('/dashboard') +// cy.contains('A Manuscript For The Ages') + +// // 3. Logout +// cy.get('nav button').click() + +// // 4. And login as admin +// login('admin', 'password') + +// cy.get('[data-testid="control-panel"]').click() + +// // 5. Assign senior editor +// // TODO: Find a way to not match by partial class +// cy.get('[class*="AssignEditor"] [class*="Menu__Root"]:first').click() +// cy.get( +// '[class*="AssignEditor"] [class*="Menu__Root"]:first [role="option"]:nth(1)', +// ).click() + +// // 6. Assign handling editor +// cy.get('[class*="AssignEditor"] [class*="Menu__Root"]:nth(1)').click() +// cy.get( +// '[class*="AssignEditor"] [class*="Menu__Root"]:nth(1) [role="option"]:nth(2)', +// ).click() + +// // 7. Logout +// cy.get('nav button').click() + +// // 8. And login as handling editor +// cy.wait(1000) +// login('heditor') +// cy.get('[data-testid="control-panel"]').click() + +// // 9. Assign reviewers +// cy.get('[class*="AssignEditorsReviewers"] a').click() + +// cy.get('.Select-control').click() +// cy.get('.Select-menu[role="listbox"] [role="option"]:nth(3)').click() +// cy.get('button[type="submit"]').click() +// cy.get('[class*="Reviewer__"]').should('have.length', 1) + +// cy.get('.Select-control').click() +// cy.get('.Select-menu[role="listbox"] [role="option"]:nth(4)').click() +// cy.get('button[type="submit"]').click() +// cy.get('[class*="Reviewer__"]').should('have.length', 2) + +// cy.get('.Select-control').click() +// cy.get('.Select-menu[role="listbox"] [role="option"]:nth(5)').click() +// cy.get('button[type="submit"]').click() +// cy.get('[class*="Reviewer__"]').should('have.length', 3) + +// // 10. Check that 3 reviewers are invited +// cy.contains('SimpleJ').click() +// cy.get('[data-testid="invited"]').contains('3') + +// // 11. Logout +// cy.get('nav button').click() + +// doReview( +// 'reviewer1', +// 'Great research into CC bases in the ky289 variant are mutated to TC which results in the truncation of the SAD-1.', +// 'Not too bad.', +// 0, +// ) +// doReview( +// 'reviewer2', +// 'Mediocre analysis of Iron-Sulfur ClUster assembly enzyme homolog.', +// 'It is so so.', +// 1, +// ) +// doReview( +// 'reviewer3', +// 'mTOR-Is positively influence the occurrence and course of certain tumors after solid organ transplantation.', +// 'It is not good.', +// 2, +// ) + +// // 12. Log in as handling editor +// login('heditor') +// cy.get('[data-testid="completed"]').contains('3') + +// cy.task('dump', '3reviewscompleted') +// }) + +// it('accept a submitted paper', () => { +// cy.task('restore', '3reviewscompleted') +// cy.visit('/dashboard') +// login('heditor') +// cy.get('[data-testid="completed"]').contains('3') + +// cy.get('[data-testid="control-panel"]').click() +// cy.contains('reviewer1') +// cy.contains('reviewer2') +// cy.contains('reviewer3') + +// // Write a decision +// cy.get('[placeholder*="Write/paste"] div[contenteditable="true"]') +// .focus() +// .type("Let's do this!") +// .blur() +// .wait(1000) +// cy.get(`[class*=Radio__Label]:nth(0)`) +// .click() +// .wait(1000) + +// cy.get('button[type=submit]').click() +// cy.wait(2000) +// cy.visit('/dashboard') +// cy.contains('accepted') +// }) + +// it('can delete a submission', () => { +// cy.task('restore', '3reviewscompleted') +// cy.visit('/dashboard') +// login('admin') +// cy.get('button:contains("Delete")').click() +// cy.visit('/dashboard') +// cy.contains('Nothing to do at the moment') +// }) +// }) diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index ecd0420af857cd3c49a38b02e81212bbe10b16a3..2bc079c1db0dc7ed3f50c8d459de4c38bdbff8a5 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -19,9 +19,18 @@ const { readFileSync } = require('fs') const dumpFile = name => path.join(__dirname, '..', 'dumps', `${name}.sql`) +const testUsers = { + 'Sherry Crofoot': '0000000276459921', + 'Elaine Barnes': '0000000294294446', + 'Gale Davis': '0000000159567341', + 'Joanne Pilger': '0000000318382441', + 'Emily Clay': '0000000205642016', + 'Sinead Sullivan': '0000000256415729', // admin +} + module.exports = (on, config) => { on('task', { - 'db:seed': () => seed(), + // 'db:seed': () => seed(), dump: name => { if (process.env.NEWDUMPS) { return execSync( @@ -30,6 +39,14 @@ module.exports = (on, config) => { } return true }, - restore: name => seed(readFileSync(dumpFile(name), 'utf-8')), + restore: async name => seed(readFileSync(dumpFile(name), 'utf-8')), + createToken: async name => { + const { User } = require('@pubsweet/models') + const authentication = require('pubsweet-server/src/authentication') + const user = await User.query() + .where({ username: testUsers[name] }) + .first() + return authentication.token.create(user) + }, }) } diff --git a/cypress/support/commands.js b/cypress/support/commands.js index fc10dd90c315d16d2eea13e6b9399a1a46878528..9a0fa26c03700524169b7e4b94de90754412054c 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -25,3 +25,8 @@ import 'cypress-file-upload' // // -- This will overwrite an existing command -- // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) + +Cypress.Commands.add('setToken', token => { + console.log('Setting token', token) + localStorage.setItem('token', token) +}) diff --git a/cypress/videos/login_spec.js.mp4 b/cypress/videos/login_spec.js.mp4 index ae0d99de664ee7b7d660df2b04b2ed963971c7c7..a17ab4e7d55424434393a05e02f1aaaa37b7f914 100644 Binary files a/cypress/videos/login_spec.js.mp4 and b/cypress/videos/login_spec.js.mp4 differ diff --git a/package.json b/package.json index 0b0c8d9d69f6bfebe3e8b18217efd1475e2a458d..e398f0d58051e11a65c262515b47e60876103e94 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "url": "https://gitlab.coko.foundation/simplej/simplej" }, "dependencies": { + "@apollo/client": "^3.0.2", "@apollo/react-testing": "^3.1.3", "@babel/core": "^7.0.0", "@guardian/prosemirror-invisibles": "^1.2.1", @@ -23,11 +24,14 @@ "@pubsweet/ui": "^12.1.0", "apollo-link-context": "^1.0.9", "apollo-link-schema": "^1.1.1", - "config": "^1.26.2", + "apollo-upload-client": "^14.0.1", + "config": "^3.3.1", "faker": "^4.1.0", "font-awesome": "^4.7.0", "fs-extra": "^4.0.2", "graphql": "^14.0.2", + "graphql-middleware": "^4.0.2", + "graphql-shield": "^7.3.2", "graphql-tools": "^4.0.0", "history": "^4.7.2", "jimp": "^0.13.0", @@ -38,7 +42,7 @@ "prop-types": "^15.5.10", "pubsweet": "^5.1.2", "pubsweet-client": "^10.0.2", - "pubsweet-server": "13.7.2", + "pubsweet-server": "13.11.1", "react": "^16.3.2", "react-dom": "^16.3.2", "react-dropzone": "^10.2.2", @@ -65,6 +69,7 @@ "xpub-validators": "^0.0.28", "xpub-with-context": "^0.2.0", "y-protocols": "^1.0.0", + "y-websocket": "^1.3.1", "yjs": "^13.2.0" }, "devDependencies": { @@ -90,8 +95,8 @@ "compression-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.28.4", - "cypress": "^4.0.1", - "cypress-file-upload": "^3.5.0", + "cypress": "^4.11.0", + "cypress-file-upload": "^4.0.7", "eslint": "^4.12.0", "eslint-config-pubsweet": "^0.0.6", "eslint-plugin-import": "^2.8.0", @@ -137,10 +142,12 @@ "precommit": "lint-staged", "reset": "pubsweet setupdb --clobber", "server": "pubsweet start:server", + "server:test": "node node_modules/pubsweet-server/src/start", "client": "pubsweet start:client", "start:services": "docker-compose up postgres", "start:server-and-client": "start-test server 'http://localhost:3000/healthcheck' client", - "test:all": "start-test start:server-and-client 4000 test", + "test:server-and-client": "start-test server:test 'http://localhost:3000/healthcheck' client", + "test:all": "start-test test:server-and-client 4000 test", "test": "cypress run", "__cleanNodeModules": "find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \\;", "build": "NODE_ENV=production pubsweet build", diff --git a/public/logo-aperture.png b/public/logo-aperture.png new file mode 100644 index 0000000000000000000000000000000000000000..1edd6c354315d832eb8cc98df19ad749705da6f8 Binary files /dev/null and b/public/logo-aperture.png differ diff --git a/scripts/clearAndSeed.js b/scripts/clearAndSeed.js index 93b8738352b0ddc14595069165e0dff7215928d7..3f343a85c7b128ff0863c72bc0a7237cb495e8c6 100644 --- a/scripts/clearAndSeed.js +++ b/scripts/clearAndSeed.js @@ -1,6 +1,7 @@ const logger = require('@pubsweet/logger') -const { Journal, User } = require('@pubsweet/models') +// const { Journal, User } = require('@pubsweet/models') const { createTables, db } = require('@pubsweet/db-manager') +const wait = require('waait') const clearDb = async () => { const { rows } = await db.raw(` @@ -33,60 +34,13 @@ const seed = async dumpSql => { await clearDb() await db.raw(dumpSql) logger.info('Cleared the database and restored from dump') + // TODO: This wait is necessary for the database to settle + await wait(2000) return true } await createTables(true) - await new User({ - username: 'admin', - password: 'password', - email: 'admin@example.com', - admin: true, - }).save() - - await new User({ - username: 'author', - email: 'john@example.com', - password: 'password', - }).save() - - await new User({ - username: 'seditor', - email: 'simone@example.com', - password: 'password', - }).save() - - await new User({ - username: 'heditor', - email: 'hector@example.com', - password: 'password', - }).save() - - await new User({ - username: 'reviewer1', - email: 'regina@example.com', - password: 'password', - }).save() - - await new User({ - username: 'reviewer2', - email: 'robert@example.com', - password: 'password', - }).save() - - await new User({ - username: 'reviewer3', - email: 'remionne@example.com', - password: 'password', - }).save() - - await new Journal({ - title: 'My Journal', - }).save() - - logger.info('Seeding complete.') - return true } diff --git a/server/app.js b/server/app.js index 69912c4e7b66dff7217b4501c1b0654423bc8f39..daf5ac7cb675e63ed57fc5062a4819dfb53ce93e 100644 --- a/server/app.js +++ b/server/app.js @@ -10,7 +10,7 @@ const helmet = require('helmet') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') const passport = require('passport') -const gqlApi = require('pubsweet-server/src/graphql/api') // TODO: Fix import +const gqlApi = require('./graphql') // const index = require('./routes/index') // const api = require('./routes/api') const logger = require('@pubsweet/logger') @@ -23,7 +23,7 @@ const registerComponents = require('pubsweet-server/src/register-components') // // Wax Collab requirements const WebSocket = require('ws') const wsUtils = require('./wax-collab/server-util.js') -const cookie = require('cookie') +// const cookie = require('cookie') const EventEmitter = require('events') const configureApp = app => { @@ -56,6 +56,8 @@ const configureApp = app => { app.use(helmet()) app.use(express.static(path.resolve('.', '_build'))) + app.use('/public', express.static(path.resolve(__dirname, '../public'))) + if (config.has('pubsweet-server.uploads')) { app.use( '/uploads', @@ -82,18 +84,6 @@ const configureApp = app => { // GraphQL API gqlApi(app) - // SSE update stream - // if (_.get('pubsweet-server.sse', config)) { - // sse.setAuthsome(authsome) - // app.get( - // '/updates', - // passport.authenticate('bearer', { session: false }), - // sse.connect, - // ) - - // app.locals.sse = sse - // } - // Serve the index page for front end // app.use('/', index) app.use('/healthcheck', (req, res) => res.send('All good!')) @@ -119,7 +109,7 @@ const configureApp = app => { .json({ message: err.message }) }) - // Set up a separate websocket for wax collab + // Set up a separate websocket for Wax-Collab const wss = new WebSocket.Server({ noServer: true }) wss.on('connection', (conn, req) => wsUtils.setupWSConnection(conn, req)) @@ -138,14 +128,14 @@ const configureApp = app => { } else { let user = null if (request.headers.cookie) { - const cookies = cookie.parse(request.headers.cookie) - const user = cookies.user_identifier + // const cookies = cookie.parse(request.headers.cookie) + // const user = cookies.user_identifier } - + // TODO: Do real auth for Wax-collab user = 'test' // shortcut if (!user) { - console.log('Failed to authenticate', user) + // console.log('Failed to authenticate', user) socket.destroy() return } diff --git a/server/auth-orcid/orcid.js b/server/auth-orcid/orcid.js index d0ef6cb5d2e49ae10bd076a9af84ac2489b02a6c..5f84755aedfba206f47eeb6f13f4ff930614f032 100644 --- a/server/auth-orcid/orcid.js +++ b/server/auth-orcid/orcid.js @@ -3,6 +3,7 @@ const OrcidStrategy = require('passport-orcid') const config = require('config') const authentication = require('pubsweet-server/src/authentication') const fetchUserDetails = require('./fetchUserDetails') + const CALLBACK_URL = '/auth/orcid/callback' module.exports = app => { @@ -35,6 +36,7 @@ module.exports = app => { } } + // TODO: Update the user details on every login, asynchronously try { if (!user) { user = await new User({ diff --git a/server/formbuilder/src/resolvers.js b/server/formbuilder/src/resolvers.js index 160853d1f638cf3a72f85ec9a0abf46c1d906af3..c9aaf53d8b0af36c9d8074124e972fb74d699cda 100644 --- a/server/formbuilder/src/resolvers.js +++ b/server/formbuilder/src/resolvers.js @@ -3,9 +3,8 @@ const fs = require('fs') const { readFiles, mkdirp } = require('./util') const form = require('../../../app/storage/forms/submit.json') -const writeJson = (path, object) => { - return fs.writeFileSync(path, JSON.stringify(object, null, 2)) -} +const writeJson = (path, object) => + fs.writeFileSync(path, JSON.stringify(object, null, 2)) const mergeFiles = path => readFiles(path).then(files => { diff --git a/server/graphql.js b/server/graphql.js new file mode 100644 index 0000000000000000000000000000000000000000..0edd731f92ac7155400e72a181431e5d0868da11 --- /dev/null +++ b/server/graphql.js @@ -0,0 +1,74 @@ +const passport = require('passport') +const { ApolloServer } = require('apollo-server-express') +const isEmpty = require('lodash/isEmpty') +const logger = require('@pubsweet/logger') +const errors = require('@pubsweet/errors') +const config = require('config') +const { applyMiddleware } = require('graphql-middleware') + +const schema = require('pubsweet-server/src/graphql/schema') // TODO: Fix import +const loaders = require('pubsweet-server/src/graphql/loaders') // TODO: Fix import + +const authBearerAndPublic = passport.authenticate(['bearer', 'anonymous'], { + session: false, +}) + +const helpers = require('pubsweet-server/src/helpers/authorization') + +const hostname = config.has('pubsweet-server.hostname') + ? config.get('pubsweet-server.hostname') + : 'localhost' + +const extraApolloConfig = config.has('pubsweet-server.apollo') + ? config.get('pubsweet-server.apollo') + : {} + +const getUser = async userId => { + const { User } = require('@pubsweet/models') + return userId ? User.query().findById(userId) : undefined +} + +const permissions = require('../config/permissions') + +const api = app => { + app.use('/graphql', authBearerAndPublic) + const server = new ApolloServer({ + schema: applyMiddleware(schema, permissions), + context: async ({ req, res }) => ({ + helpers, + user: await getUser(req.user), + loaders: loaders(), + models: require('@pubsweet/models'), + }), + formatError: err => { + const error = isEmpty(err.originalError) ? err : err.originalError + + logger.error(error.message, { error }) + + const isPubsweetDefinedError = Object.values(errors).some( + pubsweetError => error instanceof pubsweetError, + ) + // err is always a GraphQLError which should be passed to the client + if (!isEmpty(err.originalError) && !isPubsweetDefinedError) + return { + name: 'Server Error', + message: 'Something went wrong! Please contact your administrator', + } + + return { + name: error.name || 'GraphQLError', + message: error.message, + extensions: { + code: err.extensions.code, + }, + } + }, + playground: { + subscriptionEndpoint: `ws://${hostname}:3000/subscriptions`, + }, + ...extraApolloConfig, + }) + server.applyMiddleware({ app }) +} + +module.exports = api diff --git a/server/model-manuscript/src/graphql.js b/server/model-manuscript/src/graphql.js index 9ee042fe075a094368d5c92e8fdccec58bec7e60..e615f43bea6c281801fcd8f1e8f7ae9cd7eadf0a 100644 --- a/server/model-manuscript/src/graphql.js +++ b/server/model-manuscript/src/graphql.js @@ -30,22 +30,22 @@ const resolvers = { }), status: 'new', submission, - submitterId: ctx.user, + submitterId: ctx.user.id, } // eslint-disable-next-line - const manuscript = await new ctx.connectors.Manuscript.model( + const manuscript = await new ctx.models.Manuscript( emptyManuscript, ).saveGraph() // Create two channels: 1. free for all involved, 2. editorial - const allChannel = new ctx.connectors.Channel.model({ + const allChannel = new ctx.models.Channel({ manuscriptId: manuscript.id, topic: 'Manuscript discussion', type: 'all', }).save() - const editorialChannel = new ctx.connectors.Channel.model({ + const editorialChannel = new ctx.models.Channel({ manuscriptId: manuscript.id, topic: 'Editorial discussion', type: 'editorial', @@ -61,7 +61,7 @@ const resolvers = { }) manuscript.files.push( // eslint-disable-next-line - await new ctx.connectors.File.model(newFile).save(), + await new ctx.models.File(newFile).save(), ) }) @@ -73,7 +73,7 @@ const resolvers = { name: 'Author', objectId: manuscript.id, objectType: 'Manuscript', - members: [{ user: { id: ctx.user } }], + members: [{ user: { id: ctx.user.id } }], }, { relate: true }, ) @@ -84,11 +84,11 @@ const resolvers = { }, async deleteManuscript(_, { id }, ctx) { const deleteManuscript = [] - const manuscript = await ctx.connectors.Manuscript.model.find(id) + const manuscript = await ctx.models.Manuscript.find(id) deleteManuscript.push(manuscript.id) if (manuscript.parentId) { - const parentManuscripts = await ctx.connectors.Manuscript.model.findByField( + const parentManuscripts = await ctx.models.Manuscript.findByField( 'parent_id', manuscript.parentId, ) @@ -101,7 +101,7 @@ const resolvers = { // Delete Manuscript if (deleteManuscript.length > 0) { deleteManuscript.forEach(async manuscript => { - await ctx.connectors.Manuscript.delete(manuscript, ctx) + await ctx.models.Manuscript.query().deleteById(manuscript) }) } return id @@ -143,12 +143,12 @@ const resolvers = { }, async updateManuscript(_, { id, input }, ctx) { const data = JSON.parse(input) - const manuscript = await ctx.connectors.Manuscript.fetchOne(id, ctx) + const manuscript = await ctx.models.Manuscript.findById(id) const update = merge({}, manuscript, data) - return ctx.connectors.Manuscript.update(id, update, ctx) + return ctx.models.Manuscript.update(id, update, ctx) }, async makeDecision(_, { id, decision }, ctx) { - const manuscript = await ctx.connectors.Manuscript.fetchOne(id, ctx) + const manuscript = await ctx.models.Manuscript.findById(id) manuscript.decision = decision manuscript.status = decision @@ -178,7 +178,7 @@ const resolvers = { }, ] manuscript.decision = '' - manuscript.files = await ctx.connectors.File.model.findByObject({ + manuscript.files = await ctx.models.File.findByObject({ object: 'Manuscript', object_id: manuscript.id, }) @@ -190,12 +190,10 @@ const resolvers = { return manuscript }, async manuscripts(_, { where }, ctx) { - return ctx.connectors.Manuscript.fetchAll(where, ctx, { - eager: '[teams, reviews]', - }) + return ctx.models.Manuscript.query().eager('[teams, reviews]') }, async paginatedManuscripts(_, { sort, offset, limit, filter }, ctx) { - const query = ctx.connectors.Manuscript.model.query().eager('submitter') + const query = ctx.models.Manuscript.query().eager('submitter') if (filter && filter.status) { query.where({ status: filter.status }) @@ -391,24 +389,6 @@ const typeDefs = ` notesType: String content: String } - - # type reviewerStatus { - # user: ID! - # status: String - # } - - # input reviewerStatusUpdate { - # user: ID! - # status: String - # } - - # extend type Team { - # status: [reviewerStatus] - # } - - # extend input TeamInput { - # status: [reviewerStatusUpdate] - # } ` module.exports = { diff --git a/server/model-manuscript/src/manuscript.js b/server/model-manuscript/src/manuscript.js index 1377871c62d482d9972ed925790aa47cc44f84ad..129205d139016f9cfd44cca933f491fa077d5956 100644 --- a/server/model-manuscript/src/manuscript.js +++ b/server/model-manuscript/src/manuscript.js @@ -58,7 +58,8 @@ class Manuscript extends BaseModel { } async getReviews() { - const Review = require('../../review/src/review') + // TODO: Use relationships + const Review = require('../../model-review/src/review') const manuscriptReviews = await Review.findByField('manuscript_id', this.id) diff --git a/server/model-message/src/graphql.js b/server/model-message/src/graphql.js index c5cb8146aa27c575cbbe774774bfd67bbd8a291b..34ac6f7778d261ba08a8216d46d8f39532508bc1 100644 --- a/server/model-message/src/graphql.js +++ b/server/model-message/src/graphql.js @@ -43,7 +43,7 @@ const resolvers = { Mutation: { createMessage: async (_, { content, channelId }, context) => { const pubsub = await getPubsub() - const userId = context.user + const userId = context.user.id const savedMessage = await new Message({ content, userId, diff --git a/server/model-message/src/migrations/1585344885-add-messages.sql b/server/model-message/src/migrations/1585344885-add-messages.sql index caad7a3ba769d1e8cf3f9988b9e675b75923317a..3ac17266a2fb24ae2d51b92a20a4fecbc292d3dd 100644 --- a/server/model-message/src/migrations/1585344885-add-messages.sql +++ b/server/model-message/src/migrations/1585344885-add-messages.sql @@ -1,7 +1,7 @@ CREATE TABLE messages ( id UUID PRIMARY KEY, - user_id uuid NOT NULL REFERENCES users(id), - channel_id uuid NOT NULL REFERENCES channels(id), + user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, + channel_id uuid NOT NULL REFERENCES channels(id) ON DELETE CASCADE, created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT current_timestamp, updated TIMESTAMP WITH TIME ZONE, content TEXT diff --git a/server/model-review/src/resolvers.js b/server/model-review/src/resolvers.js index ab90a6ecc39cf9fcf15ea91d2aadeaafa155e49c..90b611e5b4d76d6fc766d058016f5618cd776adb 100644 --- a/server/model-review/src/resolvers.js +++ b/server/model-review/src/resolvers.js @@ -14,7 +14,7 @@ const resolvers = { return rvw } - input.userId = ctx.user + input.userId = ctx.user.id const review = await new Review(input) await review.save() review.comments = await review.getComments() diff --git a/server/model-team/src/graphql.js b/server/model-team/src/graphql.js index 830133ce8eec65a5bd53b772952c011a632f1a20..0f1b08e636c84e1152f854635976f1877c67c873 100644 --- a/server/model-team/src/graphql.js +++ b/server/model-team/src/graphql.js @@ -3,28 +3,32 @@ const eager = '[members.[user, alias]]' const resolvers = { Query: { team(_, { id }, ctx) { - return ctx.connectors.Team.fetchOne(id, ctx, { eager }) + return ctx.models.Team.query() + .findById(id) + .eager(eager) }, teams(_, { where }, ctx) { where = where || {} - if (where.users) { - const { users } = where - delete where.users - where._relations = [{ relation: 'users', ids: users }] - } - - if (where.alias) { - const { alias } = where - delete where.alias - where._relations = [{ relation: 'aliases', object: alias }] - } - - return ctx.connectors.Team.fetchAll(where, ctx, { eager }) + // if (where.users) { + // const { users } = where + // delete where.users + // where._relations = [{ relation: 'users', ids: users }] + // } + + // if (where.alias) { + // const { alias } = where + // delete where.alias + // where._relations = [{ relation: 'aliases', object: alias }] + // } + + return ctx.models.Team.query() + .where(where) + .eager(eager) }, }, Mutation: { deleteTeam(_, { id }, ctx) { - return ctx.connectors.Team.delete(id, ctx) + return ctx.models.Team.query().deleteById(id) }, createTeam(_, { input }, ctx) { const options = { @@ -33,22 +37,29 @@ const resolvers = { allowUpsert: '[members, members.alias]', eager: '[members.[user.teams, alias]]', } - return ctx.connectors.Team.create(input, ctx, options) + return ctx.models.Team.query().insertGraphAndFetch(input, options) }, updateTeam(_, { id, input }, ctx) { - return ctx.connectors.Team.update(id, input, ctx, { - unrelate: false, - eager: 'members.user.teams', - }) + return ctx.models.Team.query().upsertGraphAndFetch( + { + id, + ...input, + }, + { + unrelate: false, + eager: 'members.user.teams', + }, + ) }, }, User: { teams: (parent, _, ctx) => - ctx.connectors.User.fetchRelated(parent.id, 'teams', undefined, ctx), + ctx.models.User.relatedQuery('teams').for(parent.id), }, Team: { - members(team, { where }, ctx) { - return ctx.connectors.Team.fetchRelated(team.id, 'members', where, ctx) + async members(team, { where }, ctx) { + const t = await ctx.models.Team.query().findById(team.id) + return t.$relatedQuery('members') }, object(team, vars, ctx) { const { objectId, objectType } = team @@ -56,21 +67,13 @@ const resolvers = { }, }, TeamMember: { - user(teamMember, vars, ctx) { - return ctx.connectors.TeamMember.fetchRelated( - teamMember.id, - 'user', - undefined, - ctx, - ) + async user(teamMember, vars, ctx) { + const member = await ctx.models.TeamMember.query().findById(teamMember.id) + return member.$relatedQuery('user') }, - alias(teamMember, vars, ctx) { - return ctx.connectors.TeamMember.fetchRelated( - teamMember.id, - 'alias', - undefined, - ctx, - ) + async alias(teamMember, vars, ctx) { + const member = await ctx.models.TeamMember.query().findById(teamMember.id) + return member.$relatedQuery('alias') }, }, } diff --git a/server/model-team/test/1548205275-move-members_test.js b/server/model-team/test/1548205275-move-members_test.js deleted file mode 100644 index c7755647accd0cf7ee0d4654451c2997969563f1..0000000000000000000000000000000000000000 --- a/server/model-team/test/1548205275-move-members_test.js +++ /dev/null @@ -1,50 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - "@pubsweet/model-team", - "@pubsweet/model-fragment" - ] -}}` - -const Team = require('../src/team') -const { model: User } = require('@pubsweet/model-user') -const { dbCleaner } = require('pubsweet-server/test') -const migrate = require('@pubsweet/db-manager/src/commands/migrate') - -describe('Members migration', () => { - it('has successfuly migrated members from array to relationship', async () => { - // Clean database and run up until the migration we're testing - await dbCleaner({ to: '1547596236-initial-team-member-migration.js' }) - - const member1 = await new User({ - email: 'some1@example.com', - username: 'member1', - }).save() - - const member2 = await new User({ - email: 'some2@example.com', - username: 'member2', - }).save() - - // Get a team with the previous members array structure - let team = await new Team({ - name: 'Test', - role: 'globalSeniorEditor', - }).save() - - await Team.raw('UPDATE teams SET members = ?::jsonb WHERE id = ?', [ - JSON.stringify([member1.id, member2.id]), - team.id, - ]) - - // Do the migration - await migrate({ to: '1548205275-move-members.js' }) - - // Check that members have migrated to the relationship - team = await Team.query() - .findById(team.id) - .eager('members') - - expect(team.members).toHaveLength(2) - }) -}) diff --git a/server/model-team/test/1548205276-simplify-object_test.js b/server/model-team/test/1548205276-simplify-object_test.js deleted file mode 100644 index 679170d2c52adb85fad4e9363751d994a67bc628..0000000000000000000000000000000000000000 --- a/server/model-team/test/1548205276-simplify-object_test.js +++ /dev/null @@ -1,40 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - "@pubsweet/model-team", - "@pubsweet/model-fragment" - ] -}}` - -const Team = require('../src/team') -const { dbCleaner } = require('pubsweet-server/test') -const migrate = require('@pubsweet/db-manager/src/commands/migrate') - -describe('Migration to simplify object storage', () => { - it('successfully migrates from JSONB to separate columns', async () => { - // Clean database and run up until the migration we're testing - await dbCleaner({ to: '1548205275-move-members.js' }) - - // Get a team with the previous members array structure - let team = await new Team({ - name: 'Test', - role: 'test', - }).save() - - // Using id and type 'team' here just for testing - await Team.raw('UPDATE teams SET object = ?::jsonb WHERE id = ?', [ - JSON.stringify({ objectId: team.id, objectType: 'team' }), - team.id, - ]) - - // Do the migration - await migrate({ to: '1548205276-simplify-object.js' }) - - // Check that members have migrated to the relationship - team = await Team.query().findById(team.id) - - expect(team.objectId).toEqual(team.id) - expect(team.objectType).toEqual('team') - expect(team.object).toBeUndefined() - }) -}) diff --git a/server/model-team/test/helpers/authsome_mode.js b/server/model-team/test/helpers/authsome_mode.js deleted file mode 100644 index 0f156436b8ab761c0fc37453b3661b238cda1d5b..0000000000000000000000000000000000000000 --- a/server/model-team/test/helpers/authsome_mode.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = async (userId, operation, object, context) => true diff --git a/server/model-team/test/jest-setup.js b/server/model-team/test/jest-setup.js deleted file mode 100644 index 7de2beed55c538a4a39fe8495b07dde62f6db5f9..0000000000000000000000000000000000000000 --- a/server/model-team/test/jest-setup.js +++ /dev/null @@ -1,3 +0,0 @@ -const path = require('path') - -process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config') diff --git a/server/model-team/test/team_graphql_test.js b/server/model-team/test/team_graphql_test.js deleted file mode 100644 index a6cb76d33c9f3dabb071573fb530dd9462a43c00..0000000000000000000000000000000000000000 --- a/server/model-team/test/team_graphql_test.js +++ /dev/null @@ -1,400 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - "@pubsweet/model-team", - "@pubsweet/model-fragment" - ] -}}` - -const { model: User } = require('@pubsweet/model-user') -const { model: Fragment } = require('@pubsweet/model-fragment') - -const { dbCleaner, api } = require('pubsweet-server/test') - -const { fixtures } = require('@pubsweet/model-user/test') -const authentication = require('pubsweet-server/src/authentication') - -const Team = require('../src/team') - -describe('Team queries', () => { - let token - let user - - const whereQuery = async where => { - const { body } = await api.graphql.query( - `query($where: TeamWhereInput) { - teams(where: $where) { - name - object { - objectId - objectType - } - members { - user { - id - } - } - } - }`, - { - where, - }, - token, - ) - return body - } - - beforeEach(async () => { - await dbCleaner() - user = await new User(fixtures.user).save() - token = authentication.token.create(user) - }) - - it("lists a user's teams", async () => { - await Team.query().upsertGraphAndFetch( - { - role: 'test', - name: 'Test', - members: [{ user: { id: user.id } }], - }, - { relate: true, unrelate: true }, - ) - - const { body } = await api.graphql.query( - `query { - users { - id - teams { - members { - user { - id - } - } - } - } - }`, - {}, - token, - ) - - expect(body.data.users[0].teams[0].members[0].user.id).toEqual(user.id) - }) - - it('creates a team with members or without', async () => { - const fragment = await new Fragment({ fragmentType: 'post' }).save() - - const noMembers = [] - const yesMembers = [ - { - user: { id: user.id }, - alias: { email: 'unk@example.com' }, - status: 'invited', - }, - ] - - const promises = [noMembers, yesMembers].map(async members => { - const { body } = await api.graphql.query( - `mutation($input: TeamInput) { - createTeam(input: $input) { - name - members { - user { - id - } - alias { - email - } - status - } - object { - objectId - objectType - } - } - }`, - { - input: { - name: 'My team', - role: 'test', - members, - objectId: fragment.id, - objectType: 'fragment', - }, - }, - token, - ) - - expect(body).toEqual({ - data: { - createTeam: { - name: 'My team', - members, - object: { - objectId: fragment.id, - objectType: 'fragment', - }, - }, - }, - }) - }) - await Promise.all(promises) - }) - - it('can query a team saved directly', async () => { - const team = await new Team({ - name: 'NoMembers', - role: 'test', - members: [], - }).save() - - const { body } = await api.graphql.query( - `query($id: ID) { - team(id: $id) { - name - members { - user { - id - } - } - } - }`, - { id: team.id }, - token, - ) - - expect(body.data.team).toEqual({ - name: 'NoMembers', - members: [], - }) - }) - - it('can update a team and its members', async () => { - const team = await new Team({ name: 'Before', role: 'test' }).save() - const { body } = await api.graphql.query( - `mutation($id: ID, $input: TeamInput) { - updateTeam(id: $id, input: $input) { - name - members { - user { - id - } - } - } - }`, - { - id: team.id, - input: { - name: 'After', - members: [{ user: { id: user.id } }], - }, - }, - token, - ) - - expect(body).toEqual({ - data: { - updateTeam: { - name: 'After', - members: [{ user: { id: user.id } }], - }, - }, - }) - }) - - it('can update a team and also remove members', async () => { - const otherUser = await new User(fixtures.otherUser).save() - const team = await Team.query().upsertGraphAndFetch( - { - role: 'test', - name: 'Test', - members: [{ user: { id: user.id } }, { user: { id: otherUser.id } }], - }, - { relate: true, unrelate: true }, - ) - - const { body } = await api.graphql.query( - `mutation($id: ID, $input: TeamInput) { - updateTeam(id: $id, input: $input) { - name - members { - id - user { - id - } - } - } - }`, - { - id: team.id, - input: { - name: 'After', - members: [{ id: team.members[0].id }], - }, - }, - token, - ) - - expect(body).toEqual({ - data: { - updateTeam: { - name: 'After', - members: [ - { id: team.members[0].id, user: { id: team.members[0].user.id } }, - ], - }, - }, - }) - - // The team should no longer user as a member - const updatedTeam = await Team.query() - .findById(team.id) - .eager('members') - expect(updatedTeam.members).toHaveLength(1) - - // But the user should not be deleted - expect(await User.query()).toHaveLength(2) - }) - - it('finds a team', async () => { - const team = await new Team({ role: 'test', name: 'Test' }).save() - - const { body } = await api.graphql.query( - `query($id: ID) { - team(id: $id) { - name - } - }`, - { id: team.id }, - token, - ) - expect(body.data.team.name).toEqual('Test') - }) - - it('finds a team by role', async () => { - await new Team({ role: 'test1', name: 'Test1' }).save() - await new Team({ role: 'test', name: 'Test' }).save() - - const body = await whereQuery({ - role: 'test', - }) - - expect(body.data.teams).toHaveLength(1) - expect(body.data.teams[0].name).toEqual('Test') - }) - - it('find a team by role and object', async () => { - const fragment = await new Fragment({ fragmentType: 'post' }).save() - - await Team.query().upsertGraph( - { - role: 'test', - name: 'Test', - objectId: fragment.id, - objectType: 'fragment', - members: [{ id: user.id }], - }, - { relate: true, unrelate: true }, - ) - - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - }) - - expect(body.data.teams).toHaveLength(1) - }) - - describe('find a team by role, object, and member', () => { - let fragment - let user2 - - beforeEach(async () => { - fragment = await new Fragment({ fragmentType: 'post' }).save() - user2 = await new User({ - email: 'hi@example.com', - username: 'test2', - }).save() - - await Team.query().upsertGraph( - { - role: 'test', - name: 'Test', - objectId: fragment.id, - objectType: 'fragment', - members: [ - { - user: { id: user.id }, - alias: { - email: 'alias@example.com', - }, - }, - { - user: { id: user2.id }, - }, - ], - }, - { relate: true, unrelate: true }, - ) - }) - - it('finds a team for 1 user (through members)', async () => { - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - users: [user.id], - }) - - expect(body.data.teams).toHaveLength(1) - expect(body.data.teams[0].object).toEqual({ - objectId: fragment.id, - objectType: 'fragment', - }) - expect(body.data.teams[0].members).toHaveLength(2) - }) - - it('finds a team by alias of a member', async () => { - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - alias: { email: 'alias@example.com' }, - }) - expect(body.data.teams).toHaveLength(1) - }) - - it('finds a team for both members', async () => { - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - users: [user.id, user2.id], - }) - - expect(body.data.teams).toHaveLength(1) - }) - - it('does not find a team for non-existent member', async () => { - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - users: ['54513de6-b473-4b39-8f95-bcbb3ae58a2a'], - }) - - expect(body.data.teams).toHaveLength(0) - }) - - it('does not find a team if one of the members is wrong', async () => { - const body = await whereQuery({ - role: 'test', - objectId: fragment.id, - objectType: 'fragment', - users: [user.id, user2.id, '54513de6-b473-4b39-8f95-bcbb3ae58a2a'], - }) - - expect(body.data.teams).toHaveLength(0) - }) - }) -}) diff --git a/server/model-team/test/team_test.js b/server/model-team/test/team_test.js deleted file mode 100644 index bb6989fda9585059cd07403419076f099f3e3589..0000000000000000000000000000000000000000 --- a/server/model-team/test/team_test.js +++ /dev/null @@ -1,128 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - "@pubsweet/model-team", - "@pubsweet/model-fragment" - ] -}}` - -const Team = require('../src/team') -const { model: User } = require('@pubsweet/model-user') -const { dbCleaner } = require('pubsweet-server/test') - -const createTeamWithMember = async () => { - const user = await new User({ - email: 'some@example.com', - username: 'test', - }).save() - - const team = await Team.query().upsertGraphAndFetch( - { - name: 'Test', - role: 'testRole', - members: [{ user: { id: user.id } }], - }, - { relate: true }, - ) - - return { user, team } -} - -describe('Team', () => { - beforeEach(async () => { - await dbCleaner() - }) - - it('has updated set when created', async () => { - const team = await new Team({ - name: 'Test', - role: 'globalSeniorEditor', - }).save() - expect(team.role).toEqual('globalSeniorEditor') - const now = new Date().toISOString() - expect(team.updated.toISOString()).toHaveLength(now.length) - }) - - it('can be saved and found and deleted', async () => { - const team = await new Team({ name: 'Test', role: 'testRole' }).save() - expect(team.name).toEqual('Test') - - const foundTeam = await Team.find(team.id) - expect(foundTeam.name).toEqual('Test') - - await foundTeam.delete() - - async function tryToFind() { - await Team.find(foundTeam.id) - } - await expect(tryToFind()).rejects.toThrow('Object not found') - }) - - it('can have some members', async () => { - const newTeam = (await createTeamWithMember()).team - const team = await Team.query() - .findById(newTeam.id) - .eager('members') - - expect(team.members).toHaveLength(1) - }) - - it('deletes memberships after team is deleted', async () => { - const { team, user } = await createTeamWithMember() - - let foundUser = await User.query() - .findById(user.id) - .eager('teams') - - expect(foundUser.teams).toHaveLength(1) - - await Team.query().deleteById(team.id) - - foundUser = await User.query() - .findById(user.id) - .eager('teams') - - expect(foundUser.teams).toHaveLength(0) - }) - - it('creates team and related objects with one call', async () => { - const user = await new User({ - email: 'some@example.com', - username: 'test', - }).save() - - const team = await Team.query().upsertGraphAndFetch( - { - role: 'test', - name: 'My team', - objectId: '5989b23c-356b-4ae9-bee5-bbd11f29028b', - objectType: 'fragment', - members: [ - { - user: { id: user.id }, - alias: { - email: 'someemail', - aff: 'someaff', - name: 'somename', - }, - status: 'invited', - }, - ], - }, - { - relate: true, - unrelate: true, - }, - ) - - expect(team.members).toHaveLength(1) - expect(team.members[0].id).toBeDefined() - expect(team.members[0].alias.id).toBeDefined() - expect(team.members[0].user.id).toBe(user.id) - - const userWithTeams = await User.query() - .findById(user.id) - .eager('teams') - expect(userWithTeams.teams[0].id).toBe(team.id) - }) -}) diff --git a/server/model-user/src/graphql.js b/server/model-user/src/graphql.js index 2cc0698de92cfbc0edc5032069d04eae2d7138f8..56565dd4a4645070bf9d86913cd82d012e87b102 100644 --- a/server/model-user/src/graphql.js +++ b/server/model-user/src/graphql.js @@ -1,18 +1,16 @@ const logger = require('@pubsweet/logger') const { AuthorizationError, ConflictError } = require('@pubsweet/errors') -const eager = undefined - const resolvers = { Query: { user(_, { id }, ctx) { - return ctx.connectors.User.fetchOne(id, ctx, { eager }) + return ctx.models.User.query().findById(id) }, async users(_, vars, ctx) { - return ctx.connectors.User.model.query() + return ctx.models.User.query() }, async paginatedUsers(_, { sort, offset, limit, filter }, ctx) { - const query = ctx.connectors.User.model.query() + const query = ctx.models.User.query() if (filter && filter.admin) { query.where({ admin: true }) @@ -39,21 +37,23 @@ const resolvers = { users, } - // return ctx.connectors.User.fetchAll(where, ctx, { eager }) + // return ctx.models.User.fetchAll(where, ctx, { eager }) }, // Authentication - currentUser(_, vars, ctx) { + async currentUser(_, vars, ctx) { if (!ctx.user) return null - return ctx.connectors.User.model.find(ctx.user, { eager }) + const user = await ctx.models.User.find(ctx.user.id) + user._currentRoles = await user.currentRoles() + return user }, searchUsers(_, { teamId, query }, ctx) { if (teamId) { - return ctx.connectors.User.model + return ctx.models.User.model .query() .where({ teamId }) .where('username', 'ilike', `${query}%`) } - return ctx.connectors.User.model + return ctx.models.User.model .query() .where('username', 'ilike', `${query}%`) }, @@ -63,9 +63,7 @@ const resolvers = { const user = { username: input.username, email: input.email, - passwordHash: await ctx.connectors.User.model.hashPassword( - input.password, - ), + passwordHash: await ctx.models.User.hashPassword(input.password), } const identity = { @@ -77,7 +75,7 @@ const resolvers = { user.defaultIdentity = identity try { - const result = await ctx.connectors.User.create(user, ctx, { + const result = await ctx.models.User.create(user, ctx, { eager: 'defaultIdentity', }) @@ -93,17 +91,15 @@ const resolvers = { } }, deleteUser(_, { id }, ctx) { - return ctx.connectors.User.delete(id, ctx) + return ctx.models.User.delete(id, ctx) }, async updateUser(_, { id, input }, ctx) { if (input.password) { - input.passwordHash = await ctx.connectors.User.model.hashPassword( - input.password, - ) + input.passwordHash = await ctx.models.User.hashPassword(input.password) delete input.password } - return ctx.connectors.User.update(id, input, ctx) + return ctx.models.User.update(id, input, ctx) }, // Authentication async loginUser(_, { input }, ctx) { @@ -112,7 +108,7 @@ const resolvers = { let isValid = false let user try { - user = await ctx.connectors.User.model.findByUsername(input.username) + user = await ctx.models.User.findByUsername(input.username) isValid = await user.validPassword(input.password) } catch (err) { logger.debug(err) @@ -126,7 +122,7 @@ const resolvers = { } }, async updateCurrentUsername(_, { username }, ctx) { - const user = await ctx.connectors.User.model.find(ctx.user) + const user = await ctx.models.User.find(ctx.user) user.username = username await user.save() return user @@ -134,16 +130,15 @@ const resolvers = { }, User: { async defaultIdentity(parent, args, ctx) { - const identity = await ctx.connectors.Identity.model - .query() + const identity = await ctx.models.Identity.query() .where({ userId: parent.id, isDefault: true }) .first() return identity }, async identities(parent, args, ctx) { - const identities = await ctx.connectors.Identity.model - .query() - .where({ userId: parent.id }) + const identities = await ctx.models.Identity.query().where({ + userId: parent.id, + }) return identities }, }, @@ -205,9 +200,17 @@ const typeDefs = ` defaultIdentity: Identity profilePicture: String online: Boolean + _currentRoles: [CurrentRole] + _currentGlobalRoles: [String] + } + + type CurrentRole { + id: ID + roles: [String] } interface Identity { + id: ID name: String aff: String # JATS <aff> email: String # JATS <aff> @@ -218,6 +221,7 @@ const typeDefs = ` # local identity (not from ORCID, etc.) type LocalIdentity implements Identity { + id: ID name: String email: String aff: String @@ -225,6 +229,7 @@ const typeDefs = ` } type ExternalIdentity implements Identity { + id: ID name: String identifier: String email: String diff --git a/server/model-user/src/user.js b/server/model-user/src/user.js index 468f9d470f6af4a510a59ec609a7cc467bc97136..fd8b6986db9db2826cfd01a66419c5f3f4686e72 100644 --- a/server/model-user/src/user.js +++ b/server/model-user/src/user.js @@ -53,6 +53,7 @@ class User extends BaseModel { modelClass: TeamMember, from: 'team_members.userId', to: 'team_members.teamId', + extra: ['status'], }, to: 'teams.id', }, @@ -78,12 +79,38 @@ class User extends BaseModel { } } - // eslint-disable-next-line class-methods-use-this - setOwners() { - // FIXME: this is overriden to be a no-op, because setOwners() is called by - // the API on create for all entity types and setting `owners` on a User is - // not allowed. This should instead be solved by having separate code paths - // in the API for different entity types. + // // eslint-disable-next-line class-methods-use-this + // setOwners() { + // // FIXME: this is overriden to be a no-op, because setOwners() is called by + // // the API on create for all entity types and setting `owners` on a User is + // // not allowed. This should instead be solved by having separate code paths + // // in the API for different entity types. + // } + + // This gives a view of the teams and team member structure to reflect + // the current roles the user is performing. E.g. if they are a member + // of a reviewer team and have the status of 'accepted', they will + // have a 'accepted:reviewer' role present in the returned object + async currentRoles(object) { + let teams + if (object && object.id) { + teams = await this.$relatedQuery('teams').where('objectId', object.id) + } else { + teams = await this.$relatedQuery('teams') + } + const roles = {} + + teams.forEach(t => { + const role = `${t.status ? `${t.status}:` : ''}${t.role}` + + // If there's an existing role for this object, add to the list + if (t.objectId && Array.isArray(roles[t.objectId])) { + roles[t.objectId].push(role) + } else if (t.objectId) { + roles[t.objectId] = [role] + } + }) + return Object.keys(roles).map(id => ({ id, roles: roles[id] })) } async save() { diff --git a/server/model-user/test/1581371297-migrate-users-to-identities_test.js b/server/model-user/test/1581371297-migrate-users-to-identities_test.js deleted file mode 100644 index 9bf1285525962241664fd7fc94ffa6e7e3796d69..0000000000000000000000000000000000000000 --- a/server/model-user/test/1581371297-migrate-users-to-identities_test.js +++ /dev/null @@ -1,45 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - ] -}}` - -const { User } = require('@pubsweet/models') -const { dbCleaner } = require('pubsweet-server/test') -const migrate = require('@pubsweet/db-manager/src/commands/migrate') - -describe('Users to Identities migration', () => { - it('has successfuly created new default identities', async () => { - await dbCleaner({ to: '1580908536-add-identities.sql' }) - - const user1 = await new User({ - email: 'some1@example.com', - username: 'user1', - password: 'test1', - }).save() - - const user2 = await new User({ - email: 'some2@example.com', - username: 'user2', - password: 'test2', - }).save() - - // Do the migration - await migrate({ to: '1581371297-migrate-users-to-identities.js' }) - - const user1after = await User.find(user1.id, { - eager: '[identities,defaultIdentity]', - }) - const user2after = await User.find(user2.id, { - eager: '[identities,defaultIdentity]', - }) - - expect(user1after.defaultIdentity).toBeTruthy() - expect(user1after.identities).toHaveLength(1) - expect(await user1after.validPassword('test1')).toBe(true) - - expect(user2after.defaultIdentity).toBeTruthy() - expect(user2after.identities).toHaveLength(1) - expect(await user2after.validPassword('test2')).toBe(true) - }) -}) diff --git a/server/model-user/test/fixtures.js b/server/model-user/test/fixtures.js deleted file mode 100644 index b6cc1725827d2e2c04251ddff088931055c12717..0000000000000000000000000000000000000000 --- a/server/model-user/test/fixtures.js +++ /dev/null @@ -1,36 +0,0 @@ -module.exports = { - user: { - type: 'user', - username: 'testuser', - email: 'test@example.com', - password: 'test', - }, - - updatedUser: { - username: 'changeduser', - email: 'changed@example.com', - password: 'changed', - }, - - otherUser: { - type: 'user', - username: 'anotheruser', - email: 'another@example.com', - password: 'rubgy', - }, - - localIdentity: { - name: 'Someone', - aff: 'University of PubSweet', - type: 'local', - }, - - externalIdentity: { - type: 'external', - identifier: 'orcid', - oauth: { - accessToken: 'someAccessToken', - refreshToken: 'someRefreshToken', - }, - }, -} diff --git a/server/model-user/test/helpers/authsome_mode.js b/server/model-user/test/helpers/authsome_mode.js deleted file mode 100644 index 0f156436b8ab761c0fc37453b3661b238cda1d5b..0000000000000000000000000000000000000000 --- a/server/model-user/test/helpers/authsome_mode.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = async (userId, operation, object, context) => true diff --git a/server/model-user/test/identity_test.js b/server/model-user/test/identity_test.js deleted file mode 100644 index 18d6aaf004e64146a045b09e42f2d7e052124fb7..0000000000000000000000000000000000000000 --- a/server/model-user/test/identity_test.js +++ /dev/null @@ -1,80 +0,0 @@ -const { dbCleaner } = require('pubsweet-server/test') -const fixtures = require('./fixtures') -const Identity = require('../src/identity') -const User = require('../src/user') - -describe('Identity', () => { - beforeEach(async () => { - await dbCleaner() - }) - - it('can create a user with a default local identity', async () => { - const user = await new User(fixtures.user).save() - const defaultIdentity = await new Identity({ - ...fixtures.localIdentity, - userId: user.id, - isDefault: true, - }).save() - - const savedUser = await User.find(user.id, { eager: 'defaultIdentity' }) - expect(savedUser.defaultIdentity).toEqual(defaultIdentity) - }) - - it('can create a user with a local and a default oauth identity', async () => { - let user = await new User(fixtures.user).save() - - const localIdentity = await new Identity({ - ...fixtures.localIdentity, - userId: user.id, - }).save() - - const externalIdentity = await new Identity({ - ...fixtures.externalIdentity, - userId: user.id, - isDefault: true, - }).save() - - user = await User.find(user.id, { eager: '[identities, defaultIdentity]' }) - - expect(user.identities).toContainEqual(localIdentity) - expect(user.identities).toContainEqual(externalIdentity) - expect(user.defaultIdentity).toEqual(externalIdentity) - }) - - it('user can not have more than one default identities', async () => { - const user = await new User(fixtures.user).save() - - await new Identity({ - ...fixtures.localIdentity, - userId: user.id, - isDefault: true, - }).save() - - const externalIdentity = new Identity({ - ...fixtures.externalIdentity, - userId: user.id, - isDefault: true, - }).save() - - await expect(externalIdentity).rejects.toThrow('violates unique constraint') - }) - - it('can have multiple non-default identities (isDefault = false)', async () => { - const user = await new User(fixtures.user).save() - - await new Identity({ - ...fixtures.localIdentity, - userId: user.id, - isDefault: false, - }).save() - - await new Identity({ - ...fixtures.externalIdentity, - userId: user.id, - isDefault: false, - }).save() - - const foundUser = await User.find(user.id, { eager: 'identities' }) - expect(foundUser.identities).toHaveLength(2) - }) -}) diff --git a/server/model-user/test/index.js b/server/model-user/test/index.js deleted file mode 100644 index b471deb5bba58deb1ee350994a8aa45bd3f62bf9..0000000000000000000000000000000000000000 --- a/server/model-user/test/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - fixtures: require('./fixtures'), -} diff --git a/server/model-user/test/jest-setup.js b/server/model-user/test/jest-setup.js deleted file mode 100644 index 7de2beed55c538a4a39fe8495b07dde62f6db5f9..0000000000000000000000000000000000000000 --- a/server/model-user/test/jest-setup.js +++ /dev/null @@ -1,3 +0,0 @@ -const path = require('path') - -process.env.NODE_CONFIG_DIR = path.resolve(__dirname, '..', 'config') diff --git a/server/model-user/test/user_graphql_test.js b/server/model-user/test/user_graphql_test.js deleted file mode 100644 index 63400ad898333315af513350c41a136e709d4c67..0000000000000000000000000000000000000000 --- a/server/model-user/test/user_graphql_test.js +++ /dev/null @@ -1,133 +0,0 @@ -process.env.NODE_CONFIG = `{"pubsweet":{ - "components":[ - "@pubsweet/model-user", - "@pubsweet/model-team" - ] -}}` - -const User = require('../src/user') -const { dbCleaner, api } = require('pubsweet-server/test') - -const { fixtures } = require('@pubsweet/model-user/test') -const authentication = require('pubsweet-server/src/authentication') - -describe('User mutations', () => { - beforeEach(async () => { - await dbCleaner() - }) - - it('a user can sign up', async () => { - const { body } = await api.graphql.query( - `mutation($input: UserInput) { - createUser(input: $input) { - username - defaultIdentity { - ... on Local { - email - } - } - } - }`, - { - input: { - username: 'hi', - email: 'hi@example.com', - password: 'hello', - }, - }, - ) - - expect(body).toEqual({ - data: { - createUser: { - username: 'hi', - defaultIdentity: { - email: 'hi@example.com', - }, - }, - }, - }) - }) - - it('errors when duplicate username or emails are used', async () => { - await api.graphql.query( - `mutation($input: UserInput) { - createUser(input: $input) { - username - } - }`, - { - input: { - username: 'hi', - email: 'hi@example.com', - password: 'hello', - }, - }, - ) - - const { body: body2 } = await api.graphql.query( - `mutation($input: UserInput) { - createUser(input: $input) { - username - } - }`, - { - input: { - username: 'hi', - email: 'hi@example.com', - password: 'hello', - }, - }, - ) - - expect(body2).toEqual({ - data: { - createUser: null, - }, - errors: [ - { - extensions: { - code: 'INTERNAL_SERVER_ERROR', - }, - message: 'User with this username or email already exists', - name: 'ConflictError', - }, - ], - }) - }) - - it('a user can update a password', async () => { - const user = await new User(fixtures.user).save() - const token = authentication.token.create(user) - - const { body } = await api.graphql.query( - `mutation($id: ID, $input: UserInput) { - updateUser(id: $id, input: $input) { - username - } - }`, - { - id: user.id, - input: { - username: 'hi', - email: 'hi@example.com', - password: 'hello2', - }, - }, - token, - ) - - expect(body).toEqual({ - data: { - updateUser: { - username: 'hi', - }, - }, - }) - - const oldHash = user.passwordHash - const newHash = await User.find(user.id).passwordHash - - expect(oldHash).not.toEqual(newHash) - }) -}) diff --git a/server/model-user/test/user_test.js b/server/model-user/test/user_test.js deleted file mode 100644 index d09e9fbd73a7cd324e126feda881adde9e3a78d6..0000000000000000000000000000000000000000 --- a/server/model-user/test/user_test.js +++ /dev/null @@ -1,136 +0,0 @@ -const { dbCleaner } = require('pubsweet-server/test') -const fixtures = require('./fixtures') -const User = require('../src/user') - -describe('User', () => { - beforeEach(async () => { - await dbCleaner() - }) - - it('validates passwords correctly after saving to db', async () => { - const user = new User(fixtures.user) - await user.save() - - const savedUser = await User.findByUsername(user.username) - expect(typeof savedUser).toBe('object') - - const shouldBeValid = await savedUser.validPassword(fixtures.user.password) - expect(shouldBeValid).toEqual(true) - - const shouldBeInvalid = await savedUser.validPassword('wrongpassword') - expect(shouldBeInvalid).toEqual(false) - }) - - it('raises an error if trying to save a user with a non-unique username', async () => { - const user = new User(fixtures.user) - const otherUserFixture = fixtures.otherUser - otherUserFixture.username = fixtures.user.username - const duplicateUser = new User(otherUserFixture) - - await user.save() - await expect(duplicateUser.save()).rejects.toThrow( - 'violates unique constraint', - ) - - expect.hasAssertions() - }) - - it('raises an error if trying to save a user with a non-unique email', async () => { - const user = new User(fixtures.user) - const otherUserFixture = fixtures.otherUser - otherUserFixture.email = fixtures.user.email - const duplicateUser = new User(otherUserFixture) - - await user.save() - await expect(duplicateUser.save()).rejects.toThrow( - 'violates unique constraint', - ) - - expect.hasAssertions() - }) - - it('uses custom JSON serialization', async () => { - const user = new User(fixtures.user) - await user.save() - - const savedUser = await User.findByUsername(user.username) - expect(savedUser).toHaveProperty('username', user.username) - expect(savedUser).toHaveProperty('passwordHash') - - const stringifiedUser = JSON.parse(JSON.stringify(savedUser)) - expect(stringifiedUser).toHaveProperty('username', user.username) - expect(stringifiedUser).not.toHaveProperty('passwordHash') - }) - - it('uses custom JSON serialization in an array', async () => { - const users = [ - { username: 'user1', email: 'user-1@example.com', password: 'foo1' }, - { username: 'user2', email: 'user-2@example.com', password: 'foo2' }, - { username: 'user3', email: 'user-3@example.com', password: 'foo3' }, - ] - - await Promise.all(users.map(user => new User(user).save())) - - const savedUsers = await User.all() - - const savedUser = savedUsers[2] - expect(savedUser).toHaveProperty('username') - expect(savedUser).toHaveProperty('passwordHash') - - const stringifiedUsers = JSON.parse(JSON.stringify(savedUsers)) - const stringifiedUser = stringifiedUsers[2] - - expect(stringifiedUser).toHaveProperty('username', savedUser.username) - expect(stringifiedUser).not.toHaveProperty('passwordHash') - }) - - it('finds a list of users', async () => { - const users = [ - { username: 'user1', email: 'user-1@example.com', password: 'foo1' }, - { username: 'user2', email: 'user-2@example.com', password: 'foo2' }, - { username: 'user3', email: 'user-3@example.com', password: 'foo3' }, - ] - - await Promise.all(users.map(user => new User(user).save())) - - const items = await User.findByField('email', 'user-1@example.com') - - expect(items).toHaveLength(1) - expect(items[0]).toBeInstanceOf(User) - }) - - it('finds a single user by field', async () => { - const users = [ - { username: 'user1', email: 'user-1@example.com', password: 'foo1' }, - { username: 'user2', email: 'user-2@example.com', password: 'foo2' }, - { username: 'user3', email: 'user-3@example.com', password: 'foo3' }, - ] - - await Promise.all(users.map(user => new User(user).save())) - - const item = await User.findOneByField('email', 'user-1@example.com') - - expect(item).toBeInstanceOf(User) - - expect(item).toEqual( - expect.objectContaining({ - username: 'user1', - email: 'user-1@example.com', - }), - ) - }) - - it('fails password verification if passwordHash is not present', async () => { - const fixtureWithoutPassword = Object.assign({}, fixtures.user) - delete fixtureWithoutPassword.password - - const user = await new User(fixtureWithoutPassword).save() - - const validPassword1 = await user.validPassword(undefined) - expect(validPassword1).toEqual(false) - const validPassword2 = await user.validPassword(null) - expect(validPassword2).toEqual(false) - const validPassword3 = await user.validPassword('somethingfunky') - expect(validPassword3).toEqual(false) - }) -}) diff --git a/server/subscriptions.js b/server/subscriptions.js index f2a234b6bda4cb6893e30699948a3b7d9e713a59..f4f2de1fbfde074e091a91a262ae0d83c7251b7a 100644 --- a/server/subscriptions.js +++ b/server/subscriptions.js @@ -11,7 +11,7 @@ const { token } = require('pubsweet-server/src/authentication') // TODO: Fix imp module.exports = { addSubscriptions: server => { - const connectors = require('pubsweet-server/src/connectors') + const models = require('@pubsweet/models') const helpers = require('pubsweet-server/src/helpers/authorization') const { User } = require('@pubsweet/models') @@ -31,23 +31,25 @@ module.exports = { reject(new Error('Bad auth token')) } - resolve({ user: id, connectors, helpers }) + resolve({ userId: id, models, helpers }) }) }) - console.log('I AM ALIVE!') // Record a user's online status - await User.query() - .update({ online: true }) - .where('id', addTocontext.user) + const user = await User.query().updateAndFetchById( + addTocontext.userId, + { online: true }, + ) + + addTocontext.user = user return addTocontext }, onDisconnect: async (webSocket, context) => { const initialContext = await context.initPromise // Record that a user is no longer online - if (initialContext.user) { + if (initialContext.user && initialContext.user.id) { await User.query() .update({ online: false }) - .where('id', initialContext.user) + .where('id', initialContext.user.id) } }, }, diff --git a/server/wax-collab/server-util.js b/server/wax-collab/server-util.js index ea3df4e5f9d2b4e3b877ac92279b5fe0a194269f..f6e4038b37d39061a3c7a0b0e51755c01d1c5114 100644 --- a/server/wax-collab/server-util.js +++ b/server/wax-collab/server-util.js @@ -1,3 +1,4 @@ +/* eslint-disable */ const Y = require('yjs') const syncProtocol = require('y-protocols/dist/sync.cjs') const awarenessProtocol = require('y-protocols/dist/awareness.cjs') diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index 739716e10f9376ce71e20935a0d93da78921f148..0f9449a6d39e559a60b3ad841f007cafe8077143 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -39,6 +39,7 @@ module.exports = webpackEnv => { '/graphql': 'http://localhost:3000', '/uploads': 'http://locahost:3000', '/static/profiles': 'http://localhost:3000', + '/public': 'http://localhost:3000', }, historyApiFallback: true, }, diff --git a/yarn.lock b/yarn.lock index 6e987ccce202abb117114de15cc8fcb8f161f0ea..7f7ed6a8d66ffc574717b5fb5ba1eafeca60d319 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,24 @@ # yarn lockfile v1 +"@apollo/client@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.0.2.tgz#fadb2b39a0e32950baaef2566442cb3f6de74a52" + integrity sha512-4ighan5Anlj4tK/tdUHs4Mi1njqXZ7AxRCVolz/H702DjPphAJfm+FRkIadPTmwz+OLO+d+tX+6V1VBshf02rg== + dependencies: + "@types/zen-observable" "^0.8.0" + "@wry/context" "^0.5.2" + "@wry/equality" "^0.1.9" + fast-json-stable-stringify "^2.0.0" + graphql-tag "^2.10.4" + hoist-non-react-statics "^3.3.2" + optimism "^0.12.1" + prop-types "^15.7.2" + symbol-observable "^1.2.0" + ts-invariant "^0.4.4" + tslib "^1.10.0" + zen-observable "^0.8.14" + "@apollo/protobufjs@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.0.4.tgz#cf01747a55359066341f31b5ce8db17df44244e0" @@ -77,406 +95,426 @@ dependencies: apollo-env "^0.6.5" -"@apollographql/graphql-playground-html@1.6.24": - version "1.6.24" - resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc" - integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ== +"@apollographql/graphql-playground-html@1.6.26": + version "1.6.26" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz#2f7b610392e2a872722912fc342b43cf8d641cb3" + integrity sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ== + dependencies: + xss "^1.0.6" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.10.1": +"@babel/code-frame@^7.0.0-beta.35": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== dependencies: "@babel/highlight" "^7.10.1" -"@babel/compat-data@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" - integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== +"@babel/compat-data@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.5.tgz#d38425e67ea96b1480a3f50404d1bf85676301a6" + integrity sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw== dependencies: browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" "@babel/core@^7.0.0": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" - integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== - dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.2" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.2" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.2" + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.5" + "@babel/types" "^7.10.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" json5 "^2.1.2" - lodash "^4.17.13" + lodash "^4.17.19" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.10.1", "@babel/generator@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" - integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== +"@babel/generator@^7.10.1", "@babel/generator@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" + integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== dependencies: - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.5" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.1": +"@babel/helper-annotate-as-pure@^7.0.0": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== dependencies: "@babel/types" "^7.10.1" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" - integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx-experimental@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8" - integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-module-imports" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532" - integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw== +"@babel/helper-builder-react-jsx-experimental@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz#f35e956a19955ff08c1258e44a515a6d6248646b" + integrity sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/types" "^7.10.5" -"@babel/helper-compilation-targets@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" - integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== dependencies: - "@babel/compat-data" "^7.10.1" + "@babel/compat-data" "^7.10.4" browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.10.1": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" - integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - -"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" - integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-regex" "^7.10.1" +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" - integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/types" "^7.10.1" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" - integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== - dependencies: - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" - integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-get-function-arity@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" - integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-hoist-variables@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" - integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-member-expression-to-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" - integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" - integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-module-transforms@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" - integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== - dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" - integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" - integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== - -"@babel/helper-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" - integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" - integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-wrap-function" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-replace-supers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" - integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-simple-access@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" - integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== - dependencies: - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-split-export-declaration@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" - integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + dependencies: + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-validator-identifier@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" - integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== - -"@babel/helper-wrap-function@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" - integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helpers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" - integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== - dependencies: - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/highlight@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" - integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== - dependencies: - "@babel/helper-validator-identifier" "^7.10.1" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== + dependencies: + "@babel/types" "^7.10.5" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" + integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.10.1", "@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.1", "@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.1", "@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.7.0": +"@babel/parser@^7.10.1", "@babel/parser@^7.10.4", "@babel/parser@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + +"@babel/parser@^7.7.0": version "7.10.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== -"@babel/plugin-proposal-async-generator-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" - integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" - integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-proposal-decorators@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz#9373c2d8db45345c6e30452ad77b469758e5c8f7" - integrity sha512-xBfteh352MTke2U1NpclzMDmAmCdQ2fBZjhZQQfGTjXw6qcRYMkt528sA1U8o0ThDCSeuETXIj5bOGdxN+5gkw== + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-decorators" "^7.10.1" + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" - integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-proposal-export-namespace-from@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.1.tgz#512ee069cd866256600bdf89639cf7e1b51fbfe9" - integrity sha512-eR4CoYb6mh5y9LWjnb4CyUatuhtZ8pNLXLDi46GkqtF7WPafFqXycHdvF5qWviozZVGRSAmHzdayc8wUReCdjA== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-function-sent@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.10.1.tgz#e9ffe9df5348e2694d6679f8fd0897acf14326d7" - integrity sha512-mpfEbRcwHvDA6k19ZFsGkW4Q+AF7DekafKTTfn2Ihz1cs6/qL+KgAJlcHBY6XnW1OW1zDaNCR0i28Blonl8/Bg== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.10.4.tgz#05f2daef7b3f09b6c74c9e8a85b430272d206ac4" + integrity sha512-aBtve/DhQsVPAGnSDcgt33gF36rO0TK+KtHp9Hwtj3KwH+o1Cii9vfVVYeB9c6Jo1SXOgTRwRD7ljpTS0qbN8w== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-wrap-function" "^7.10.1" - "@babel/plugin-syntax-function-sent" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/plugin-syntax-function-sent" "^7.10.4" -"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" - integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== +"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" - integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.0.0", "@babel/plugin-proposal-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" - integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== +"@babel/plugin-proposal-numeric-separator@^7.0.0", "@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" - integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== +"@babel/plugin-proposal-object-rest-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" - integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" - integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== +"@babel/plugin-proposal-optional-chaining@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7" + integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-private-methods@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" - integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-proposal-throw-expressions@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.10.1.tgz#89bde971b6081bfecff832c811ad76c2337c6970" - integrity sha512-wyhTn1ebUbbphDJVVUpg1wikUOIW8Lg93ng0aDGv07+MxINPS4d0ju68JVH06W4oMnZTwgELA5AImrah9RULYA== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.10.4.tgz#501154a3c1b33cb1ad5b899204481fa2859cd3f3" + integrity sha512-m7K9duXeH/rko36i9G9seLOg2AVdeVTn65k8nnTxgozex0hkDSUr6cktJxTO7jElGEpmMz410pTs0Jn8+empxw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-throw-expressions" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-throw-expressions" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" - integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" @@ -485,19 +523,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" - integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-decorators@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz#16b869c4beafc9a442565147bda7ce0967bd4f13" - integrity sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g== +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" + integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -513,19 +551,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-function-sent@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.10.1.tgz#42a03af38dd7f46121c97c67d032da4749792478" - integrity sha512-Ze/5A9mFucmT7UyEA8D60YijmclEZQp3kjzbbEImWnyMLmjE/3S5x7lkCr+W7g2wc00nqk1QLsloa4+1EiHULA== +"@babel/plugin-syntax-function-sent@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.10.4.tgz#b551f38b629e2e20908e53624f96f9ab300f5061" + integrity sha512-dwElaRoDQhlVevbgKOlEUTe08QNJo4ZjWw3rqnMbEvH8NRJM+iPN2tTQtzyfNloXD8f3Jdiyf5Pn400B1U3SVA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-import-meta@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz#3e59120ed8b3c2ccc5abb1cfc7aaa3ea01cd36b6" - integrity sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" @@ -534,12 +572,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da" - integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ== +"@babel/plugin-syntax-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" @@ -548,12 +586,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" - integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -576,393 +614,392 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-throw-expressions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.10.1.tgz#09a88bacf2ad8af7a465af5e910a61d93136b147" - integrity sha512-1ieYCCX6HCEvBefYt1Njja2XFrbThi2pffdfpPeB7WzVwbX/UlVOrPw9WSPQyVoyo+kqO0l/KGRNZyrTKo0bew== +"@babel/plugin-syntax-throw-expressions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.10.4.tgz#a588df9fa2203207a3ac7e35f0db3b67bf68eca3" + integrity sha512-Yac/4W71+JdAiOV3aLbnUUe2R0NZzNvdy5EqdauFnBQTxIXT58M89lOplIFVELTSus6PxFMjmbi2vXaJDiV/PQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-top-level-await@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" - integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" - integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" - integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" - integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" - integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" - integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-define-map" "^7.10.1" - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" - integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" - integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" - integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" - integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" - integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" - integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" - integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" - integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" - integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" - integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" - integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" - integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== dependencies: - "@babel/helper-hoist-variables" "^7.10.1" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" - integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-new-target@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" - integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" - integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" - integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" - integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-display-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef" - integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ== +"@babel/plugin-transform-react-display-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d" + integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-development@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3" - integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg== +"@babel/plugin-transform-react-jsx-development@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz#6ec90f244394604623880e15ebc3c34c356258ba" + integrity sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ== dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx-self@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821" - integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA== +"@babel/plugin-transform-react-jsx-self@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369" + integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-jsx" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx-source@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273" - integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA== +"@babel/plugin-transform-react-jsx-source@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4" + integrity sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-jsx" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896" - integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw== +"@babel/plugin-transform-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" + integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== dependencies: - "@babel/helper-builder-react-jsx" "^7.10.1" - "@babel/helper-builder-react-jsx-experimental" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-pure-annotations@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70" - integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA== +"@babel/plugin-transform-react-pure-annotations@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501" + integrity sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" - integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" - integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" - integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" - integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== +"@babel/plugin-transform-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" + integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-sticky-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" - integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-regex" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" - integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" - integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-escapes@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" - integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" - integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/polyfill@^7.4.3": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.1.tgz#d56d4c8be8dd6ec4dce2649474e9b707089f739f" - integrity sha512-TviueJ4PBW5p48ra8IMtLXVkDucrlOZAIZ+EXqS3Ot4eukHbWiqcn7DcqpA1k5PcKtmJ4Xl9xwdv6yQvvcA+3g== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.4.tgz#915e5bfe61490ac0199008e35ca9d7d151a8e45a" + integrity sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.4" "@babel/preset-env@^7.0.0": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" - integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== - dependencies: - "@babel/compat-data" "^7.10.1" - "@babel/helper-compilation-targets" "^7.10.2" - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-proposal-async-generator-functions" "^7.10.1" - "@babel/plugin-proposal-class-properties" "^7.10.1" - "@babel/plugin-proposal-dynamic-import" "^7.10.1" - "@babel/plugin-proposal-json-strings" "^7.10.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" - "@babel/plugin-proposal-numeric-separator" "^7.10.1" - "@babel/plugin-proposal-object-rest-spread" "^7.10.1" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" - "@babel/plugin-proposal-optional-chaining" "^7.10.1" - "@babel/plugin-proposal-private-methods" "^7.10.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" + integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw== + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.1" + "@babel/plugin-syntax-class-properties" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.1" - "@babel/plugin-transform-arrow-functions" "^7.10.1" - "@babel/plugin-transform-async-to-generator" "^7.10.1" - "@babel/plugin-transform-block-scoped-functions" "^7.10.1" - "@babel/plugin-transform-block-scoping" "^7.10.1" - "@babel/plugin-transform-classes" "^7.10.1" - "@babel/plugin-transform-computed-properties" "^7.10.1" - "@babel/plugin-transform-destructuring" "^7.10.1" - "@babel/plugin-transform-dotall-regex" "^7.10.1" - "@babel/plugin-transform-duplicate-keys" "^7.10.1" - "@babel/plugin-transform-exponentiation-operator" "^7.10.1" - "@babel/plugin-transform-for-of" "^7.10.1" - "@babel/plugin-transform-function-name" "^7.10.1" - "@babel/plugin-transform-literals" "^7.10.1" - "@babel/plugin-transform-member-expression-literals" "^7.10.1" - "@babel/plugin-transform-modules-amd" "^7.10.1" - "@babel/plugin-transform-modules-commonjs" "^7.10.1" - "@babel/plugin-transform-modules-systemjs" "^7.10.1" - "@babel/plugin-transform-modules-umd" "^7.10.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.10.1" - "@babel/plugin-transform-object-super" "^7.10.1" - "@babel/plugin-transform-parameters" "^7.10.1" - "@babel/plugin-transform-property-literals" "^7.10.1" - "@babel/plugin-transform-regenerator" "^7.10.1" - "@babel/plugin-transform-reserved-words" "^7.10.1" - "@babel/plugin-transform-shorthand-properties" "^7.10.1" - "@babel/plugin-transform-spread" "^7.10.1" - "@babel/plugin-transform-sticky-regex" "^7.10.1" - "@babel/plugin-transform-template-literals" "^7.10.1" - "@babel/plugin-transform-typeof-symbol" "^7.10.1" - "@babel/plugin-transform-unicode-escapes" "^7.10.1" - "@babel/plugin-transform-unicode-regex" "^7.10.1" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.4" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -981,22 +1018,22 @@ esutils "^2.0.2" "@babel/preset-react@^7.0.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041" - integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-transform-react-display-name" "^7.10.1" - "@babel/plugin-transform-react-jsx" "^7.10.1" - "@babel/plugin-transform-react-jsx-development" "^7.10.1" - "@babel/plugin-transform-react-jsx-self" "^7.10.1" - "@babel/plugin-transform-react-jsx-source" "^7.10.1" - "@babel/plugin-transform-react-pure-annotations" "^7.10.1" - -"@babel/runtime-corejs3@^7.8.3": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.2.tgz#3511797ddf9a3d6f3ce46b99cc835184817eaa4e" - integrity sha512-+a2M/u7r15o3dV1NEizr9bRi+KUVnrs/qYxF0Z06DAPx/4VCWaz1WA7EcbE+uqGgt39lp5akWGmHsTseIkHkHg== + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf" + integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.10.4" + "@babel/plugin-transform-react-jsx" "^7.10.4" + "@babel/plugin-transform-react-jsx-development" "^7.10.4" + "@babel/plugin-transform-react-jsx-self" "^7.10.4" + "@babel/plugin-transform-react-jsx-source" "^7.10.4" + "@babel/plugin-transform-react-pure-annotations" "^7.10.4" + +"@babel/runtime-corejs3@^7.10.2": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.5.tgz#a57fe6c13045ca33768a2aa527ead795146febe1" + integrity sha512-RMafpmrNB5E/bwdSphLr8a8++9TosnyJp98RZzI6VOx2R2CCMpsXXXRvmI700O9oEKpXdZat6oEK68/F0zjd4A== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" @@ -1008,23 +1045,30 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0": version "7.10.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" - integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.6": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/parser" "^7.10.1" - "@babel/types" "^7.10.1" + regenerator-runtime "^0.13.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.7.0": +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.7.0": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== @@ -1039,7 +1083,31 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/types" "^7.10.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.1", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.4.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.7.0": version "7.10.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== @@ -1268,26 +1336,33 @@ dependencies: prosemirror-view "^1.5.1" -"@hapi/address@^2.1.2": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== +"@hapi/address@^4.0.1": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-4.1.0.tgz#d60c5c0d930e77456fdcde2598e77302e2955e1d" + integrity sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ== + dependencies: + "@hapi/hoek" "^9.0.0" -"@hapi/formula@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd" - integrity sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA== +"@hapi/formula@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-2.0.0.tgz#edade0619ed58c8e4f164f233cda70211e787128" + integrity sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A== "@hapi/hoek@6.x.x": version "6.2.4" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-6.2.4.tgz#4b95fbaccbfba90185690890bdf1a2fbbda10595" integrity sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A== -"@hapi/hoek@^8.2.4", "@hapi/hoek@^8.3.0": +"@hapi/hoek@^8.3.0": version "8.5.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== +"@hapi/hoek@^9.0.0": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.0.4.tgz#e80ad4e8e8d2adc6c77d985f698447e8628b6010" + integrity sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw== + "@hapi/joi@^14.3.0", "@hapi/joi@^14.5.0": version "14.5.0" resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-14.5.0.tgz#197e06edbd90436150f7f02154a83d0a82753188" @@ -1298,34 +1373,41 @@ "@hapi/topo" "3.x.x" isemail "3.x.x" -"@hapi/joi@^16.1.8": - version "16.1.8" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.1.8.tgz#84c1f126269489871ad4e2decc786e0adef06839" - integrity sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg== +"@hapi/joi@^17.1.1": + version "17.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-17.1.1.tgz#9cc8d7e2c2213d1e46708c6260184b447c661350" + integrity sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg== dependencies: - "@hapi/address" "^2.1.2" - "@hapi/formula" "^1.2.0" - "@hapi/hoek" "^8.2.4" - "@hapi/pinpoint" "^1.0.2" - "@hapi/topo" "^3.1.3" + "@hapi/address" "^4.0.1" + "@hapi/formula" "^2.0.0" + "@hapi/hoek" "^9.0.0" + "@hapi/pinpoint" "^2.0.0" + "@hapi/topo" "^5.0.0" "@hapi/marker@1.x.x": version "1.0.0" resolved "https://registry.yarnpkg.com/@hapi/marker/-/marker-1.0.0.tgz#65b0b2b01d1be06304886ce9b4b77b1bfb21a769" integrity sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA== -"@hapi/pinpoint@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13" - integrity sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ== +"@hapi/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-2.0.0.tgz#805b40d4dbec04fc116a73089494e00f073de8df" + integrity sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw== -"@hapi/topo@3.x.x", "@hapi/topo@^3.1.3": +"@hapi/topo@3.x.x": version "3.1.6" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== dependencies: "@hapi/hoek" "^8.3.0" +"@hapi/topo@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" + integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@jimp/bmp@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.13.0.tgz#cca2301e56231e7dc20d5aba757fb237b94e2013" @@ -1683,48 +1765,55 @@ uuid "^3.3.2" "@pubsweet/component-send-email@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@pubsweet/component-send-email/-/component-send-email-0.4.2.tgz#22dfdfc2fdd4bf579b6a1cc8e7dfbb6c6b9de4a1" - integrity sha512-g8qBnykFhkrQbGImsV6xfoCpPs7GcQo155CfAg5gODZFFHFMtE8lU5Brqmoo0Dls54PtWHpGES1d4PNEm9quvQ== + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pubsweet/component-send-email/-/component-send-email-0.4.3.tgz#caf8019f90b1fa490645a93f76725b83a951d7c9" + integrity sha512-ST9DxFbRjmWlVaXBFci/i4FFVN7YM6nySznb1jxsndWyvPLk2IhFrPP6iuGJXDEo4uplUnLk6EXkFKUEyPFmow== dependencies: nodemailer "^4.4.2" -"@pubsweet/db-manager@^3.0.20", "@pubsweet/db-manager@^3.1.10": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@pubsweet/db-manager/-/db-manager-3.1.10.tgz#a4165be9199fc2d04150ad746d9d328d9ab91c46" - integrity sha512-h9jW/IIYlMgV5exqZZdpmgp6L8Ef8+aVHI7c6nNQT2jaJIVR3ZhmgrjNNWnT9faptInoU/VoF6JUz5/vZKIBAg== +"@pubsweet/db-manager@^3.1.10", "@pubsweet/db-manager@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@pubsweet/db-manager/-/db-manager-3.1.11.tgz#d11c3081de5e419edbb7b66546439c4cd24bf762" + integrity sha512-/9DR2Hplt1EOu36lAisgGOk89O5IVRUTgggG06WJlHyuLardueTOMXF08YVVfzTRBEnvIlLd1kCwWXQbMNUyoA== dependencies: "@hapi/joi" "^14.3.0" - "@pubsweet/logger" "^0.2.45" + "@pubsweet/logger" "^0.2.46" fs-extra "^8.1.0" - knex "^0.16.3" + knex "^0.21.1" lodash "^4.17.11" - objection "^1.5.3" + objection "^2.1.3" pg "^7.8.0" tmp-promise "^2.0.0" umzug "^2.1.0" -"@pubsweet/errors@^2.0.24", "@pubsweet/errors@^2.0.32", "@pubsweet/errors@^2.0.35": +"@pubsweet/errors@^2.0.32": version "2.0.35" resolved "https://registry.yarnpkg.com/@pubsweet/errors/-/errors-2.0.35.tgz#40a0c231cf5a7ab4aeafd6d20835a092fd55fcec" integrity sha512-u3eR2lFDydyIVZkxkfXUHhfw0i7usOSVlPmBlcr547qGADPJ8HB4lMTSFoq20Ks7Vij3xeW1Vu6r2Mfqo3uRhQ== dependencies: http-status-codes "^1.3.0" +"@pubsweet/errors@^2.0.35", "@pubsweet/errors@^2.0.36": + version "2.0.36" + resolved "https://registry.yarnpkg.com/@pubsweet/errors/-/errors-2.0.36.tgz#afa254f26578468b6d1f8839ba6310e2fd7c6177" + integrity sha512-7qKSBCywp2v9yyf118ZK5A8GPuhVNGugRiUaYw/mxx5I5cZAP8xvUSnaIQMY4g+aaty6eYa5XOLUxZwpwA9IFA== + dependencies: + http-status-codes "^1.3.0" + "@pubsweet/job-xsweet@^2.0.3": - version "2.1.10" - resolved "https://registry.yarnpkg.com/@pubsweet/job-xsweet/-/job-xsweet-2.1.10.tgz#7f29f8ec944813f1403a5fa1550bcf4babf0fcc6" - integrity sha512-qIsIWOXTAOc5eGrzXx/ZlRh4du2pO9TvSgbbXJiM0m7L4WPsCkN/86uRA7E1GrE+QbOeTjoJvqhrwTBbtDAEqQ== + version "2.1.11" + resolved "https://registry.yarnpkg.com/@pubsweet/job-xsweet/-/job-xsweet-2.1.11.tgz#a667f29912ce28df2a5929871cd1f4b4f2dcbb0a" + integrity sha512-db4121/EYXCV3we0b7l5YHgTq499U0VJxpzo9KE5v9CgDjzgYFOMIs0RwzergvOuQHdfJojGGzcl+meaEwZlWg== dependencies: - "@pubsweet/db-manager" "^3.1.10" - "@pubsweet/logger" "^0.2.45" + "@pubsweet/db-manager" "^3.1.11" + "@pubsweet/logger" "^0.2.46" express-fileupload v1.1.1-alpha.2 node-wait-for-it "^0.2.0" - pubsweet-server "^13.11.0" + pubsweet-server "^13.11.1" tmp-promise "^2.0.0" waait "^1.0.5" -"@pubsweet/logger@^0.2.34", "@pubsweet/logger@^0.2.42", "@pubsweet/logger@^0.2.45": +"@pubsweet/logger@^0.2.42": version "0.2.45" resolved "https://registry.yarnpkg.com/@pubsweet/logger/-/logger-0.2.45.tgz#dbf176a5816e4c5fbc4ba0fed5c996fa2e24c288" integrity sha512-9s4cb+3vgPGQT6JUbDaiX3Q0KSU2vFDB+jMAj96RlIn88PUVa6dHBJBb1V7SMlPQ493S9dfOJ3lFJQhh+HNA5Q== @@ -1732,6 +1821,14 @@ "@hapi/joi" "^14.5.0" config "^3.0.1" +"@pubsweet/logger@^0.2.45", "@pubsweet/logger@^0.2.46": + version "0.2.46" + resolved "https://registry.yarnpkg.com/@pubsweet/logger/-/logger-0.2.46.tgz#46a7c7918b678982ac3f613664accbf6a515c608" + integrity sha512-bBR0eAY2Cf1P+bL21561po8vDKhyqYnziHmGjW3M4LTOWW+AGaZsRGqZgymsemC814lJCnSTuxxJZ+tPa8TPjw== + dependencies: + "@hapi/joi" "^14.5.0" + config "^3.0.1" + "@pubsweet/model-user@^5.1.4": version "5.1.12" resolved "https://registry.yarnpkg.com/@pubsweet/model-user/-/model-user-5.1.12.tgz#2c54102f6cb3a7dea2b11b98ed141a059abfbecd" @@ -1743,21 +1840,21 @@ "@pubsweet/models" "^0.3.7" bcrypt "^3.0.6" -"@pubsweet/models@^0.2.21": - version "0.2.21" - resolved "https://registry.yarnpkg.com/@pubsweet/models/-/models-0.2.21.tgz#ef412424f051ddab2dca19678bf85a4f5ebf4b69" - integrity sha512-TYPo1DGZ03k+u9cgdgK+hdr4VbP0ewyfj7fKiJu3wUjNX1pBJJ8zra3G04Okgq5yfa8rQQsIiyns0OjraSZLxg== +"@pubsweet/models@^0.3.11": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@pubsweet/models/-/models-0.3.11.tgz#65658468d83360a1a0293f88941590c58b74ecf7" + integrity sha512-9SvVItqghaFowmNrr0SVlm8ecgGMQlgu39gZbGgbqmPSZpNUJtGEyM0xXJK1qpfOYmfzQqlwnKrtjmAU+jaQjg== dependencies: - "@pubsweet/logger" "^0.2.34" + "@pubsweet/logger" "^0.2.46" -"@pubsweet/models@^0.3.10", "@pubsweet/models@^0.3.7": +"@pubsweet/models@^0.3.7": version "0.3.10" resolved "https://registry.yarnpkg.com/@pubsweet/models/-/models-0.3.10.tgz#3994a05a1ca846290dc225aad118856555f65f2f" integrity sha512-hJrplJOC0ck6zok3sKj6muyL+RsR5VbEdSCTOXrI59T/dLbs6O76kPC4BPYVyaiCQiGFwcnl60OtpohbxsfPXQ== dependencies: "@pubsweet/logger" "^0.2.45" -"@pubsweet/ui-toolkit@^2.2.13", "@pubsweet/ui-toolkit@^2.3.1": +"@pubsweet/ui-toolkit@^2.2.13": version "2.3.1" resolved "https://registry.yarnpkg.com/@pubsweet/ui-toolkit/-/ui-toolkit-2.3.1.tgz#0a3506a4b9eaeb9b54811982dc44cb87ca9892bf" integrity sha512-RFtkqCm/SItUEZPuBMM34WHFmiUhGs4EmreNMlNJg1TQnG9d6iirqy911oLEfJYtvR/fbxgeQFbtRle2yre64w== @@ -1766,7 +1863,16 @@ lodash "^4.17.4" styled-components "^4.1.1" -"@pubsweet/ui@12.5.0", "@pubsweet/ui@^12.1.0", "@pubsweet/ui@^12.5.0": +"@pubsweet/ui-toolkit@^2.3.1", "@pubsweet/ui-toolkit@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@pubsweet/ui-toolkit/-/ui-toolkit-2.3.2.tgz#44b9b97b399027ef90bf0c30768475284f437fb4" + integrity sha512-VJ9zZI1uDOCicmuJV7uv98kK0J5hGpJKIeXpOSrgPgFw3dDFRjuuLa4W8L5aFa+FG42ZDZEj2CaOnfuZyB4HGA== + dependencies: + color "^3.0.0" + lodash "^4.17.4" + styled-components "^4.1.1" + +"@pubsweet/ui@12.5.0", "@pubsweet/ui@^12.6.0": version "12.5.0" resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-12.5.0.tgz#56882c88dd50885cf1871c8dcb95f77692ea0b86" integrity sha512-De6xVEPYGTV+CZrGUQWSFQzXexcdoO7LGyRdvDp9dDlfDNTO36U1Ltkpj5m0WomAj5NshkqQVqZfhBG1IxsKDw== @@ -1789,6 +1895,29 @@ recompose "^0.30.0" styled-components "^4.1.1" +"@pubsweet/ui@^12.1.0": + version "12.6.0" + resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-12.6.0.tgz#52f304b3ac4824fe48a310177769549d019e270c" + integrity sha512-QYng7wVCB1ZoJ2AGVvNvf/BizgzEA60cgJXeeUiRykk0AQFqdpF+V/Skh7A8nwdl21knz6Xgoa84BbDQhNBSWQ== + dependencies: + "@pubsweet/ui-toolkit" "^2.3.2" + enzyme "^3.7.0" + enzyme-adapter-react-16 "^1.12.1" + formik "^1.4.2" + invariant "^2.2.3" + lodash "^4.17.4" + moment "^2.22.1" + prop-types "^15.5.10" + react "^16.9.0" + react-dom "^16.9.0" + react-feather "^1.0.8" + react-router-dom "^5.0.0" + react-select "^3.0.8" + react-tag-autocomplete "^5.5.0" + react-uid "^2.2.0" + recompose "^0.30.0" + styled-components "^4.1.1" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -1845,24 +1974,19 @@ dependencies: "@types/express" "*" -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - "@types/express-serve-static-core@*": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz#dfe61f870eb549dc6d7e12050901847c7d7e915b" - integrity sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw== + version "4.17.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.8.tgz#b8f7b714138536742da222839892e203df569d1c" + integrity sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.6.tgz#6bce49e49570507b86ea1b07b806f04697fac45e" - integrity sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w== + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59" + integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" @@ -1887,11 +2011,10 @@ "@types/node" "*" "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" @@ -1915,6 +2038,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/keygrip@*": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" @@ -1964,14 +2092,14 @@ form-data "^3.0.0" "@types/node@*", "@types/node@>=6": - version "14.0.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.9.tgz#43896ab87fc82bda1dfd600cdf44a0c8a64e11d2" - integrity sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA== + version "14.0.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.24.tgz#b0f86f58564fa02a28b68f8b55d4cdec42e3b9d6" + integrity sha512-btt/oNOiDWcSuI721MdL8VQGnjsKjlTMdrKyTcLCKeQp/n4AAMFJ961wMbp+09y8WuGPClDEv07RIItdXKIXAA== "@types/node@^10.1.0": - version "10.17.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.24.tgz#c57511e3a19c4b5e9692bb2995c40a3a52167944" - integrity sha512-5SCfvCxV74kzR3uWgTYiGxrd69TbT1I6+cMx1A5kEly/IVveJBimtAMlXiEyVFn5DvUFewQWxOOiJhlxeQwxgA== + version "10.17.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.27.tgz#391cb391c75646c8ad2a7b6ed3bbcee52d1bdf19" + integrity sha512-J0oqm9ZfAXaPdwNXMMgAhylw5fhmXkToJd06vuDUSAgEDZ/n/69/69UmyBZbc+zT34UnShuDSBqvim3SPnozJg== "@types/parse-json@^4.0.0": version "4.0.0" @@ -2007,12 +2135,17 @@ integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== "@types/ws@^7.0.0": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.4.tgz#b3859f7b9c243b220efac9716ec42c716a72969d" - integrity sha512-9S6Ask71vujkVyeEXKxjBSUV8ZUB0mjL5la4IncBoheu04bDaYyUKErh1BQcY9+WzOUOiKqz/OnpJHYckbMfNg== + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d" + integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== dependencies: "@types/node" "*" +"@types/yup@0.29.3": + version "0.29.3" + resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.3.tgz#5a85024796bffe0eb01601bfc180fe218356dba4" + integrity sha512-XxZFKnxzTfm+DR8MMBA35UUXfUPmjPpi8HJ90VZg7q/LIbtiOhVGJ26gNnATcflcpnIyf2Qm9A+oEhswaqoDpA== + "@types/zen-observable@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" @@ -2171,6 +2304,13 @@ "@types/node" ">=6" tslib "^1.9.3" +"@wry/context@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.5.2.tgz#f2a5d5ab9227343aa74c81e06533c1ef84598ec7" + integrity sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw== + dependencies: + tslib "^1.9.3" + "@wry/equality@^0.1.2", "@wry/equality@^0.1.9": version "0.1.11" resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" @@ -2198,6 +2338,28 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2260,20 +2422,19 @@ aggregate-error@^3.0.0: indent-string "^4.0.0" airbnb-prop-types@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" - integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== + version "2.16.0" + resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" + integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== dependencies: - array.prototype.find "^2.1.0" - function.prototype.name "^1.1.1" - has "^1.0.3" - is-regex "^1.0.4" - object-is "^1.0.1" + array.prototype.find "^2.1.1" + function.prototype.name "^1.1.2" + is-regex "^1.1.0" + object-is "^1.1.2" object.assign "^4.1.0" - object.entries "^1.1.0" + object.entries "^1.1.2" prop-types "^15.7.2" prop-types-exact "^1.2.0" - react-is "^16.9.0" + react-is "^16.13.1" ajv-errors@^1.0.0: version "1.0.1" @@ -2285,11 +2446,16 @@ ajv-keywords@^2.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= -ajv-keywords@^3.0.0, ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: +ajv-keywords@^3.0.0: version "3.4.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" + integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== + ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -2300,7 +2466,7 @@ ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.0.1, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: +ajv@^6.0.1, ajv@^6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== @@ -2310,6 +2476,16 @@ ajv@^6.0.1, ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -2396,13 +2572,13 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-cache-control@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.11.0.tgz#7075492d04c5424e7c6769380b503e8f75b39d61" - integrity sha512-dmRnQ9AXGw2SHahVGLzB/p4UW/taFBAJxifxubp8hqY5p9qdlSu4MPRq8zvV2ULMYf50rBtZyC4C+dZLqmHuHQ== +apollo-cache-control@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.11.1.tgz#3bce0924ae7322a8b9f7ca1e2fb036d1fc9f1df5" + integrity sha512-6iHa8TkcKt4rx5SKRzDNjUIpCQX+7/FlZwD7vRh9JDnM4VH8SWhpj8fUR3CiEY8Kuc4ChXnOY8bCcMju5KPnIQ== dependencies: - apollo-server-env "^2.4.4" - apollo-server-plugin-base "^0.9.0" + apollo-server-env "^2.4.5" + apollo-server-plugin-base "^0.9.1" apollo-cache-inmemory@^1.5.1: version "1.6.6" @@ -2437,33 +2613,33 @@ apollo-client@^2.6.4: tslib "^1.10.0" zen-observable "^0.8.0" -apollo-datasource@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.7.1.tgz#0b06da999ace50b7f5fe509f2a03f7de97974334" - integrity sha512-h++/jQAY7GA+4TBM+7ezvctFmmGNLrAPf51KsagZj+NkT9qvxp585rdsuatynVbSl59toPK2EuVmc6ilmQHf+g== +apollo-datasource@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.7.2.tgz#1662ee93453a9b89af6f73ce561bde46b41ebf31" + integrity sha512-ibnW+s4BMp4K2AgzLEtvzkjg7dJgCaw9M5b5N0YKNmeRZRnl/I/qBTQae648FsRKgMwTbRQIvBhQ0URUFAqFOw== dependencies: - apollo-server-caching "^0.5.1" - apollo-server-env "^2.4.4" + apollo-server-caching "^0.5.2" + apollo-server-env "^2.4.5" -apollo-engine-reporting-protobuf@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.1.tgz#b6e66e6e382f9bcdc2ac8ed168b047eb1470c1a8" - integrity sha512-TSfr9iAaInV8dhXkesdcmqsthRkVcJkzznmiM+1Ob/GScK7r6hBYCjVDt2613EHAg9SUzTOltIKlGD+N+GJRUw== +apollo-engine-reporting-protobuf@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.2.tgz#b01812508a1c583328a8dc603769bc63b8895e7e" + integrity sha512-4wm9FR3B7UvJxcK/69rOiS5CAJPEYKufeRWb257ZLfX7NGFTMqvbc1hu4q8Ch7swB26rTpkzfsftLED9DqH9qg== dependencies: "@apollo/protobufjs" "^1.0.3" -apollo-engine-reporting@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-2.0.0.tgz#af007b4a8a481fa97baef0eac51a7824f1ec3310" - integrity sha512-FvNwORsh3nxEfvQqd2xbd468a0q/R3kYar/Bk6YQdBX5qwqUhqmOcOSxLFk8Zb77HpwHij5CPpPWJb53TU1zcA== - dependencies: - apollo-engine-reporting-protobuf "^0.5.1" - apollo-graphql "^0.4.0" - apollo-server-caching "^0.5.1" - apollo-server-env "^2.4.4" - apollo-server-errors "^2.4.1" - apollo-server-plugin-base "^0.9.0" - apollo-server-types "^0.5.0" +apollo-engine-reporting@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-2.3.0.tgz#3bb59f81aaf6b967ed098896a4a60a053b4eed5a" + integrity sha512-SbcPLFuUZcRqDEZ6mSs8uHM9Ftr8yyt2IEu0JA8c3LNBmYXSLM7MHqFe80SVcosYSTBgtMz8mLJO8orhYoSYZw== + dependencies: + apollo-engine-reporting-protobuf "^0.5.2" + apollo-graphql "^0.5.0" + apollo-server-caching "^0.5.2" + apollo-server-env "^2.4.5" + apollo-server-errors "^2.4.2" + apollo-server-plugin-base "^0.9.1" + apollo-server-types "^0.5.1" async-retry "^1.2.1" uuid "^8.0.0" @@ -2477,10 +2653,10 @@ apollo-env@^0.6.5: node-fetch "^2.2.0" sha.js "^2.4.11" -apollo-graphql@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.4.4.tgz#25f456b28a4419bb6a42071f8a56e19e15bb80be" - integrity sha512-i012iRKT5nfsOaNMx4MTwHw2jrlyaF1zikpejxsGHsKIf3OngGvGh3pyw20bEmwj413OrNQpRxvvIz5A7W/8xw== +apollo-graphql@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.5.0.tgz#7e9152093211b58352aa6504d8d39ec7241d6872" + integrity sha512-YSdF/BKPbsnQpxWpmCE53pBJX44aaoif31Y22I/qKpB6ZSGzYijV5YBoCL5Q15H2oA/v/02Oazh9lbp4ek3eig== dependencies: apollo-env "^0.6.5" lodash.sortby "^4.7.0" @@ -2528,33 +2704,33 @@ apollo-link@^1.0.0, apollo-link@^1.2.11, apollo-link@^1.2.12, apollo-link@^1.2.1 tslib "^1.9.3" zen-observable-ts "^0.8.21" -apollo-server-caching@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz#5cd0536ad5473abb667cc82b59bc56b96fb35db6" - integrity sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw== +apollo-server-caching@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz#bef5d5e0d48473a454927a66b7bb947a0b6eb13e" + integrity sha512-HUcP3TlgRsuGgeTOn8QMbkdx0hLPXyEJehZIPrcof0ATz7j7aTPA4at7gaiFHCo8gk07DaWYGB3PFgjboXRcWQ== dependencies: lru-cache "^5.0.0" -apollo-server-core@^2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.14.1.tgz#d930c62bfbe36e40fa5fce707aa3bfbfe3d1393b" - integrity sha512-Uk/jJwLtm+5YvExghNoq9V2ZHJRXPfaVOt4cIyo+mcjWG6YymHhMg5h9pR/auz9HMI8NP7ykmfo/bsTR1qutWQ== +apollo-server-core@^2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.16.0.tgz#56b367db49f97b7da03b29cef89b63d9ed14ee0c" + integrity sha512-mnvg2cPvsQtjFXIqIhEAbPqGyiSXDSbiBgNQ8rY8g7r2eRMhHKZePqGF03gP1/w87yVaSDRAZBDk6o+jiBXjVQ== dependencies: "@apollographql/apollo-tools" "^0.4.3" - "@apollographql/graphql-playground-html" "1.6.24" + "@apollographql/graphql-playground-html" "1.6.26" "@types/graphql-upload" "^8.0.0" "@types/ws" "^7.0.0" - apollo-cache-control "^0.11.0" - apollo-datasource "^0.7.1" - apollo-engine-reporting "^2.0.0" - apollo-server-caching "^0.5.1" - apollo-server-env "^2.4.4" - apollo-server-errors "^2.4.1" - apollo-server-plugin-base "^0.9.0" - apollo-server-types "^0.5.0" - apollo-tracing "^0.11.0" + apollo-cache-control "^0.11.1" + apollo-datasource "^0.7.2" + apollo-engine-reporting "^2.3.0" + apollo-server-caching "^0.5.2" + apollo-server-env "^2.4.5" + apollo-server-errors "^2.4.2" + apollo-server-plugin-base "^0.9.1" + apollo-server-types "^0.5.1" + apollo-tracing "^0.11.1" fast-json-stable-stringify "^2.0.0" - graphql-extensions "^0.12.2" + graphql-extensions "^0.12.4" graphql-tag "^2.9.2" graphql-tools "^4.0.0" graphql-upload "^8.0.2" @@ -2563,32 +2739,32 @@ apollo-server-core@^2.14.1: subscriptions-transport-ws "^0.9.11" ws "^6.0.0" -apollo-server-env@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.4.tgz#12d2d0896dcb184478cba066c7a683ab18689ca1" - integrity sha512-c2oddDS3lwAl6QNCIKCLEzt/dF9M3/tjjYRVdxOVN20TidybI7rAbnT4QOzf4tORnGXtiznEAvr/Kc9ahhKADg== +apollo-server-env@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.5.tgz#73730b4f0439094a2272a9d0caa4079d4b661d5f" + integrity sha512-nfNhmGPzbq3xCEWT8eRpoHXIPNcNy3QcEoBlzVMjeglrBGryLG2LXwBSPnVmTRRrzUYugX0ULBtgE3rBFNoUgA== dependencies: node-fetch "^2.1.2" util.promisify "^1.0.0" -apollo-server-errors@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.4.1.tgz#16ad49de6c9134bfb2b7dede9842e73bb239dbe2" - integrity sha512-7oEd6pUxqyWYUbQ9TA8tM0NU/3aGtXSEibo6+txUkuHe7QaxfZ2wHRp+pfT1LC1K3RXYjKj61/C2xEO19s3Kdg== +apollo-server-errors@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz#1128738a1d14da989f58420896d70524784eabe5" + integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ== apollo-server-express@^2.4.8: - version "2.14.1" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.14.1.tgz#2dd282b3d72348059c3dfc387c23e4af25fa5b78" - integrity sha512-Ee1Oc+lzKfHh3BkDNRJL4s7Nnx+Nkmz606TBDi0ETSuNjJqXBNDbDM/YLS3LP7zJ5Oa37U7py72x8rrkPiZZNg== + version "2.16.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.16.0.tgz#3474a7f7eb868a2a847a364839147f8d7f26454a" + integrity sha512-mBIvKcF8gApj7wbmqe0A4Tsy+Pw66mI6cmtD912bG59KhUBveSCZ21dDlRSvnXUyK+GOo2ItwcUEtmks+Z2Pqw== dependencies: - "@apollographql/graphql-playground-html" "1.6.24" + "@apollographql/graphql-playground-html" "1.6.26" "@types/accepts" "^1.3.5" "@types/body-parser" "1.19.0" "@types/cors" "^2.8.4" "@types/express" "4.17.4" accepts "^1.3.5" - apollo-server-core "^2.14.1" - apollo-server-types "^0.5.0" + apollo-server-core "^2.16.0" + apollo-server-types "^0.5.1" body-parser "^1.18.3" cors "^2.8.4" express "^4.17.1" @@ -2598,29 +2774,29 @@ apollo-server-express@^2.4.8: subscriptions-transport-ws "^0.9.16" type-is "^1.6.16" -apollo-server-plugin-base@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.0.tgz#777f720a1ee827a66b8c159073ca30645f8bc625" - integrity sha512-LWcPrsy2+xqwlNseh/QaGa/MPNopS8c4qGgh0g0cAn0lZBRrJ9Yab7dq+iQ6vdUBwIhUWYN6s9dwUWCZw2SL8g== +apollo-server-plugin-base@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.1.tgz#a62ae9ab4e89790fd4cc5d123bb616da34e8e5fb" + integrity sha512-kvrX4Z3FdpjrZdHkyl5iY2A1Wvp4b6KQp00DeZqss7GyyKNUBKr80/7RQgBLEw7EWM7WB19j459xM/TjvW0FKQ== dependencies: - apollo-server-types "^0.5.0" + apollo-server-types "^0.5.1" -apollo-server-types@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.5.0.tgz#51f39c5fa610ece8b07f1fbcf63c47d4ac150340" - integrity sha512-zhtsqqqfdeoJQAfc41Sy6WnnBVxKNgZ34BKXf/Q+kXmw7rbZ/B5SG3SJMvj1iFsbzZxILmWdUsE9aD20lEr0bg== +apollo-server-types@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.5.1.tgz#091c09652894d6532db9ba873574443adabf85b9" + integrity sha512-my2cPw+DAb2qVnIuBcsRKGyS28uIc2vjFxa1NpRoJZe9gK0BWUBk7wzXnIzWy3HZ5Er11e/40MPTUesNfMYNVA== dependencies: - apollo-engine-reporting-protobuf "^0.5.1" - apollo-server-caching "^0.5.1" - apollo-server-env "^2.4.4" + apollo-engine-reporting-protobuf "^0.5.2" + apollo-server-caching "^0.5.2" + apollo-server-env "^2.4.5" -apollo-tracing@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.11.0.tgz#8821eb60692f77c06660fb6bc147446f600aecfe" - integrity sha512-I9IFb/8lkBW8ZwOAi4LEojfT7dMfUSkpnV8LHQI8Rcj0HtzL9HObQ3woBmzyGHdGHLFuD/6/VHyFD67SesSrJg== +apollo-tracing@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.11.1.tgz#3e3a4ce4b21e57dcc57b10bbd539db243b752606" + integrity sha512-l7g+uILw7v32GA46IRXIx5XXbZhFI96BhSqrGK9yyvfq+NMcvVZrj3kIhRImPGhAjMdV+5biA/jztabElAbDjg== dependencies: - apollo-server-env "^2.4.4" - apollo-server-plugin-base "^0.9.0" + apollo-server-env "^2.4.5" + apollo-server-plugin-base "^0.9.1" apollo-upload-client@^11.0.0: version "11.0.0" @@ -2632,6 +2808,15 @@ apollo-upload-client@^11.0.0: apollo-link-http-common "^0.2.14" extract-files "^5.0.1" +apollo-upload-client@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-14.0.1.tgz#62ca85c4e45d48c2e73cabcdd7cc639492dacb4b" + integrity sha512-2Ebh5LQukHpGNebAWRdf9i3t91mJbZAyEG7WVrw9Mx3bxKIQ+4iYmBz3XV+pK8lqs8332i4k3D46hGdXDc5/gg== + dependencies: + "@apollo/client" "^3.0.2" + "@babel/runtime" "^7.10.5" + extract-files "^8.1.0" + apollo-utilities@1.3.4, apollo-utilities@^1.0.1, apollo-utilities@^1.2.1, apollo-utilities@^1.3.0, apollo-utilities@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.4.tgz#6129e438e8be201b6c55b0f13ce49d2c7175c9cf" @@ -2664,10 +2849,10 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== +arch@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== are-we-there-yet@~1.1.2: version "1.1.5" @@ -2684,13 +2869,13 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" arr-diff@^2.0.0: version "2.0.0" @@ -2744,7 +2929,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.1: +array-includes@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== @@ -2780,21 +2965,30 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.find@^2.1.0: +array.prototype.find@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.4" + es-abstract "^1.17.4" + +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" -array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: +array.prototype.flatmap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== dependencies: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" arrify@^1.0.1: version "1.0.1" @@ -2840,7 +3034,7 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: +ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= @@ -2884,7 +3078,7 @@ async@^2.1.4, async@^2.4.1, async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.1.0: +async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -2960,10 +3154,22 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== -axobject-query@^2.0.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799" - integrity sha512-ICt34ZmrVt8UQnvPl6TVyDTkmhXmAyAT4Jh5ugfGUX4MOrZ+U/ZY6/sdylRw3qGNr9Ub5AJsaHeDMzNLehRdOQ== +axe-core@^3.5.4: + version "3.5.5" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" + integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== + +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axobject-query@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" @@ -3550,9 +3756,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" @@ -3765,14 +3971,14 @@ browserslist@^2.11.3: electron-to-chromium "^1.3.30" browserslist@^4.12.0, browserslist@^4.8.5: - version "4.12.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" - integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== dependencies: - caniuse-lite "^1.0.30001043" - electron-to-chromium "^1.3.413" - node-releases "^1.1.53" - pkg-up "^2.0.0" + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" bser@2.1.1: version "2.1.1" @@ -3825,7 +4031,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.0: +buffer@^5.2.0, buffer@^5.5.0, buffer@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== @@ -3977,14 +4183,6 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" @@ -3994,11 +4192,6 @@ camelcase-keys@^4.0.0: map-obj "^2.0.0" quick-lru "^1.0.0" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -4029,11 +4222,16 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001076.tgz#bbd4b054164a81506f75c28acdc72261712ddb96" integrity sha512-xakM7JFFxRXDZc5OJa97zBp0tRlW1NUgvLxLD0i9TUQ76wbHUAbpbFNb35uDOAur2eLqvHmoArqHXGMUoiK+oA== -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30001043: +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: version "1.0.30001066" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz#0a8a58a10108f2b9bf38e7b65c237b12fd9c5f04" integrity sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw== +caniuse-lite@^1.0.30001093: + version "1.0.30001105" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001105.tgz#d2cb0b31e5cf2f3ce845033b61c5c01566549abf" + integrity sha512-JupOe6+dGMr7E20siZHIZQwYqrllxotAhiaej96y6x00b/48rPt42o+SzOSCPbrpsDWvRja40Hwrj0g0q6LZJg== + capture-exit@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" @@ -4164,9 +4362,9 @@ chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -4436,6 +4634,11 @@ colorette@1.0.7: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.0.7.tgz#7adf43c445ee63a541b4a4aef7d13f03df1e0cc0" integrity sha512-KeK4klsvAgdODAjFPm6QLzvStizJqlxMBtVo4KQMCgk5tt/tf9rAzxmxLHNRynJg3tJjkKGKbHx3j4HLox27Lw== +colorette@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" @@ -4477,16 +4680,21 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" - integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== +commander@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0, commander@~2.20.3: +commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.20.3, commander@^2.9.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -4559,14 +4767,7 @@ concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@ readable-stream "^2.2.2" typedarray "^0.0.6" -config@^1.26.2: - version "1.31.0" - resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" - integrity sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA== - dependencies: - json5 "^1.0.1" - -config@^3.0.1: +config@^3.0.1, config@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/config/-/config-3.3.1.tgz#b6a70e2908a43b98ed20be7e367edf0cc8ed5a19" integrity sha512-+2/KaaaAzdwUBE3jgZON11L1ggLLhpf2FsGrfqYFHZW22ySGv/HqYIXrBwKKvn+XZh1UBUjHwAcrfsSkSygT+Q== @@ -4808,7 +5009,16 @@ create-react-context@^0.1.5: resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.1.6.tgz#0f425931d907741127acc6e31acb4f9015dd9fdc" integrity sha512-eCnYYEUEc5i32LHwpE/W7NlddOB9oHwsPaWtWzYtflNkkwa3IfindIcoXdVWs12zCbwaMCavKNu84EXogVIWHw== -cross-spawn@6.0.5, cross-spawn@^6.0.0: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -4819,15 +5029,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -4927,6 +5128,11 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= + cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" @@ -4985,11 +5191,16 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" -csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.7: +csstype@^2.5.2: version "2.6.10" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== +csstype@^2.5.7, csstype@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5" + integrity sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw== + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -5007,44 +5218,46 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress-file-upload@^3.5.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-3.5.3.tgz#cd706485de3fb2cbd4a8c2dd90fe96d537bb4311" - integrity sha512-S/czzqAj1BYz6Xxnfpx2aSc6hXsj76fd8/iuycJ2RxoxCcQMliw8eQV0ugzVlkzr1GD5dKGviNFGYqv3nRJ+Tg== +cypress-file-upload@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-4.0.7.tgz#1136139bb3c660b9c39a69f231ac1da7785acaae" + integrity sha512-rFFmnoZ2bWyWFpSV09AhkSUgYEiVy70pcQ6nf/mGTMTrVHvKCCCIfRu3TbgVYHbgBq+0hqjfjQrtz4IbgH7qZA== + dependencies: + mime "^2.4.4" -cypress@^4.0.1: - version "4.7.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.7.0.tgz#3ea29bddaf9a1faeaa5b8d54b60a84ed1cafa83d" - integrity sha512-Vav6wUFhPRlImIND/2lOQlUnAWzgCC/iXyJlJjX9nJOJul5LC1vUpf/m8Oiae870PFPyT0ZLLwPHKTXZNdXmHw== +cypress@^4.11.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.11.0.tgz#054b0b85fd3aea793f186249ee1216126d5f0a7e" + integrity sha512-6Yd598+KPATM+dU1Ig0g2hbA+R/o1MAKt0xIejw4nZBVLSplCouBzqeKve6XsxGU6n4HMSt/+QYsWfFcoQeSEw== dependencies: "@cypress/listr-verbose-renderer" "0.4.1" "@cypress/request" "2.88.5" "@cypress/xvfb" "1.2.4" "@types/sinonjs__fake-timers" "6.0.1" "@types/sizzle" "2.3.2" - arch "2.1.1" + arch "2.1.2" bluebird "3.7.2" cachedir "2.3.0" chalk "2.4.2" check-more-types "2.24.0" cli-table3 "0.5.1" - commander "4.1.0" + commander "4.1.1" common-tags "1.8.0" debug "4.1.1" - eventemitter2 "4.1.2" + eventemitter2 "6.4.2" execa "1.0.0" executable "4.1.1" extract-zip "1.7.0" fs-extra "8.1.0" - getos "3.1.4" + getos "3.2.1" is-ci "2.0.0" - is-installed-globally "0.1.0" + is-installed-globally "0.3.2" lazy-ass "1.6.0" listr "0.14.3" - lodash "4.17.15" + lodash "4.17.19" log-symbols "3.0.0" minimist "1.2.5" - moment "2.24.0" + moment "2.26.0" ospath "1.2.2" pretty-bytes "5.3.0" ramda "0.26.1" @@ -5055,7 +5268,7 @@ cypress@^4.0.1: url "0.11.0" yauzl "2.10.0" -damerau-levenshtein@^1.0.4: +damerau-levenshtein@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== @@ -5091,13 +5304,15 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -dateformat@~1.0.4-1.2.3: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +db-errors@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/db-errors/-/db-errors-0.2.3.tgz#a6a38952e00b20e790f2695a6446b3c65497ffa2" + integrity sha512-OOgqgDuCavHXjYSJoV2yGhv6SeG8nk42aoCSoyXLZUH7VwFG27rxbavU1z+VrZbZjphw5UkDQwUlD21MwZpUng== debounce@^1.0.0: version "1.2.0" @@ -5118,6 +5333,13 @@ debug@4.1.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -5215,6 +5437,14 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -5386,11 +5616,6 @@ dns-packet@^1.3.1: ip "^1.1.0" safe-buffer "^5.0.1" -dns-prefetch-control@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624" - integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q== - dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" @@ -5574,20 +5799,25 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.413: +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: version "1.3.456" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.456.tgz#5125bce136b04a8e39473696509e83038f679cbd" integrity sha512-jaVZ9+8HG2qvEN7c9r5EVguvhtevITJou4L10XuqoiZUoXIMF5qLG1pB9raP3WFcME4exDZRq1b6qyCA+u5Vew== +electron-to-chromium@^1.3.488: + version "1.3.503" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.503.tgz#3b2fc07b7e3ea0262c395984579ddabee1c9e0cd" + integrity sha512-Rh4+JP+5a+HeCg+77/BOLKzA6pLf8WZMd+DqiduEWCPyvSdY6KWzfkZXa2JRxrLO/aaB1YjTXenQdamZYzWfUw== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0, elliptic@^6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -5597,11 +5827,16 @@ elliptic@^6.0.0, elliptic@^6.5.2: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^7.0.1, emoji-regex@^7.0.2: +emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" + integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -5625,12 +5860,22 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - iconv-lite "~0.4.13" + iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" @@ -5639,19 +5884,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== +enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -5663,9 +5899,9 @@ entities@^1.1.1, entities@~1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436" - integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== enzyme-adapter-react-16@^1.12.1: version "1.15.2" @@ -5730,7 +5966,7 @@ enzyme@^3.7.0: rst-selector-parser "^2.2.3" string.prototype.trim "^1.2.1" -errno@^0.1.3, errno@~0.1.7: +errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== @@ -5745,21 +5981,21 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" + is-callable "^1.2.0" + is-regex "^1.1.0" object-inspect "^1.7.0" object-keys "^1.1.1" object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" es-get-iterator@^1.1.0: version "1.1.0" @@ -5788,6 +6024,11 @@ es6-object-assign@^1.1.0: resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= +escalade@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -5858,15 +6099,15 @@ eslint-config-standard@^10.2.1: resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" integrity sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE= -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" resolve "^1.13.1" -eslint-module-utils@^2.4.1: +eslint-module-utils@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== @@ -5875,22 +6116,23 @@ eslint-module-utils@^2.4.1: pkg-dir "^2.0.0" eslint-plugin-import@^2.8.0: - version "2.20.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" - integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== + version "2.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" + integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" - object.values "^1.1.0" + object.values "^1.1.1" read-pkg-up "^2.0.0" - resolve "^1.12.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" eslint-plugin-jest@^21.4.0: version "21.27.2" @@ -5898,19 +6140,21 @@ eslint-plugin-jest@^21.4.0: integrity sha512-0E4OIgBJVlAmf1KfYFtZ3gYxgUzC5Eb3Jzmrc9ikI1OY+/cM8Kh72Ti7KfpeHNeD3HJNf9SmEfmvQLIz44Hrhw== eslint-plugin-jsx-a11y@^6.0.2: - version "6.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" - integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== + version "6.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" + integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== dependencies: - "@babel/runtime" "^7.4.5" - aria-query "^3.0.0" - array-includes "^3.0.3" + "@babel/runtime" "^7.10.2" + aria-query "^4.2.2" + array-includes "^3.1.1" ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" + axe-core "^3.5.4" + axobject-query "^2.1.2" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" has "^1.0.3" - jsx-ast-utils "^2.2.1" + jsx-ast-utils "^2.4.1" + language-tags "^1.0.5" eslint-plugin-node@^5.2.1: version "5.2.1" @@ -5936,21 +6180,21 @@ eslint-plugin-promise@^3.6.0: integrity sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ== eslint-plugin-react@^7.4.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" - integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA== + version "7.20.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz#0590525e7eb83890ce71f73c2cf836284ad8c2f1" + integrity sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg== dependencies: array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" + jsx-ast-utils "^2.4.1" + object.entries "^1.1.2" object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.15.1" + resolve "^1.17.0" string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" eslint-plugin-standard@^3.0.1: version "3.1.0" @@ -6027,6 +6271,11 @@ eslint@^4.12.0: table "4.0.2" text-table "~0.2.0" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" @@ -6104,10 +6353,10 @@ eventemitter2@0.4.14: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= -eventemitter2@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-4.1.2.tgz#0e1a8477af821a6ef3995b311bf74c23a5247f15" - integrity sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU= +eventemitter2@6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.2.tgz#f31f8b99d45245f0edbc5b00797830ff3b388970" + integrity sha512-r/Pwupa5RIzxIHbEKCkNXqpEQIIT4uQDxmP4G/Lug/NokVUWj0joz/WzWl3OxRpC5kDrH/WdiUJoR+IrwvXJEw== eventemitter3@^3.1.0: version "3.1.2" @@ -6264,11 +6513,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect-ct@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.2.0.tgz#3a54741b6ed34cc7a93305c605f63cd268a54a62" - integrity sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g== - expect@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" @@ -6381,6 +6625,11 @@ extract-files@^5.0.1: resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-5.0.1.tgz#c9492a8410be643e260a376f0151361993d5f659" integrity sha512-qRW6y9eKF0VbCyOoOEtFhzJ3uykAw8GKwQVXyAIqwocyEWW4m+v+evec34RwtUkkxxHh7NKBLJ6AnXM8W4dH5w== +extract-files@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288" + integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ== + extract-text-webpack-plugin@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" @@ -6427,9 +6676,9 @@ fast-deep-equal@^1.0.0: integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.1: version "1.2.0" @@ -6678,7 +6927,7 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@3.0.0, findup-sync@^3.0.0: +findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== @@ -6727,12 +6976,22 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== +fn-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" + integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: - debug "^3.0.0" + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== font-awesome@^4.7.0: version "4.7.0" @@ -6842,11 +7101,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -frameguard@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.1.0.tgz#bd1442cca1d67dc346a6751559b6d04502103a22" - integrity sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -6888,15 +7142,6 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -6944,7 +7189,7 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.1, function.prototype.name@^1.1.2: +function.prototype.name@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== @@ -6997,11 +7242,6 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" @@ -7036,12 +7276,17 @@ getopts@2.2.3: resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.3.tgz#11d229775e2ec2067ed8be6fcc39d9b4bf39cf7d" integrity sha512-viEcb8TpgeG05+Nqo5EzZ8QR0hxdyrYDp6ZSTZqe2M/h53Bk036NmqG38Vhf5RGirC/Of9Xql+v66B2gp256SQ== -getos@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.4.tgz#29cdf240ed10a70c049add7b6f8cb08c81876faf" - integrity sha512-UORPzguEB/7UG5hqiZai8f0vQ7hzynMQyJLxStoQ8dPGAcmgsfXOPA4iE/fGtweHYkK+z4zc9V0g+CIFRf5HYw== +getopts@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b" + integrity sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA== + +getos@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== dependencies: - async "^3.1.0" + async "^3.2.0" getpass@^0.1.1: version "0.1.7" @@ -7100,19 +7345,12 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== dependencies: - global-prefix "^3.0.0" + ini "^1.3.5" global-modules@^1.0.0: version "1.0.0" @@ -7123,6 +7361,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -7209,14 +7454,21 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -graphql-extensions@^0.12.2: - version "0.12.2" - resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.12.2.tgz#f22210e812939b7caa2127589f30e6a1c671540f" - integrity sha512-vFaZua5aLiCOOzxfY5qzHZ6S52BCqW7VVOwzvV52Wb5edRm3dn6u+1MR9yYyEqUHSf8LvdhEojYlOkKiaQ4ghA== +graphql-extensions@^0.12.4: + version "0.12.4" + resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.12.4.tgz#c0aa49a20f983a2da641526d1e505996bd2b4188" + integrity sha512-GnR4LiWk3s2bGOqIh6V1JgnSXw2RCH4NOgbCFEWvB6JqWHXTlXnLZ8bRSkCiD4pltv7RHUPWqN/sGh8R6Ae/ag== dependencies: "@apollographql/apollo-tools" "^0.4.3" - apollo-server-env "^2.4.4" - apollo-server-types "^0.5.0" + apollo-server-env "^2.4.5" + apollo-server-types "^0.5.1" + +graphql-middleware@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-4.0.2.tgz#eb589bf428e1795e48cd6a3cfeeba0807b996ebd" + integrity sha512-ESVDvMXeN00S1BNsjNS18uExcR16J8zbT31CuKcpyeBa7IMbidG0Pnqnu5P1wKkJLmPmKOfCljWlhXpD/Fawqg== + dependencies: + graphql-tools "^4.0.5" graphql-postgres-subscriptions@^1.0.4: version "1.0.5" @@ -7228,6 +7480,15 @@ graphql-postgres-subscriptions@^1.0.4: pg "^7.4.1" pg-ipc "^1.0.4" +graphql-shield@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-7.3.2.tgz#ecb8e2f2533a7dc5c1a67d79a928807014c9fa0d" + integrity sha512-LxFgVqY6hYa1mAO8BvRyS3vk9XkZsOOrpHrM35/wMNXqhF0pnJbdF788KSqMcxvdAL/dQYcTRhE8Mjgj7nacpQ== + dependencies: + "@types/yup" "0.29.3" + object-hash "^2.0.3" + yup "^0.29.0" + graphql-subscriptions@^0.5.8: version "0.5.8" resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz#13a6143c546bce390404657dc73ca501def30aa7" @@ -7242,12 +7503,12 @@ graphql-subscriptions@^1.0.0: dependencies: iterall "^1.2.1" -graphql-tag@^2.10.1, graphql-tag@^2.9.2: - version "2.10.3" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.3.tgz#ea1baba5eb8fc6339e4c4cf049dabe522b0edf03" - integrity sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA== +graphql-tag@^2.10.1, graphql-tag@^2.10.4, graphql-tag@^2.9.2: + version "2.10.4" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.4.tgz#2f301a98219be8b178a6453bb7e33b79b66d8f83" + integrity sha512-O7vG5BT3w6Sotc26ybcvLKNTdfr4GfsIVMD+LdYqXCeJIYPRyp8BIsDOUtxw7S1PYvRw5vH3278J2EDezR6mfA== -graphql-tools@^4.0.0, graphql-tools@^4.0.4: +graphql-tools@^4.0.0, graphql-tools@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg== @@ -7269,9 +7530,9 @@ graphql-upload@^8.0.2: object-path "^0.11.4" graphql@^14.0.2, graphql@^14.2.1, graphql@^14.5.3: - version "14.6.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.6.0.tgz#57822297111e874ea12f5cd4419616930cd83e49" - integrity sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg== + version "14.7.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72" + integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA== dependencies: iterall "^1.2.2" @@ -7426,22 +7687,18 @@ helmet-csp@2.10.0: dasherize "2.0.0" helmet@^3.8.1: - version "3.22.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.22.0.tgz#3a6f11d931799145f0aff15dbc563cff9e13131f" - integrity sha512-Xrqicn2nm1ZIUxP3YGuTBmbDL04neKsIT583Sjh0FkiwKDXYCMUqGqC88w3NUvVXtA75JyR2Jn6jw6ZEMOD+ZA== + version "3.23.3" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.23.3.tgz#5ba30209c5f73ded4ab65746a3a11bedd4579ab7" + integrity sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA== dependencies: depd "2.0.0" - dns-prefetch-control "0.2.0" dont-sniff-mimetype "1.1.0" - expect-ct "0.2.0" feature-policy "0.3.0" - frameguard "3.1.0" helmet-crossdomain "0.4.0" helmet-csp "2.10.0" hide-powered-by "1.1.0" hpkp "2.0.0" hsts "2.2.0" - ienoopen "1.1.0" nocache "2.1.0" referrer-policy "1.2.0" x-xss-protection "1.3.0" @@ -7477,17 +7734,12 @@ hoek@4.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== -hoek@6.x.x: - version "6.1.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" - integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ== - hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7651,14 +7903,14 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@^1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" toidentifier "1.0.0" @@ -7672,6 +7924,17 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" @@ -7739,13 +8002,20 @@ i@0.3.x: resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -7768,11 +8038,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ienoopen@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.1.0.tgz#411e5d530c982287dbdc3bb31e7a9c9e32630974" - integrity sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ== - iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -7795,6 +8060,11 @@ image-q@^1.1.1: resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + import-fresh@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -7803,14 +8073,6 @@ import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@2.0.0, import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -7819,6 +8081,14 @@ import-local@^1.0.0: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -7864,7 +8134,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7921,15 +8191,15 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^1.2.0, interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -interpret@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.3.0.tgz#6f637617cf307760be422ab9f4d13cc8a35eca1a" - integrity sha512-RDVhhDkycLoSQtE9o0vpK/vOccVDsCbWVzRxArGYnlQLcihPl2loFbPyiH7CM0m2/ijOJU3+PZbnBPaB6NJ1MA== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" @@ -7953,11 +8223,6 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -8067,10 +8332,10 @@ is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== is-ci@2.0.0: version "2.0.0" @@ -8220,13 +8485,13 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-installed-globally@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= +is-installed-globally@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" + global-dirs "^2.0.1" + is-path-inside "^3.0.1" is-map@^2.0.1: version "2.0.1" @@ -8291,13 +8556,6 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -8305,6 +8563,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -8332,12 +8595,12 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.4, is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" @@ -8515,9 +8778,9 @@ isomorphic-fetch@^2.1.1: whatwg-fetch ">=0.10.0" isomorphic.js@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.1.3.tgz#b2956e14be3bc10efb5fe80e6b5bebc16e1deeca" - integrity sha512-pabBRLDwYefSsNS+qCazJ97o7P5xDTrNoxSYFTM09JlZTxPrOEPGKekwqUy3/Np4C4PHnVUXHYsZPOix0jELsA== + version "0.1.4" + resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.1.4.tgz#6cc878773b0d895261a1b022e6863d564fcccd28" + integrity sha512-t9zbgkjE7f9f2M6OSW49YEq0lUrSdAllBbWFUZoeck/rnnFae6UlhmDtXWs48VJY3ZpryCoZsRiAiKD44hPIGQ== isstream@0.1.x, isstream@~0.1.2: version "0.1.2" @@ -8926,15 +9189,6 @@ joi@^10.0.6: items "2.x.x" topo "2.x.x" -joi@^14.3.0: - version "14.3.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" - integrity sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ== - dependencies: - hoek "6.x.x" - isemail "3.x.x" - topo "3.x.x" - jpeg-js@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.0.tgz#39adab7245b6d11e918ba5d4b49263ff2fc6a2f9" @@ -9130,10 +9384,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.3.0.tgz#edd727794ea284d7fda575015ed1b0cde0289ab6" - integrity sha512-3HNoc7nZ1hpZIKB3hJ7BlFRkzCx2BynRtfSwbkqZdpRdvAPsGMnzclPwrvDBS7/lalHTj21NwIeaEpysHBOudg== +jsx-ast-utils@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== dependencies: array-includes "^3.1.1" object.assign "^4.1.0" @@ -9207,34 +9461,142 @@ knex@^0.16.3: uuid "^3.3.2" v8flags "^3.1.2" +knex@^0.21.1: + version "0.21.2" + resolved "https://registry.yarnpkg.com/knex/-/knex-0.21.2.tgz#716e2f515aa55575eb812b4c7f58e532a3de6a12" + integrity sha512-hNp9f3yXCHtMrhV2pVsuCNYmPlgXhyqviMQGLBd9zdF03ZqCO9MPng0oYhNMgIs+vDr55VC6tjEbF1OQ1La7Kg== + dependencies: + colorette "1.2.1" + commander "^5.1.0" + debug "4.1.1" + esm "^3.2.25" + getopts "2.2.5" + inherits "~2.0.4" + interpret "^2.2.0" + liftoff "3.1.0" + lodash "^4.17.19" + mkdirp "^1.0.4" + pg-connection-string "2.3.0" + tarn "^3.0.0" + tildify "2.0.0" + uuid "^7.0.3" + v8flags "^3.2.0" + known-css-properties@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084" integrity sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA== -lazy-ass@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= +language-subtag-registry@~0.3.2: + version "0.3.20" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" + integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-js@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" + integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== + dependencies: + abstract-leveldown "~6.2.3" + buffer "^5.5.0" + inherits "^2.0.3" + ltgt "^2.1.2" + +level-packager@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= +level@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" + integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== dependencies: - invert-kv "^1.0.0" + level-js "^5.0.0" + level-packager "^5.1.0" + leveldown "^5.4.0" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== +leveldown@^5.4.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" + integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== dependencies: - invert-kv "^2.0.0" + abstract-leveldown "~6.2.1" + napi-macros "~2.0.0" + node-gyp-build "~4.1.0" -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" leven@^2.1.0: version "2.1.0" @@ -9261,13 +9623,20 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lib0@^0.2.27, lib0@^0.2.28: +lib0@^0.2.28: version "0.2.28" resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.28.tgz#bb0c9af79b260ebf3a7b359af622e1d8c5dc52fd" integrity sha512-3gB5Ow5B/iL5jSEDgNIlkylX5loHrGeTajZXcCFEE8svVhYBVAn9Rt0uw+86bpbw64tFN8gkZ+BSivv8C0ZWdQ== dependencies: isomorphic.js "^0.1.3" +lib0@^0.2.31, lib0@^0.2.32: + version "0.2.32" + resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.32.tgz#ec4572d84c00355a8d998b83eb950cf9da9c2792" + integrity sha512-cHHKhHTojtvFSsthTk+CKuD17jMHIxuZxYpTzXj9TeQLPNoGNDPl6ax+J6eFETVe3ZvPMh3V0nGfJgGo6QgSvA== + dependencies: + isomorphic.js "^0.1.3" + liftoff@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -9453,15 +9822,6 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" @@ -9504,7 +9864,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.14: +lodash-es@^4.17.11, lodash-es@^4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== @@ -9606,7 +9966,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.15, lodash@^4, lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.1: +lodash@4.17.19, lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +lodash@^4, lodash@^4.17.3, lodash@^4.3.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -9699,6 +10064,11 @@ lru-cache@^5.0.0, lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +ltgt@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -9735,19 +10105,12 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= @@ -9838,21 +10201,12 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - memoize-one@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -9868,22 +10222,6 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - meow@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" @@ -10006,7 +10344,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -10169,16 +10507,21 @@ mkdirp@0.x.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp dependencies: minimist "^1.2.5" -moment@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment@^2.18.1, moment@^2.22.1: +moment@2.26.0: version "2.26.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== +moment@^2.18.1, moment@^2.22.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + moo@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" @@ -10286,6 +10629,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -10311,9 +10659,9 @@ ncp@1.0.x: integrity sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY= nearley@^2.7.10: - version "2.19.3" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.3.tgz#ae3b040e27616b5348102c436d1719209476a5a1" - integrity sha512-FpAy1PmTsUpOtgxr23g4jRNvJHYzZEW2PixXeSzksLR/ykPfwKhAodc2+9wQhY+JneWLcvkDw6q7FJIsIdF/aQ== + version "2.19.5" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.5.tgz#6be78e4942eeb9a043b17c563413111d4ad849b7" + integrity sha512-qoh1ZXXl0Kpn40tFhmgvffUAlbpRMcjLUagNVnT1JmliUIsB4tFabmCNhD97+tkf9FZ/SLhhYzNow0V3GitzDg== dependencies: commander "^2.19.0" moo "^0.5.0" @@ -10335,7 +10683,12 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -10358,11 +10711,11 @@ nocache@2.1.0: integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== node-dev@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/node-dev/-/node-dev-4.0.0.tgz#c03a492c517ed3153693f9082e46c304c522a48d" - integrity sha512-XwaUAv2bb7Y9bhCT8dsel5XquRQczG5z4QYhh2otdUMuhRAgtDjFxZEKK4Tsa57vL2ye8ojfLIAZOTBx+Ui9zw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-dev/-/node-dev-4.3.0.tgz#de98164a86bbb6dbd7378e23f3d6638041d4a81f" + integrity sha512-rKXIUEHCETQWwNu0t0mK2fPxHjdtR0BFH35LjXsGq0e0gJf7z8Lgor348h8WqTVl7P5YWgNu5ZtarOV2uKvlVg== dependencies: - dateformat "~1.0.4-1.2.3" + dateformat "^3.0.3" dynamic-dedupe "^0.3.0" filewatcher "~3.0.0" minimist "^1.1.3" @@ -10387,6 +10740,11 @@ node-forge@0.9.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-gyp-build@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" + integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -10448,10 +10806,10 @@ node-pre-gyp@0.14.0: semver "^5.3.0" tar "^4.4.2" -node-releases@^1.1.53: - version "1.1.57" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.57.tgz#f6754ce225fad0611e61228df3e09232e017ea19" - integrity sha512-ZQmnWS7adi61A9JsllJ2gdj2PauElcjnOwTp2O011iGzoakTxUsDGSe+6vD7wXbKdqhSFymC0OSx35aAMhrSdw== +node-releases@^1.1.58: + version "1.1.59" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" + integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== node-wait-for-it@^0.2.0: version "0.2.0" @@ -10632,10 +10990,15 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-hash@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== + object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: version "1.1.2" @@ -10682,7 +11045,7 @@ object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.entries@^1.1.0, object.entries@^1.1.1: +object.entries@^1.1.1, object.entries@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== @@ -10732,7 +11095,7 @@ object.pick@^1.2.0, object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1: +object.values@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== @@ -10751,6 +11114,14 @@ objection@^1.5.3: bluebird "^3.5.5" lodash "^4.17.11" +objection@^2.1.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/objection/-/objection-2.2.1.tgz#d0d4ae91bf97c89301d1390bf76c8bf4ab237e56" + integrity sha512-VY/OGLlLpHwIHck9/HC9meSpjE9w2b4ufxDu/igVCowyDajmcU3AwRmaqKQP8MhMCLPZKSj8gqIAQ5m5zpV5YA== + dependencies: + ajv "^6.12.0" + db-errors "^0.2.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -10818,6 +11189,13 @@ optimism@^0.10.0: dependencies: "@wry/context" "^0.4.0" +optimism@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.12.1.tgz#933f9467b9aef0e601655adb9638f893e486ad02" + integrity sha512-t8I7HM1dw0SECitBYAqFOVHoBAHEQBTeKjIL9y9ImHzAVkdyPK4ifTgM4VJRDtTUY4r/u5Eqxs4XcGPHaoPkeQ== + dependencies: + "@wry/context" "^0.5.2" + optimist@0.2: version "0.2.8" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.2.8.tgz#e981ab7e268b457948593b55674c099a815cac31" @@ -10886,15 +11264,6 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -10913,11 +11282,6 @@ ospath@1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -10928,11 +11292,6 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^1.0.0, p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -11244,7 +11603,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -11329,9 +11688,9 @@ pause@0.0.1: integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -11368,6 +11727,11 @@ pg-connection-string@2.0.0: resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.0.0.tgz#3eefe5997e06d94821e4d502e42b6a1c73f8df82" integrity sha1-Pu/lmX4G2Ugh5NUC5CtqHHP434I= +pg-connection-string@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6" + integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w== + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" @@ -11485,13 +11849,6 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pkginfo@0.3.x: version "0.3.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" @@ -11513,9 +11870,9 @@ pngjs@^3.0.0, pngjs@^3.3.3: integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== portfinder@^1.0.26: - version "1.0.26" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" - integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== + version "1.0.27" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.27.tgz#a41333c116b5e5f3d380f9745ac2f35084c4c758" + integrity sha512-bJ3U3MThKnyJ9Dx1Idtm5pQmxXqw08+XOHhi/Lie8OF1OlhVaBFhsntAIhkZYjfDcCzszSr0w1yCbccThhzgxQ== dependencies: async "^2.6.2" debug "^3.1.1" @@ -11981,11 +12338,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-queue@^2.2.3: - version "2.2.5" - resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.5.tgz#2f6f5f7c0f6d08109e967659c79b88a9ed5e93b4" - integrity sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q= - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -11993,7 +12345,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prompt@^1.0.0, prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87: +prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87: version "1.0.0" resolved "https://codeload.github.com/flatiron/prompt/tar.gz/1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87" dependencies: @@ -12021,6 +12373,11 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, object-assign "^4.1.1" react-is "^16.8.1" +property-expr@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" + integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== + prosemirror-commands@^1.0.1, prosemirror-commands@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.1.4.tgz#991563e67623acab4f8c510fad1570f8b4693780" @@ -12092,13 +12449,20 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.1.3: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" -prosemirror-model@>=1.0.0, prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.2.0, prosemirror-model@^1.8.1, prosemirror-model@^1.9.1: +prosemirror-model@>=1.0.0, prosemirror-model@^1.8.1, prosemirror-model@^1.9.1: version "1.10.0" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.10.0.tgz#bb1101732bccacf336e23a36a8b045b865025fa2" integrity sha512-xTMbbO2q4abs5lJdeRvk/SrftNfZlMdvChKziTiK+OKtP8LkQI8uw39u4S5zqyflrmW3Or6+qnyFPf1p4v2u1g== dependencies: orderedmap "^1.1.0" +prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.2.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.11.0.tgz#dc36cdb3ad6442b9f6325c7d89170c624f9dc520" + integrity sha512-GqoAz/mIYjdv8gVYJ8mWFKpHoTxn/lXq4tXJ6bTVxs+rem2LzMYXrNVXfucGtfsgqsJlRIgng/ByG9j7Q8XDrg== + dependencies: + orderedmap "^1.1.0" + prosemirror-schema-basic@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.1.2.tgz#4bde5c339c845e0d08ec8fe473064e372ca51ae3" @@ -12144,7 +12508,14 @@ prosemirror-tables@^1.1.0: prosemirror-transform "^1.2.1" prosemirror-view "^1.13.3" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.2.3: +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.2.7.tgz#ba0e291a3cb43e6b633b779d93f53d01f5dad570" + integrity sha512-/107Lo2zeDgXuJBxb8s/clNu0Z2W8Gv3MKmkuSS/68Mcr7LBaUnN/Hj2g+GUxEJ7MpExCzFs65GrsNo2K9rxUQ== + dependencies: + prosemirror-model "^1.0.0" + +prosemirror-transform@^1.2.1, prosemirror-transform@^1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.2.5.tgz#7a3e2c61fcdbaf1d0844a2a3bc34fc3524e9809c" integrity sha512-eqeIaxWtUfOnpA1ERrXCuSIMzqIJtL9Qrs5uJMCjY5RMSaH5o4pc390SAjn/IDPeIlw6auh0hCCXs3wRvGnQug== @@ -12156,7 +12527,16 @@ prosemirror-utils@^0.9.6: resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.6.tgz#3d97bd85897e3b535555867dc95a51399116a973" integrity sha512-UC+j9hQQ1POYfMc5p7UFxBTptRiGPR7Kkmbl3jVvU8VgQbkI89tR/GK+3QYC8n+VvBZrtAoCrJItNhWSxX3slA== -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.11, prosemirror-view@^1.13.3: +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.15.2.tgz#3f07881d11f18c033467591bbaec26b569bbc22c" + integrity sha512-0wftmMDVD8VXj2HZgv6Rg//+tgJC0lpV9LkYlCiAkDLKsf4yW3Ozs5td1ZXqsyoqvX0ga/k5g2EyLbqOMmC1+w== + dependencies: + prosemirror-model "^1.1.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +prosemirror-view@^1.13.11, prosemirror-view@^1.13.3: version "1.14.11" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.14.11.tgz#cb1fa9910ac5c834fd8bb15598d4ed6609465a5c" integrity sha512-zcd6saORBuYkn2bVh9Nqu0BfSPE4xl2ct3VpWTu/BUShs/8hlIpckxz/9+NwcDqgYc+AgBgo/XcL0HNcLdxvjw== @@ -12224,15 +12604,15 @@ public-encrypt@^4.0.0: safe-buffer "^5.1.2" pubsweet-client@^10.0.2: - version "10.2.4" - resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-10.2.4.tgz#e00ab8eb9534b5259fa0037929bf0b444e0ef9b2" - integrity sha512-BLOSPCsM6OB5XaKzKXZHmcaygWUUTfCvB/Id8uGRHTh0N7PkyC2ifbaS8zRLiyXMWCLj2MoQGCkglSf4fVTcEg== + version "10.2.5" + resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-10.2.5.tgz#3f22f70bfb182a8cf7fff9bdba11c4ae699a8939" + integrity sha512-wIhx4BuufNGNBw54T47aVOfo//pKoEcrvixItsYesXDKh2cWjRTSOkx53nY+W9u4AvRTSse3fh3vA2sHF+ct4g== dependencies: "@apollo/react-common" "^3.1.3" "@apollo/react-components" "^3.1.3" "@apollo/react-hoc" "^3.1.3" - "@pubsweet/ui" "^12.5.0" - "@pubsweet/ui-toolkit" "^2.3.1" + "@pubsweet/ui" "^12.6.0" + "@pubsweet/ui-toolkit" "^2.3.2" apollo-cache-inmemory "^1.5.1" apollo-client "^2.6.4" apollo-link "^1.2.11" @@ -12252,61 +12632,15 @@ pubsweet-client@^10.0.2: styled-normalize "^8.0.6" subscriptions-transport-ws "^0.9.12" -pubsweet-server@13.7.2: - version "13.7.2" - resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-13.7.2.tgz#4ce9f1b9e1b8b0814ba82e7a41be1224f8a66098" - integrity sha512-ArNwZ9YF8TJycqun7z6bn3CaVzvntGgQCS862RqRhDBAq5N1QPqfRS3fI0B8EHNedWeSdB8BCpIx866w7wSpPA== - dependencies: - "@pubsweet/db-manager" "^3.0.20" - "@pubsweet/errors" "^2.0.24" - "@pubsweet/logger" "^0.2.34" - "@pubsweet/models" "^0.2.21" - apollo-server-express "^2.4.8" - authsome "^0.1.0" - bluebird "^3.5.1" - body-parser "^1.15.2" - colors "^1.1.2" - config "^3.0.1" - cookie-parser "^1.4.3" - dataloader "^1.4.0" - dotenv "^4.0.0" - express "^4.16.1" - fs-extra "^7.0.1" - graphql "^14.2.1" - graphql-postgres-subscriptions "^1.0.4" - graphql-tools "^4.0.4" - helmet "^3.8.1" - http-status-codes "^1.0.6" - joi "^14.3.0" - jsonwebtoken "^8.4.0" - lodash "^4.0.0" - minimist "^1.2.0" - morgan "^1.8.2" - multer "^1.1.0" - objection "^1.5.3" - passport "^0.4.0" - passport-anonymous "^1.0.1" - passport-http-bearer "^1.0.1" - passport-local "^1.0.0" - pg "^7.4.1" - pg-boss "^3.1.2" - promise-queue "^2.2.3" - prompt "^1.0.0" - pubsweet-sse "^1.0.28" - subscriptions-transport-ws "^0.9.12" - uuid "^3.0.1" - waait "^1.0.2" - winston "^2.2.0" - -pubsweet-server@^13.11.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-13.11.0.tgz#5ac8c892248843e5e6d55b178884b6d50d74aa38" - integrity sha512-aReJWCt7T/LDifz7Fkw/HV+TMEMHLQmCU8UhOkxNZ4hl5hUe3qnfZ2YaB/wIWg90kiAf/w88e8K+jq+dA0DMMw== +pubsweet-server@13.11.1, pubsweet-server@^13.11.1: + version "13.11.1" + resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-13.11.1.tgz#8ebed92e8cfddee3aa65543473896f0cc66062e2" + integrity sha512-MT6KincsVjgYjd3FtNqQd2AcuM39vM9Ebe6AlhFUJVhgNmIuFAXrg3p/pjxDxkCWKDs/oI9V8brldndzvU29UQ== dependencies: - "@pubsweet/db-manager" "^3.1.10" - "@pubsweet/errors" "^2.0.35" - "@pubsweet/logger" "^0.2.45" - "@pubsweet/models" "^0.3.10" + "@pubsweet/db-manager" "^3.1.11" + "@pubsweet/errors" "^2.0.36" + "@pubsweet/logger" "^0.2.46" + "@pubsweet/models" "^0.3.11" apollo-server-express "^2.4.8" authsome "^0.1.0" body-parser "^1.15.2" @@ -12324,29 +12658,29 @@ pubsweet-server@^13.11.0: lodash "^4.0.0" morgan "^1.8.2" multer "^1.1.0" - objection "^1.5.3" + objection "^2.1.3" passport "^0.4.0" passport-anonymous "^1.0.1" passport-http-bearer "^1.0.1" passport-local "^1.0.0" pg "^7.4.1" pg-boss "^3.1.2" - pubsweet-sse "^1.0.39" + pubsweet-sse "^1.0.40" subscriptions-transport-ws "^0.9.12" waait "^1.0.2" -pubsweet-sse@^1.0.28, pubsweet-sse@^1.0.39: - version "1.0.39" - resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-1.0.39.tgz#aa2f17401cc71f6844b279907b1e5f7486f2f0ef" - integrity sha512-jZM0JAm8Uj3vPz/WQpU/lSgZQmnM3xcLL0NEclyD/Wgs2QU2fxtZ7yA+/dhgH/YYoCiyim3lkdMpyDt8g072+g== +pubsweet-sse@^1.0.40: + version "1.0.40" + resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-1.0.40.tgz#93736085ca472ba28b11d08a212a5b96dfaab314" + integrity sha512-1hVcG3D4wxMyA979pllqIIBrnK8i9BilEvF1xsIu20zTh053eA5bMbJXxR5mm8OUGNqXdqqoz8LsZuJqR43XNQ== pubsweet@^5.1.2: - version "5.1.13" - resolved "https://registry.yarnpkg.com/pubsweet/-/pubsweet-5.1.13.tgz#7b5be20f2dd82052c4d6337808940918c7be7a33" - integrity sha512-B2zvhjqvuxR91yQKwxzBzk0MZL7bsIJjlU7fZUinSgzvlfEOCSlCuOil18Q/RYm+b1p0+xFbTPS0RYHhXJITJA== + version "5.1.14" + resolved "https://registry.yarnpkg.com/pubsweet/-/pubsweet-5.1.14.tgz#a4f8756e72b3a8c63b24344d52e72d7bdd3a5180" + integrity sha512-f8L4/099/fTU26fCmhBlv/QxhvAmutyNOJ7FfpYLVcXiJ7sWdWhtTwAHvI3mLMbIEXWbFhBCMIS9GH4OqDQHwg== dependencies: - "@pubsweet/db-manager" "^3.1.10" - "@pubsweet/logger" "^0.2.45" + "@pubsweet/db-manager" "^3.1.11" + "@pubsweet/logger" "^0.2.46" colors "^1.1.2" commander "^2.20.0" config "^3.0.1" @@ -12357,7 +12691,7 @@ pubsweet@^5.1.2: lodash "^4.17.11" node-dev "^4.0.0" prompt flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87 - pubsweet-server "^13.11.0" + pubsweet-server "^13.11.1" webpack "^4.29.5" webpack-dev-middleware "^3.6.0" webpack-dev-server "^3.9.0" @@ -12495,7 +12829,7 @@ randomatic@^3.0.0: kind-of "^6.0.0" math-random "^1.0.1" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -12619,9 +12953,9 @@ react-html-parser@^2.0.2: htmlparser2 "^3.9.0" react-image@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-image/-/react-image-4.0.1.tgz#e85a9c5ca11c84c59098dc0db3f5fabb05aacc50" - integrity sha512-B80I1UQU6XHJ5ZrQrmD6ADc5GrBlpXRsmcgBgwwJnfYflynkZ5NBrLBR+yt3zlDp6qlelxrBnF0ChpOwdgYiEA== + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-image/-/react-image-4.0.3.tgz#6fa722877660b67295298a914bff1ed87ad2cf83" + integrity sha512-19MUK9u1qaw9xys8XEsVkSpVhHctEBUeYFvrLTe1PN+4w5Co13AN2WA7xtBshPM6SthsOj77SlDrEAeOaJpf7g== react-input-autosize@^2.1.2, react-input-autosize@^2.2.2: version "2.2.2" @@ -12630,7 +12964,7 @@ react-input-autosize@^2.1.2, react-input-autosize@^2.2.2: dependencies: prop-types "^15.5.8" -react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6, react-is@^16.9.0: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -12664,13 +12998,12 @@ react-markdown@^4.3.1: xtend "^4.0.1" react-mentions@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/react-mentions/-/react-mentions-3.3.1.tgz#b9e111443403de6a8c7e7f363d6d10939f0615f4" - integrity sha512-/UOZXTgK2rvuyjj8T0wVb4AsAjcKahwG6PtweSdbZAWbwmkaGkm49Yu725D6Xyw73h4qZhvzIeIY0K8ichfAHg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/react-mentions/-/react-mentions-3.3.2.tgz#6dca1e5f80813f3397b000519badb6ae30f31547" + integrity sha512-JEuJMnjXOoLo+gkT59ZscZ9ulV7O333cu81pKiWutuX0CCyoedJTxPDlVJAxoaDSUwsMgOmb3GmuiwafWYdizg== dependencies: "@babel/runtime" "7.4.5" invariant "^2.2.4" - lodash "^4.5.1" prop-types "^15.5.8" substyle "^6.3.1" @@ -12889,7 +13222,7 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -12940,14 +13273,6 @@ recompose@^0.30.0: react-lifecycles-compat "^3.0.2" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" @@ -12995,27 +13320,31 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: + version "0.13.6" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.6.tgz#d236043c46ffab2968c1ef651803d8acdea8ed65" + integrity sha512-GmwlGiazQEbOwQWDdbbaP10i15pGtScYWLbMZuu+RKRz0cZ+g8IUONazBnaZqe7j1670IV1HgE4/8iy7CQPf4Q== + +regenerator-runtime@^0.13.3: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== regenerator-transform@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" - integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: "@babel/runtime" "^7.8.4" - private "^0.1.8" regex-cache@^0.4.2: version "0.4.4" @@ -13197,7 +13526,7 @@ request-promise-core@1.1.3: dependencies: lodash "^4.17.15" -request-promise-native@^1.0.5, request-promise-native@^1.0.8: +request-promise-native@^1.0.5: version "1.0.8" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== @@ -13206,7 +13535,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.87.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -13315,7 +13644,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.3.3: +resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -13424,13 +13753,20 @@ rxjs@^5.0.0-beta.11: dependencies: symbol-observable "1.0.1" -rxjs@^6.3.3, rxjs@^6.5.4: +rxjs@^6.3.3: version "6.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" +rxjs@^6.5.5: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -13448,7 +13784,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -13600,6 +13936,13 @@ serialize-javascript@^2.1.2: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -13653,6 +13996,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -13990,9 +14338,9 @@ staged-git-files@0.0.4: integrity sha1-15fhtVHKemOd7AI33G60u5vhfTU= start-server-and-test@^1.10.6: - version "1.11.0" - resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.11.0.tgz#1b1a83d062b0028ee6e296bb4e0231f2d8b2f4af" - integrity sha512-FhkJFYL/lvbd0tKWvbxWNWjtFtq3Zpa09QDjA8EUH88AsgNL4hkAAKYNmbac+fFM8/GIZoJ1Mj4mm3SMI0X1bA== + version "1.11.2" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.11.2.tgz#9144b7b6f25197148f159f261ae80119afbb17d5" + integrity sha512-rk1zS5WQvdbc8slE5hPtzfji1dFSnBAfm+vSjToZNrBvozHJvuAG80xE5u8N4tQjg3Ej1Crjc19J++r28HGJgg== dependencies: bluebird "3.7.2" check-more-types "2.24.0" @@ -14000,7 +14348,7 @@ start-server-and-test@^1.10.6: execa "3.4.0" lazy-ass "1.6.0" ps-tree "1.2.0" - wait-on "4.0.0" + wait-on "5.1.0" state-toggle@^1.0.0: version "1.0.3" @@ -14147,7 +14495,7 @@ string.prototype.trim@^1.2.1: es-abstract "^1.17.0-next.1" function-bind "^1.1.1" -string.prototype.trimend@^1.0.0: +string.prototype.trimend@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== @@ -14155,25 +14503,7 @@ string.prototype.trimend@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" - -string.prototype.trimstart@^1.0.0: +string.prototype.trimstart@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== @@ -14262,13 +14592,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" @@ -14407,9 +14730,9 @@ stylis@^3.5.0: integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.12, subscriptions-transport-ws@^0.9.16: - version "0.9.16" - resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" - integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== + version "0.9.17" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.17.tgz#e30e40f0caae0d2781903c01a8cb51b6e2682098" + integrity sha512-hNHi2N80PBz4T0V0QhnnsMGvG3XDFDS9mS6BhZ3R12T6EBywC8d/uJscsga0cVO4DKtXCkCRrWm2sOYrbOdhEA== dependencies: backo2 "^1.0.2" eventemitter3 "^3.1.0" @@ -14458,13 +14781,6 @@ supertest@^3.0.0: methods "^1.1.2" superagent "^3.8.3" -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -14491,6 +14807,13 @@ supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" @@ -14514,7 +14837,7 @@ symbol-observable@1.0.1: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= -symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0: +symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -14524,6 +14847,11 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +synchronous-promise@^2.0.10: + version "2.0.13" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702" + integrity sha512-R9N6uDkVsghHePKh1TEqbnLddO2IY25OcsksyFp/qBe7XYd0PVbKEWxhcdMhpLzE1I6skj5l4aEZ3CRxcbArlA== + table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -14571,25 +14899,30 @@ tarn@^1.1.5: resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.5.tgz#7be88622e951738b9fa3fb77477309242cdddc2d" integrity sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g== +tarn@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.0.tgz#a4082405216c0cce182b8b4cb2639c52c1e870d4" + integrity sha512-PKUnlDFODZueoA8owLehl8vLcgtA8u4dRuVbZc92tspDYZixjJL6TqYOmryf/PfP/EBX+2rgNcrj96NO+RPkdQ== + terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^3.1.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" terser@^4.1.2: - version "4.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" - integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -14646,6 +14979,11 @@ tildify@1.2.0: dependencies: os-homedir "^1.0.0" +tildify@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" + integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -14758,18 +15096,16 @@ topo@2.x.x: dependencies: hoek "4.x.x" -topo@3.x.x: - version "3.0.3" - resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" - integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== - dependencies: - hoek "6.x.x" - toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + touch@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/touch/-/touch-2.0.2.tgz#ca0b2a3ae3211246a61b16ba9e6cbf1596287164" @@ -14792,11 +15128,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" @@ -14834,6 +15165,16 @@ ts-invariant@^0.4.0, ts-invariant@^0.4.4: dependencies: tslib "^1.9.3" +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" @@ -15230,7 +15571,7 @@ utils-merge@1.0.1, utils-merge@1.x.x: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -15241,16 +15582,16 @@ uuid@^7.0.3: integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== uuid@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" - integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== + version "8.2.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.2.0.tgz#cb10dd6b118e2dada7d0cd9730ba7417c93d920e" + integrity sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8flags@^3.1.2: +v8flags@^3.1.2, v8flags@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== @@ -15333,17 +15674,16 @@ waait@^1.0.2, waait@^1.0.5: resolved "https://registry.yarnpkg.com/waait/-/waait-1.0.5.tgz#6a3c7aaa88bd0a1a545e9d47890b9595bebf9aa7" integrity sha512-wp+unA4CpqxvBUKHHv8D86fK4jWByHAWyhEXXVHfVUZfK+16ylpj7hjQ58Z8j9ntu8XNukRQT8Fi5qbyJ8rkyw== -wait-on@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-4.0.0.tgz#4d7e4485ca759968897fd3b0cc50720c0b4ca959" - integrity sha512-QrW3J8LzS5ADPfD9Rx5S6KJck66xkqyiFKQs9jmUTkIhiEOmkzU7WRZc+MjsnmkrgjitS2xQ4bb13hnlQnKBUQ== +wait-on@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.1.0.tgz#b697f21c6fea0908b9c7ad6ed56ace4736768b66" + integrity sha512-JM0kgaE+V0nCDvSl72iM05W8NDt2E2M56WC5mzR7M+T+k6xjt2yYpyom+xA8RasSunFGzbxIpAXbVzXqtweAnA== dependencies: - "@hapi/joi" "^16.1.8" - lodash "^4.17.15" - minimist "^1.2.0" - request "^2.88.0" - request-promise-native "^1.0.8" - rxjs "^6.5.4" + "@hapi/joi" "^17.1.1" + axios "^0.19.2" + lodash "^4.17.19" + minimist "^1.2.5" + rxjs "^6.5.5" walker@~1.0.5: version "1.0.7" @@ -15523,21 +15863,21 @@ webpack-bundle-analyzer@^3.8.0: ws "^6.0.0" webpack-cli@^3.3.9: - version "3.3.11" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" - integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" webpack-dev-middleware@^3.6.0, webpack-dev-middleware@^3.7.1, webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -15661,9 +16001,9 @@ websocket-driver@>=0.5.1: websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" @@ -15673,9 +16013,9 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: iconv-lite "0.4.24" whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.2.0.tgz#8e134f701f0a4ab5fda82626f113e2b647fd16dc" + integrity sha512-SdGPoQMMnzVYThUbSrEvqTlkvC1Ux27NehaJ/GUHBfNrh5Mjg+1/uRyFMwVnxO2MrikMWvWAqUGgQOfVU4hT7w== whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" @@ -15789,10 +16129,10 @@ winston@0.8.x: pkginfo "0.3.x" stack-trace "0.0.x" -winston@2.x, winston@^2.2.0, winston@^2.4.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.4.tgz#a01e4d1d0a103cf4eada6fc1f886b3110d71c34b" - integrity sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q== +winston@2.x, winston@^2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.5.tgz#f2e431d56154c4ea765545fc1003bd340c95b59a" + integrity sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A== dependencies: async "~1.0.0" colors "1.0.x" @@ -15927,12 +16267,12 @@ xmlbuilder@~11.0.0: integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xpub-edit@^2.6.10: - version "2.6.10" - resolved "https://registry.yarnpkg.com/xpub-edit/-/xpub-edit-2.6.10.tgz#0f316a4389ea85eb19ca29d9fcf52ef293be9c63" - integrity sha512-P3wcaOijXTgfdHdaV3dHMQy2sAwp11w4nzR+a/GVM8GY9POEGPiQbLVjpOChRa9Sd14r0geHKMVB5gqF79cX8Q== + version "2.6.11" + resolved "https://registry.yarnpkg.com/xpub-edit/-/xpub-edit-2.6.11.tgz#9e00414fac43df1c4e57f5d7791a1da7bb6b9610" + integrity sha512-qE0mrlouvH3xOczNRS6Fqu15ez5wEFScfGpROmh7l/gN0kkeRJmJU0YTk1Nn7RfwZewRI0IRQlvV85UGTmjOng== dependencies: - "@pubsweet/ui" "^12.5.0" - "@pubsweet/ui-toolkit" "^2.3.1" + "@pubsweet/ui" "^12.6.0" + "@pubsweet/ui-toolkit" "^2.3.2" classnames "^2.2.6" prosemirror-commands "^1.0.1" prosemirror-dropcursor "^1.0.0" @@ -15969,18 +16309,27 @@ xpub-with-context@^0.2.0: dependencies: recompose "^0.30.0" -xregexp@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== +xss@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.7.tgz#a554cbd5e909324bd6893fb47fff441ad54e2a95" + integrity sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w== dependencies: - "@babel/runtime-corejs3" "^7.8.3" + commander "^2.20.3" + cssfilter "0.0.10" -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y-leveldb@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/y-leveldb/-/y-leveldb-0.1.0.tgz#8b60c1af020252445875ebc70d52666017bcb038" + integrity sha512-sMuitVrsAUNh+0b66I42nAuW3lCmez171uP4k0ePcTAJ+c+Iw9w4Yq3wwiyrDMFXBEyQSjSF86Inc23wEvWnxw== + dependencies: + level "^6.0.1" + lib0 "^0.2.31" + y-protocols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.0.tgz#d06035f9c8824b1fdc652c6a06b3c9aaca9261f0" @@ -15988,6 +16337,17 @@ y-protocols@^1.0.0: dependencies: lib0 "^0.2.28" +y-websocket@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/y-websocket/-/y-websocket-1.3.1.tgz#19e00ad9a4a491c9d0d14768547f437522e7a98f" + integrity sha512-pt4lyFz1jlJObl5IN2r7YWyzsRRdpQXGc2WbBXlsyMamZPID4y+MITeIpEr8n95I0d/Bx28uzgH4qhhb/3QmZg== + dependencies: + lib0 "^0.2.31" + y-leveldb "^0.1.0" + y-protocols "^1.0.0" + optionalDependencies: + ws "^6.2.1" + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -16018,7 +16378,7 @@ yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@^13.1.0, yargs-parser@^13.1.2: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -16033,23 +16393,6 @@ yargs-parser@^8.1.0: dependencies: camelcase "^4.1.0" -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - yargs@^10.0.3: version "10.1.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" @@ -16093,11 +16436,24 @@ yauzl@2.10.0, yauzl@^2.10.0: fd-slicer "~1.1.0" yjs@^13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.2.0.tgz#179997208bd835b84cbc9ffd1037b076299a5eed" - integrity sha512-0augWOespX5KC8de62GCR8WloZhAyBfEF3ZPDpjZlRs6yho7iFKqarpzxxJgmP8zA/pNJiV1EIpMezSxEdNdDw== + version "13.3.0" + resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.3.0.tgz#e43f3297b01dbafd7c21077cd1f651db93e06494" + integrity sha512-QdWZljN7OkAKen3VJ9P7sXwjuw+00WRXvmjZvgT28yMgxGnZ8w2LYP4GynuneLn53I6gud1PxB5zCeVODQC/dg== + dependencies: + lib0 "^0.2.32" + +yup@^0.29.0: + version "0.29.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.29.1.tgz#35d25aab470a0c3950f66040ba0ff4b1b6efe0d9" + integrity sha512-U7mPIbgfQWI6M3hZCJdGFrr+U0laG28FxMAKIgNvgl7OtyYuUoc4uy9qCWYHZjh49b8T7Ug8NNDdiMIEytcXrQ== dependencies: - lib0 "^0.2.27" + "@babel/runtime" "^7.9.6" + fn-name "~3.0.0" + lodash "^4.17.15" + lodash-es "^4.17.11" + property-expr "^2.0.2" + synchronous-promise "^2.0.10" + toposort "^2.0.2" zen-observable-ts@^0.8.21: version "0.8.21" @@ -16107,7 +16463,7 @@ zen-observable-ts@^0.8.21: tslib "^1.9.3" zen-observable "^0.8.0" -zen-observable@^0.8.0: +zen-observable@^0.8.0, zen-observable@^0.8.14: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==