diff --git a/package.json b/package.json index b29aa84..1c9c407 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,11 @@ "@testing-library/react": "^10.4.5", "@testing-library/react-hooks": "^3.4.2", "@testing-library/user-event": "^12.0.11", - "eslint-plugin-styled-components-a11y": "^0.0.16", + "eslint-plugin-styled-components-a11y": "^0.0.17", "history": "^5.0.0", + "jest-axe": "^4.0.0", "jest-fetch-mock": "^3.0.3", + "jest-styled-components": "^7.0.3", "msw": "^0.21.2", "prop-types": "^15.7.2", "react": "^16.13.0", @@ -23,7 +25,7 @@ "scripts": { "start": "react-scripts start", "build": "react-scripts build", - "test": "react-scripts test --env=jest-environment-jsdom-sixteen", + "test": "TZ=Europe/Berlin react-scripts test --env=jest-environment-jsdom-sixteen", "eject": "react-scripts eject", "lint": "eslint .", "format": "eslint --fix .", diff --git a/src/__tests__/SearchPage.js b/src/__tests__/SearchPage.js index ee9a7ec..ec98b8c 100644 --- a/src/__tests__/SearchPage.js +++ b/src/__tests__/SearchPage.js @@ -1,8 +1,12 @@ import React from 'react'; import { MemoryRouter, Route } from 'react-router-dom'; -import { render, screen, within } from '@testing-library/react'; +import { + render, screen, within, waitFor, +} from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import '@testing-library/jest-dom/extend-expect'; +import { axe } from 'jest-axe'; +import 'jest-styled-components'; import App from '../app'; import { defaultSubReddit } from '../config'; @@ -10,7 +14,7 @@ import { defaultSubReddit } from '../config'; const setup = (initialPath = '/') => { let history; - render( + const view = render( { /> , ); - return { history }; + return { ...view, history }; }; -describe('search page', () => { +describe('heatmap', () => { it('loads top post for subreddit in URL', async () => { setup('/search/reactjs'); @@ -33,8 +37,35 @@ describe('search page', () => { // this is just a placeholder assertion that tests if the result // was rendered correctly - expect(await screen.findByText('500')).toBeInTheDocument(); - expect(screen.queryByText('loading-spinner.svg')).not.toBeInTheDocument(); + // expect(await screen.findByText('500')).toBeInTheDocument(); + + expect(await screen.findByTestId('heatmap')).toBeInTheDocument(); + await waitFor(() => expect(screen.queryByText('loading-spinner.svg')).not.toBeInTheDocument()); + + const heatmap = screen.getByTestId('heatmap'); + const cells = await within(heatmap).findAllByRole('button'); + expect(cells.length).toEqual(7 * 24); + + const numberOfPostsPerCell = cells.map((cell) => cell.innerHTML); + expect(numberOfPostsPerCell).toMatchSnapshot(); + + const timezone = screen.getByText('All times are shown in your timezone:'); + expect(within(timezone).getByText('Europe/Berlin')).toBeInTheDocument(); + }); + + it('highlights cell on click', async () => { + setup('/search/reactjs'); + + const heatmap = await screen.findByTestId('heatmap'); + const cells = await within(heatmap).findAllByRole('button'); + + const cellToClick = cells[1]; + // expect(cellToClick).toHaveStyle('border: none'); + expect(cellToClick).toHaveStyleRule('border: none'); + + userEvent.click(cellToClick); + // expect(cellToClick).toHaveStyle('border: 1px solid #1e2537'); + expect(cellToClick).toHaveStyleRule('border: 1px solid #1e2537'); }); test('renders error message', async () => { @@ -45,7 +76,7 @@ describe('search page', () => { }); describe('subreddit form', () => { - it('updates the URL when submitting the form', () => { + it('updates the URL when submitting the form', async () => { const { history } = setup('/search/python'); const searchInput = screen.getByLabelText('r /'); @@ -62,7 +93,7 @@ describe('subreddit form', () => { expect(history.location.pathname).toEqual('/search/Gatsbyjs'); }); - it('input value changes to default subredit when seach link in header is clicked', () => { + it('input value changes to default subredit when seach link in header is clicked', async () => { setup('/search/reactjs'); const searchInput = screen.getByRole('textbox'); const header = screen.getByRole('banner'); @@ -71,5 +102,13 @@ describe('subreddit form', () => { userEvent.click(searchLink); expect(searchInput.value).toBe(defaultSubReddit); + await waitFor(() => expect(screen.queryByText('loading-spinner.svg')).not.toBeInTheDocument()); + }); + + it('no accessibility violation', async () => { + const { container } = setup('/search/reactjs'); + + expect(await screen.findByTestId('heatmap')).toBeInTheDocument(); + expect(await axe(container)).toHaveNoViolations(); }); }); diff --git a/src/__tests__/_Heatmap.js_ b/src/__tests__/_Heatmap.js_ new file mode 100644 index 0000000..de43682 --- /dev/null +++ b/src/__tests__/_Heatmap.js_ @@ -0,0 +1,115 @@ +import React from 'react'; +import { MemoryRouter, Route } from 'react-router-dom'; +import { + render, screen, waitForElementToBeRemoved, within, +} from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import '@testing-library/jest-dom/extend-expect'; +import 'jest-styled-components'; + +import { + cellBackgroundColorMap, mapWeekday, postsTimeSlots, getUserTimeZone, +} from '../config'; + +import App from '../app'; + +const weekdays = Object.values(mapWeekday); +const cellBackgroundColor = Object.values(cellBackgroundColorMap); + +const setup = (initialPath = '/') => { + let history; + + render( + + + { + history = props.history; + return null; + }} + /> + , + ); + return { history }; +}; + +describe('heatmap', () => { + it.each(weekdays)( + 'weekdays are shown from Sunday to Saturday', async (weekday) => { + setup('/search/less-than-500-posts'); + // find weekday container element tr.weekday + // assert that it contains Sunday, Monday, Tuesday, Wednesday + // Thursday, Friday, Saturday + const spinner = screen.getByText('loading-spinner.svg'); + + await waitForElementToBeRemoved(spinner); + + screen.getByRole('table'); + // weekday + screen.getByRole('cell', { name: weekday }); + }, + ); + + it.each(postsTimeSlots)( + 'hours are shown from 12:00am to 10:00pm', async (postsTimeSlot) => { + setup('/search/reactjs'); + // find hours container element th.timeline + // assert that it contains 12:00am, 2:00am.. + const spinner = screen.getByText('loading-spinner.svg'); + + await waitForElementToBeRemoved(spinner); + + screen.getByRole('table'); + + const timeSlots = screen.getAllByRole('columnheader'); + // screen.debug(timeSlot); + within(timeSlots[1]).getByText(postsTimeSlot); + }, + ); + + it('each combination of weekday and hour is represented by a square box', async () => { + setup('/search/less-than-500-posts'); + + const spinner = screen.getByText('loading-spinner.svg'); + await waitForElementToBeRemoved(spinner); + screen.getByRole('table'); + + const cells = await document.querySelector('td.cell'); + // select cells td.cell + const el = within(cells).getByText(cells.textContent); + const numPosts = Number(el.textContent); + + expect(el).toHaveStyle({ border: 'unset', backgroundColor: '#a0ce93' }); + // assert that background-color correspond to numeric innerText value + expect(el).toHaveStyle({ backgroundColor: `${cellBackgroundColor[numPosts]}` }); + + // assert that each has width === height + expect(el).toHaveStyleRule('width', '40px'); + expect(el).toHaveStyleRule('height', '40px'); + + // assert that innerText.value is a number + // expect(el).toHaveValue(numPosts); + + // assert that element is highlighted when hovered + userEvent.hover(el); + expect(el).toHaveStyle({ border: '1px solid red' }); + userEvent.unhover(el); + expect(el).toHaveStyle({ border: 'unset' }); + + // assert that element is highlighted when clicked + userEvent.click(el); + expect(el).toHaveStyle({ border: '1px solid red' }); + }); + + it("the user' timezone is shown below the heatmap", async () => { + setup('/search/less-than-500-posts'); + // select div.timezone + // assert that the element contains "America/Chicago - Central Saving Time" + const spinner = screen.getByText('loading-spinner.svg'); + + await waitForElementToBeRemoved(spinner); + screen.getByRole('table'); + screen.getByText(getUserTimeZone()); + }); +}); diff --git a/src/__tests__/__snapshots__/SearchPage.js.snap b/src/__tests__/__snapshots__/SearchPage.js.snap new file mode 100644 index 0000000..3aedf97 --- /dev/null +++ b/src/__tests__/__snapshots__/SearchPage.js.snap @@ -0,0 +1,174 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`heatmap loads top post for subreddit in URL 1`] = ` +Array [ + "0", + "2", + "3", + "3", + "2", + "0", + "2", + "2", + "2", + "2", + "1", + "4", + "3", + "2", + "6", + "3", + "5", + "4", + "4", + "6", + "6", + "2", + "2", + "4", + "1", + "2", + "2", + "0", + "3", + "0", + "2", + "2", + "2", + "1", + "1", + "4", + "0", + "6", + "6", + "7", + "7", + "3", + "5", + "3", + "7", + "4", + "6", + "0", + "5", + "1", + "3", + "2", + "1", + "2", + "0", + "1", + "2", + "3", + "2", + "4", + "2", + "1", + "7", + "9", + "3", + "4", + "3", + "4", + "8", + "2", + "0", + "2", + "1", + "2", + "0", + "2", + "1", + "2", + "1", + "1", + "0", + "2", + "4", + "2", + "7", + "3", + "4", + "5", + "5", + "3", + "2", + "5", + "2", + "3", + "1", + "4", + "3", + "2", + "1", + "1", + "4", + "0", + "0", + "3", + "0", + "3", + "2", + "5", + "3", + "1", + "5", + "2", + "12", + "5", + "8", + "6", + "5", + "1", + "3", + "1", + "0", + "2", + "0", + "3", + "3", + "2", + "2", + "0", + "1", + "2", + "1", + "3", + "9", + "0", + "3", + "9", + "7", + "4", + "4", + "4", + "5", + "3", + "3", + "0", + "1", + "2", + "3", + "1", + "2", + "0", + "2", + "1", + "4", + "2", + "3", + "4", + "2", + "4", + "6", + "6", + "7", + "3", + "4", + "5", + "6", + "1", + "5", + "3", +] +`; diff --git a/src/config.js b/src/config.js index 974433c..6d70f3f 100644 --- a/src/config.js +++ b/src/config.js @@ -1,2 +1,49 @@ // eslint-disable-next-line import/prefer-default-export export const defaultSubReddit = 'javascript'; + +export const cellHighlight = '1px solid red'; + +export const mapWeekday = { + 0: 'Sunday', + 1: 'Monday', + 2: 'Tuesday', + 3: 'Wednesday', + 4: 'Thursday', + 5: 'Friday', + 6: 'Saturday', +}; + +export const cellBackgroundColorMap = { + 0: '#e0e592', + 1: '#aed396', + 2: '#a9d194', + 3: '#a0ce93', + 4: '#99cd94', + 5: '#8cc894', + 6: '#5eb391', + 7: '#5db492', + 8: '#5cb391', + 9: '#5aad8c', + 10: '#3984a3', +}; + +export const postsTimeSlots = [ + '12:00am', + '2:00am', + '4:00am', + '6:00am', + '8:00am', + '10:00am', + '12:00pm', + '2:00pm', + '4:00pm', + '6:00pm', + '8:00pm', + '10:00pm', +]; + +export function getUserTimeZone() { + const globalTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; + const localTimeZone = (new Date()).toTimeString().split('(')[1].replace(')', ''); + return `${globalTimeZone} - ${localTimeZone}`; +} diff --git a/src/page-search/CellWrapper.js b/src/page-search/CellWrapper.js new file mode 100644 index 0000000..4ab5f6d --- /dev/null +++ b/src/page-search/CellWrapper.js @@ -0,0 +1,59 @@ +import React, { useState } from 'react'; +import { array } from 'prop-types'; + +import { cellBackgroundColorMap, cellHighlight } from '../config'; +import { Cell } from './_PostsTable_.style'; + +function CellWrapper({ postsInHour }) { + const numPosts = postsInHour.length; + function getCellBGColor() { + return cellBackgroundColorMap[numPosts] || cellBackgroundColorMap[10]; + } + const cellDefaultStyle = { + border: 'unset', + backgroundColor: `${getCellBGColor()}`, + }; + + const [cellStyle, setCellStyle] = useState(cellDefaultStyle); + const [isSelected, setIsSelected] = useState(false); + + function handleCellClick() { + setCellStyle( + { ...cellStyle, border: '1px solid red' }, + ); + setIsSelected(true); + } + + function handleOnMouseEnter(event) { + if (event.target.style.border !== cellHighlight) { + // eslint-disable-next-line no-param-reassign + event.target.style.border = cellHighlight; + } + } + + function handleOnMouseLeave(event) { + if (!isSelected) { + // eslint-disable-next-line no-param-reassign + event.target.style.border = 'none'; + } + } + + return ( + + {numPosts} + + ); +} + +CellWrapper.propTypes = { + // eslint-disable-next-line react/forbid-prop-types + postsInHour: array.isRequired, +}; + +export default CellWrapper; diff --git a/src/page-search/CellWrapper.style.js b/src/page-search/CellWrapper.style.js new file mode 100644 index 0000000..e69de29 diff --git a/src/page-search/FormSection.js b/src/page-search/FormSection.js new file mode 100644 index 0000000..d11dfaa --- /dev/null +++ b/src/page-search/FormSection.js @@ -0,0 +1,15 @@ +import React from 'react'; + +import { Container, Headline } from './FormSection.style'; +import SubredditForm from './SubredditForm'; + +function FormSection() { + return ( + + Find the best time for a subreddit + + + ); +} + +export default FormSection; diff --git a/src/page-search/SearchPage.style.js b/src/page-search/FormSection.style.js similarity index 100% rename from src/page-search/SearchPage.style.js rename to src/page-search/FormSection.style.js diff --git a/src/page-search/Heatmap.js b/src/page-search/Heatmap.js index 18a9934..080c132 100644 --- a/src/page-search/Heatmap.js +++ b/src/page-search/Heatmap.js @@ -1,32 +1,48 @@ import React from 'react'; -import { useParams } from 'react-router-dom'; +import { + arrayOf, func, number, shape, +} from 'prop-types'; -import useFetchPosts from './useFetchPosts'; -import { ErrorContainer, LoadingContainer, LoadingSpinner } from './Heatmap.style'; - -function Heatmap() { - const { subreddit } = useParams(); // route param set in App - const { isLoading, hasError, posts } = useFetchPosts(subreddit); - - if (isLoading) { - return ( - - - - ); - } - - if (hasError) { - return ( - - Something went wrong. Please check the subreddit you entered then try again. - - ); - } +import { + Container, TimezoneWrapper, Timezone, +} from './Heatmap.style'; +import HeatmapRow from './HeatmapRow'; +import HeatmapHeaderRow from './HeatmapHeaderRow'; +function Heatmap({ postsPerDay, onClickHour, selectedDayAndHour }) { return ( -
{posts.length}
+ <> + + + { + postsPerDay.map((postsPerHour, day) => ( + + )) + } + + + + All times are shown in your timezone: + {Intl.DateTimeFormat().resolvedOptions().timeZone} + + ); } +Heatmap.propTypes = { + postsPerDay: arrayOf(arrayOf(number)).isRequired, + onClickHour: func.isRequired, + selectedDayAndHour: shape({ + day: number, + hour: number, + }).isRequired, +}; + export default Heatmap; diff --git a/src/page-search/Heatmap.style.js b/src/page-search/Heatmap.style.js index d189bb7..3124dd7 100644 --- a/src/page-search/Heatmap.style.js +++ b/src/page-search/Heatmap.style.js @@ -1,29 +1,18 @@ -import styled, { keyframes } from 'styled-components'; -import { ReactComponent as UnstyledSpinner } from './loading-spinner.svg'; +import styled from 'styled-components'; -export const LoadingContainer = styled.div` - width: 100%; - display: flex; - justify-content: center; - margin-top: 56px; +export const Container = styled.div` + width: ${(props) => props.theme.size.heatmap.width}px; + margin: auto; `; +// ***************************** -export const ErrorContainer = styled.div` - padding: 30px; - color: red; +export const TimezoneWrapper = styled.div` + width: 100%; + margin-top: 10px; font-size: ${(props) => props.theme.font.size.small}; + text-align: center; `; -const rotate = keyframes` - from { - transform: rotate(0deg); - } - - to { - transform: rotate(360deg); - } -`; - -export const LoadingSpinner = styled(UnstyledSpinner)` - animation: ${rotate} 1.5s linear infinite; +export const Timezone = styled.span` + font-weight: 600; `; diff --git a/src/page-search/HeatmapHeaderRow.js b/src/page-search/HeatmapHeaderRow.js new file mode 100644 index 0000000..591bd76 --- /dev/null +++ b/src/page-search/HeatmapHeaderRow.js @@ -0,0 +1,32 @@ +import React from 'react'; + +import { Container, Hour } from './HeatmapHeaderRow.style'; + +const hours = [ + '12:00am', + '2:00am', + '4:00am', + '6:00am', + '8:00am', + '10:00am', + '12:00pm', + '2:00pm', + '4:00pm', + '6:00pm', + '8:00pm', + '10:00pm', +]; + +function HeatmapHeaderRow() { + return ( + + { + hours.map((hour) => ( + {hour} + )) + } + + ); +} + +export default HeatmapHeaderRow; diff --git a/src/page-search/HeatmapHeaderRow.style.js b/src/page-search/HeatmapHeaderRow.style.js new file mode 100644 index 0000000..1bf0eff --- /dev/null +++ b/src/page-search/HeatmapHeaderRow.style.js @@ -0,0 +1,18 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + height: ${(props) => props.theme.size.heatmap.headerHeight}px; + margin-left: ${(props) => props.theme.size.heatmap.dayWidth}px; + display: flex; + align-items: center; + border: solid 1px ${(props) => props.theme.color.heatmap.headerBorder}; + background-image: ${(props) => props.theme.color.heatmap.headerBackground}; +`; + +export const Hour = styled.div` + width: ${(props) => props.theme.size.heatmap.hour * 2}px; + text-align: center; + color: ${(props) => props.theme.color.heatmap.headerHour}; + font-size: ${(props) => props.theme.font.size.small}; + font-weight: 500; +`; diff --git a/src/page-search/HeatmapRow.js b/src/page-search/HeatmapRow.js new file mode 100644 index 0000000..2698e23 --- /dev/null +++ b/src/page-search/HeatmapRow.js @@ -0,0 +1,51 @@ +import React from 'react'; +import { arrayOf, func, number } from 'prop-types'; + +import { Container, Weekday, Hour } from './HeatmapRow.style'; + +const weekdays = [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', +]; + +function HeatmapRow({ + day, postsPerHour, onClickHour, selectedHour, +}) { + return ( + + {weekdays[day]} + { + postsPerHour.map((numPosts, hour) => ( + onClickHour({ day, hour })} + selected={hour === selectedHour} + type="button" + > + {numPosts} + + )) + } + + ); +} + +HeatmapRow.propTypes = { + day: number.isRequired, + postsPerHour: arrayOf(number).isRequired, + onClickHour: func.isRequired, + selectedHour: number, +}; + +HeatmapRow.defaultProps = { + selectedHour: null, +}; + +export default HeatmapRow; diff --git a/src/page-search/HeatmapRow.style.js b/src/page-search/HeatmapRow.style.js new file mode 100644 index 0000000..0ab2802 --- /dev/null +++ b/src/page-search/HeatmapRow.style.js @@ -0,0 +1,52 @@ +import styled, { css } from 'styled-components'; + +const getBackgroundColor = ({ numPosts, theme }) => { + const backgroundColors = theme.color.heatmap.hourBackground; + + if (numPosts >= backgroundColors.length) { + return backgroundColors[backgroundColors.length - 1]; + } + + return backgroundColors[numPosts]; +}; + +export const Container = styled.div` + display: flex; +`; + +export const Weekday = styled.div` + width: ${(props) => props.theme.size.heatmap.dayWidth}px; + height: ${(props) => props.theme.size.heatmap.hour}px; + line-height: ${(props) => props.theme.size.heatmap.hour}px; + text-align: center; + font-size: 15px; + font-weight: 600; + color: ${(props) => props.theme.color.light}; + background-color: ${(props) => props.theme.color.heatmap.dayBackground}; +`; + +const highlighted = css` + border: solid 1px ${(props) => props.theme.color.heatmap.hourHoverBorder}; + line-height: ${(props) => props.theme.size.heatmap.hour - 2}px; +`; + +export const Hour = styled.button` + width: ${(props) => props.theme.size.heatmap.hour}px; + height: ${(props) => props.theme.size.heatmap.hour}px; + line-height: ${(props) => props.theme.size.heatmap.hour}px; + text-align: center; + font-size: ${(props) => props.theme.font.size.small}; + font-weight: 600; + color: ${(props) => props.theme.color.light}; + background-color: ${(props) => getBackgroundColor(props)}; + cursor: pointer; + border: none; + border-radius: 0; + + ${(props) => props.selected && highlighted} + + :hover, :focus { + outline: none; + ${highlighted} + } +`; diff --git a/src/page-search/HeatmapSection.js b/src/page-search/HeatmapSection.js new file mode 100644 index 0000000..a79caf6 --- /dev/null +++ b/src/page-search/HeatmapSection.js @@ -0,0 +1,58 @@ +import React, { useState } from 'react'; +import { useParams } from 'react-router-dom'; + +import useFetchPosts from './useFetchPosts'; +import Heatmap from './Heatmap'; +import PostsTable from './PostsTable'; +import { + Container, LoadingContainer, LoadingSpinner, ErrorContainer, +} from './HeatmapSection.style'; + +function HeatmapSection() { + const { subreddit } = useParams(); // route param set in App + const { + isLoading, hasError, postsPerDay, allPosts, + } = useFetchPosts(subreddit); + const [selectedDayAndHour, setSelectedDayAndHour] = useState({ day: null, hour: null }); + + // console.log('>>>check if selected day/hour click re-renders component', selectedDayAndHour); + if (isLoading) { + return ( + + + + ); + } + + if (hasError) { + return ( + + Something went wrong. Please check the subreddit you entered then try again. + + ); + } + + const { day, hour } = selectedDayAndHour; + // console.log('day, hour, postPerHour', day, hour, postsPerDay[day || 0][hour || 0]); + // {
JSON.stringify(selectedDayAndHour)
} + + return ( + <> + + + + + + { + day && hour && + } + + + ); +} + +export default HeatmapSection; diff --git a/src/page-search/HeatmapSection.style.js b/src/page-search/HeatmapSection.style.js new file mode 100644 index 0000000..9b66645 --- /dev/null +++ b/src/page-search/HeatmapSection.style.js @@ -0,0 +1,37 @@ +import styled, { keyframes } from 'styled-components'; + +import { ReactComponent as UnstyledSpinner } from './loading-spinner.svg'; + +export const LoadingContainer = styled.div` + width: 100%; + display: flex; + justify-content: center; + margin-top: 56px; +`; + +export const ErrorContainer = styled.div` + padding: 30px; + color: red; + font-size: ${(props) => props.theme.font.size.small}; +`; + +const rotate = keyframes` + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +`; +export const LoadingSpinner = styled(UnstyledSpinner)` + animation: ${rotate} 1.5s linear infinite; +`; + +export const Container = styled.div` +width: calc(100% - 40px); +margin: 60px 20px; +@media (max-width: ${(props) => props.theme.size.heatmap.width + 40}px) { + overflow-x: scroll; +} +`; diff --git a/src/page-search/PostsTable.js b/src/page-search/PostsTable.js new file mode 100644 index 0000000..ae05805 --- /dev/null +++ b/src/page-search/PostsTable.js @@ -0,0 +1,56 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { arrayOf, number } from 'prop-types'; + +import { + Headline, Table, Container, TableRow, TH, +} from './PostsTable.style'; + +function PostsTable({ posts }) { + // console.log('##### In PostTable', posts); + React.useEffect(() => { + + }); + return ( + + Posts + + + + + + + + + + + + { + posts.map((post, index) => { + const { + author, createdAt, title, comments, score, url, + } = post; + const timePosted = (new Date(createdAt)).toLocaleTimeString(); + return ( + // eslint-disable-next-line react/no-array-index-key + + + + + + + + ); + }) + } + +
TitlePostedScoreCommentsAuthor
{title}{timePosted}{score}{comments}{author}
+
+ ); +} + +PostsTable.propTypes = { + posts: arrayOf(arrayOf(number)).isRequired, +}; + +export default PostsTable; diff --git a/src/page-search/PostsTable.style.js b/src/page-search/PostsTable.style.js new file mode 100644 index 0000000..2979ba3 --- /dev/null +++ b/src/page-search/PostsTable.style.js @@ -0,0 +1,41 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +`; + +export const Headline = styled.h3` + text-align: left; + width: 100%; + max-width: 786px; + height: 28px; + font-family: Bitter; + font-size: 24px; + font-weight: normal; + color: #000000; +`; + +export const Table = styled.table` +width: 100%; +max-width: 786px; +`; + +export const TableRow = styled.tr` + width: 786px; + height: 35px; + border: solid 1px #dddddd; + background-color: #ffffff; +`; + +export const TH = styled.th` +width: 350px; +height: 18px; +font-family: Montserrat; +font-size: 14px; +font-weight: 500; +color: #000000; +`; diff --git a/src/page-search/SearchPage.js b/src/page-search/SearchPage.js index b73c922..48180ed 100644 --- a/src/page-search/SearchPage.js +++ b/src/page-search/SearchPage.js @@ -1,17 +1,16 @@ import React from 'react'; -import { Container, Headline } from './SearchPage.style'; -import SubredditForm from './SubredditForm'; -import Heatmap from './Heatmap'; +// import { Container, Headline } from './FormSection.style'; +// import SubredditForm from './SubredditForm'; +import FormSection from './FormSection'; +import HeatmapSection from './HeatmapSection'; function SearchPage() { return ( - - Find the best time for a subreddit - - - - + <> + + + ); } diff --git a/src/page-search/_PostsTable_.js b/src/page-search/_PostsTable_.js new file mode 100644 index 0000000..1c2067e --- /dev/null +++ b/src/page-search/_PostsTable_.js @@ -0,0 +1,97 @@ +import React from 'react'; +import { array } from 'prop-types'; + +import CellWrapper from './CellWrapper'; + +import { mapWeekday, getUserTimeZone, postsTimeSlots } from '../config'; +import { + WeekRow, Weekday, TimeFrame, HeatmapTable, TimeSlice, TimeSliceWrapper, +} from './_PostsTable_.style'; + +function PostsTable({ posts }) { + // let myHeatmap; + + const postsPerHourPerDay = new Array(7) + .fill([]) + .map(() => new Array(24) + .fill([]) + .map(() => [])); + + function getDayTimeFromTimeCreated(postCreatedAt) { + // https://duckduckgo.com/?q=javascript+date+always+point+to+epoch+time&t=ffab&atb=v196-1&ia=web + const d = new Date(0); + const day = new Date(d.setUTCSeconds(postCreatedAt)); + return { + weekday: day.getDay(), + timeOfDay: day.getHours(), + }; + } + + function buildPostsPerHourPerDayTable(subredditPosts) { + subredditPosts.forEach((post) => { + const { + id, author, created, title, url, + } = post.data; + const { weekday, timeOfDay } = getDayTimeFromTimeCreated(created); + postsPerHourPerDay[Number(weekday)][Number(timeOfDay)].push({ + id, author, title, url, weekday, timeOfDay, + }); + }); + } + + function generateHeatmap() { + buildPostsPerHourPerDayTable(posts); + // try { + return postsPerHourPerDay.map((weekDay, weekDayIndex) => { + // console.log('weekday', weekDay); + const weekday = mapWeekday[weekDayIndex]; + return ( + + {weekday} + {weekDay.map((postsInHour, hourIndex) => ( + // eslint-disable-next-line react/no-array-index-key + + ))} + + ); + }); + // } catch (error) { + // console.log('XXXXXXXXXXX', error); + // } + } + + const timeLine = ( + + { + postsTimeSlots.map((timeSlot) => ( + {timeSlot} + )) + } + + ); + + return ( +
+ + + + {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */} + + {timeLine} + + + + {generateHeatmap()} + + +
{getUserTimeZone()}
+
+ ); +} + +PostsTable.propTypes = { + // eslint-disable-next-line react/forbid-prop-types + posts: array.isRequired, +}; + +export default PostsTable; diff --git a/src/page-search/_PostsTable_.style.js b/src/page-search/_PostsTable_.style.js new file mode 100644 index 0000000..1ced24c --- /dev/null +++ b/src/page-search/_PostsTable_.style.js @@ -0,0 +1,47 @@ +import styled from 'styled-components'; + +export const WeekRow = styled.tr` + width: 100%; +`; + +export const Cell = styled.td` + /* background-color: ${(props) => props.bg}; */ + height: 40px; + width: 40px; + text-align: center; +`; + +// merge these 2 td +export const Weekday = styled.td` + height: 40px; + width: 154px; + text-align: center; + background-color: #1e2537; +`; + +export const TimeFrame = styled.thead` + height: 52px; + width: 960px; +`; +export const TimeSliceWrapper = styled.div` + width: 960px; + height: 52px; + display: flex; + justify-content:space-between; + align-items: center; + border: none; + background-image: linear-gradient(to bottom, #fefefe, #e9e9e9); +`; + +export const TimeSlice = styled.span` + height: 18px; + width: 80px; + font-family: Montserrat; + font-size: 14px; + text-align: center; + font-weight: 500; +`; +export const HeatmapTable = styled.table` + width: 100%; + border-spacing: 0; +`; diff --git a/src/page-search/__snapshots__/useFetchPosts.test.js.snap b/src/page-search/__snapshots__/useFetchPosts.test.js.snap index 4748cab..3903c4f 100644 --- a/src/page-search/__snapshots__/useFetchPosts.test.js.snap +++ b/src/page-search/__snapshots__/useFetchPosts.test.js.snap @@ -2,505 +2,187 @@ exports[`loads 500 posts from the Reddit API 1`] = ` Array [ - "Interactive pay-card using react hooks", - "react-interactive-paycard", - "I have built and open sourced an automated irrigation system based on Node.js and React", - "Stems - Mac + Windows app built using React/Typescript/Electron that takes a song and breaks it apart into isolated vocal, instrumental, drum, and bass tracks.", - "In-depth 14 hour Fullstack React/GraphQL/TypeScript Tutorial", - "I made a Snapchat clone in the browser!", - "I created an open-source alternative to Google Analytics using React, Redux and Next.js", - "A responsive multi-level menu component I created using react hooks", - "I built a Portfolio Gatsby theme", - "I built an iPod Classic using React Hooks & Styled Components", - "After almost a year of learning React Native, here is my first full project, Ledger - a workout logging and analytics app", - "Trying something different for my portfolio, what do you guys think?", - "Pull to refresh, velocity-based morphing SVGs with react-spring", - "I created a Spotify clone", - "Completed my portfolio website with react and react-spring for animations (link in the comments)", - "A one minute Demo of an app I made with React", - "React Core Team joins Facebook Employee Walkout", - "My first open source app: Sup, a Slack client with WhatsApp like UI. built using react-native and react-native-web", - "Liquid swipe", - "3D skateboard swipe (threejs & react-spring)", - "I've created a tiny component for applying a 'gooey' effect, also known as shape blobbing.", - "I created a set of Free React UI Templates & Components (52 UI Components, 7 Landing Pages, 8 Inner Pages, Fully Responsive) for creating Beautiful Landing Pages easily", - "Instagram using MERN stack", - "Synchronized YouTube Player built in react", - "Jira clone built with modern react. This is a great repository to learn from if you’ve already built smaller react apps and would like to see what a larger, real-world codebase looks like.", - "Screenshot.rocks - Web app to create browser mockups from screenshots", - "Just found this site \\"useHooks.com\\" - super helpful collection of react hooks!", - "We have a new subreddit snoo thanks to /u/fjellet!", - "I built a drag-and-drop online quiz builder with Next.js and GraphQL during quarantine", - "Learning React.js during this quarantine. Here's a simple memory game I made", - "Scan to Listen: React Native app for scanning CDs and vinyls to find album on Spotify and books to find audiobook on Audible", - "✨ Introducing react-cool-inview - React hook to monitor an element enters or leaves the viewport. (GitHub: https://github.com/wellyshen/react-cool-inview)", - "A VS-Code extension to refactor HTML-Tags with style-props to styled components", - "A progressive web app that syncs videos, so you can have virtual watch parties with friends", - "Select Payment (Swipe Card)", - "BrutalityVisualizer - an interactive heatmap visualization of police brutality incidents in the US", - "Full page transitions", - "React Router v6 will be 2.9kb - 70% smaller because of Hooks and other factors", - "I just published another vscode extension that allows you to search through 20+ free icon sets and paste them into your code all within the editor.", - "I made clone of stackoverflow with React/Next, please check out!", - "I made an interactive solver for the traveling salesman problem to visualize different algorithms with hooks and web workers. Each step of progress is drawn to the map in real-time and can be controlled all in the browser at tspvis.com.", - "Dunning Kruger Effect", - "I made a game with React this morning and think it turned out pretty ok. Let know what you think. Link in the comments.", - "I've started a mini-series where I try to replicate popular UI's. The first episode is Spotify (I cover the basic styling & setup). Follow along if you like!", - "TikTok-esque app for browsing NSFW subreddits [NSFW]", - "React has been around as long as JQuery was when React came out (2468 days)", - "I made a visual programmer for javascript", - "Building a Netflix Clone - Styled Components - Compound Components - Firebase (Firestore & Authentication)", - "✨ Introducing react-cool-dimensions: React hook to measure an element's size and handle responsive components. (GitHub included)", - "I made a half assed code editor", - "Youtube clone (PERN stack)", - "Declarative Magnet Animation w/ Framer Motion", - "My first MERN stack app finally showable, it is twitter clone with some prefetched data from Twitter api, Feedback and suggestions are welcome.", - "A CLI tool that scans your project and splits the one big global CSS file into component level css files.", - "Facebook has open sourced an experimental state management library for React called Recoil if anyone is interested.", - "GraphAV - A graph algorithms visualizer built using React and Typescript (links in comments)", - "Dan Abramov possibly leaving React team", - "I made a simple RPG game as my first React.js project and wanted to share", - "My top React techtalks of 2019", - "Rubber Mesh Swipe Transition ( three-js & react-spring)", - "My first MERN project!!!", - "Using React and node, I have created a website that allows everyone to share files between their devices without having to use long URLs or store the file on someone's servers.", - "My first Full-Stack project: online multiplayer Tic-Tac-Toe!", - "My web app with 100+ beautiful, copy-paste-ready code sections is (ALMOST) here 🥳", - "I teach React courses - here's my collection of over 600 slides on various React topics (hosted on GitHub, licensed under CC-BY-SA)", - "Forms in React Native, The right way 💪💪", - "React in 100 seconds", - "Built a Dribbble Clone for Developers, MVP", - "Completed my Portfolio Website", - "I rebuilt my personal portfolio using GatsbyJS, and I'm loving it!", - "I made a quick React and Redux interview cheat sheet for 2020", - "Flowify - A new tab extension that I made. It uses React, Framer Motion, and Styled Components. https://addons.mozilla.org/en-US/firefox/addon/flowify/ https://github.com/Etesam913/flowify", - "I’ve finally built my portfolio to showcase my work", - "✨ useWebAnimations x Animate.css", - "Stream Party: watch and search YouTube videos in sync with your friends", - "My second full-stack project - A Twitter Clone", - "REACT TRELLO CLONE --> https://react-trello.app/", - "JS/TS Debugger with Time-Traveling, Hot-swapping, API and Persistent State, zero-config for create-react-app projects (VSCode plugin)", - "This helped me understand React, Webpack and Babel setups. Detailed guide to get started", - "I’m making a free course on learning modern react in 2020. Including Hooks and all the modern API. Free. No ads. Feedback wanted.", - "npm is joining GitHub - The GitHub Blog", - "reactjs-popup v2 is Here 🎉🎉: Modals, Tooltips and Menus - All in one (3kb)", - "A Windows 95 style Pokédex built with React.", - "I made a Full Stack App with React and Django", - "A (Mostly) Complete Guide to React Rendering Behavior", - "Scan to Listen: React Native app for scanning book barcodes to find matching audiobook!", - "MyDrive - Open Source Google Drive Clone (Node, Docker, Amazon S3, React, MongoDB)", - "React Hook Form V6 is released.", - "My Decade in Review", - "keen-slider - The HTML touch slider carousel with the most native feeling.", - "Are there any large open source repos out there that demonstrate well written React code at the production/business level?", - "My current portfolio as a Jr. Front End Dev", - "Create-React-App v4 coming soon with TypeScript 4 support, Fast Refresh and ESLint upgrades and experimental support for React 17's new JSX transform.", - "How Instagram uses Redux", - "Remember (notetaking application)", - "my first react published app", - "Read about creating SVG morphing effects with react-spring in my latest article on CSS-tricks", - "First React project -- COVID-19 Testing Location Finder", - "Gatsby, Website-Building Startup Backed By Index Ventures, Raises $28 Million", - "The React Cheatsheet for 2020 📄‬ (+ real-world examples)", - "Made with love for React (accidentally deleted my first post)", - "I'v made this Facebook-like reaction bar using ReactJS", - "overreacted.io -Goodbye, Clean Code - Dan Abramov", - "I've been almost exlusively developing in C#/.NET for about two years, but due to possible layoffs amid COVID started working React tickets at my job about a month ago - holy shit I love it.", - "Introducing Signum, an open-source communication tool for your website.", - "Figma style real-time cursors with Firebase", - "React tutorials now on MDN", - "Made my first game in ReactJS", - "Here is how to access Kent Dodds' $359 Epic React course repositories", - "State of Frontend 2020 Survey - 74% use React, 34% think Redux will be dead in 3 years, Next.js/Gatsby are basically tied for SSG", - "create-react-app 3.3.0 released! Support for optional chaining and nullish coalescing operators", - "React v17.0 Release Candidate: No New Features", - "I coded a Multiplayer Chess Game using React", - "The official Redux template for Create-React-App is now available", - "\\"import React from 'react'\\" will go away in distant future", - "How Discord achieves native iOS performance with React Native", - "I've created a little React package for animated hamburger icons. 🍔 Any type of feedback is really appreciated.", - "My first react app", - "My First Large React App: Travel Map for saving cities/countries visited", - "New Redux docs \\"Style Guide\\" page: recommended patterns and best practices for using Redux", - "My React components render twice and drive me crazy", - "The React docs are tremendous!", - "Pokemon Application | React, Apollo & GraphQL Tutorial For Beginners", - "I made a small social network in MERN, link in the comments", - "My first useful (second actual) React app - responsive PWA cycle parking map", - "Build your own React", - "PSA: Axios is mostly dead", - "Crank.js | Introducting Crank", - "I created a Microservices app created using React/Node.js/GraphQL/Docker, along with a full tutorial on how to build it", - "Rebuilding our tech stack for a new Facebook.com - Facebook Engineering", - "My First Project guys. Check it out and give me some feedbacks and reviews on it. It'll really help me grow.. Thank you : ) website link : https://electrofocus-website.firebaseapp.com/", - "Microsoft will bid farewell to Internet Explorer and legacy Edge in 2021", - "I developed Astuto, a self hosted customer feedback tool (React frontend)", - "SpiderX - React Native + Python Scrapy", - "Storybook 6.0 is here! New workflows and 100s of improvements", - "So I made Reddit with Instagram's UI", - "An in-depth beginner's guide to testing React applications", - "I made this card memory game with React, it was a fun little project! You can play it online here: https://svsem.github.io/Memorai/", - "Styled components v5.0.0 released", - "New from Adobe: Introducing React Spectrum", - "I built an open source windows based tool using ReactJS to monitor and analyze your system's power and battery usage over time showcasing various insights like battery capacity, estimated life, cycle, recent usages, etc with various options to export all of the data in structured format (JSON, PDF)", - "Introducing Firefox and Edge Support in Cypress 4.0", - "Quick and Easy app: Vector Field Generator!", - "Made a simple App with Reddit API", - "I made a free and open-source resume builder using ReactJS!", - "I made a tutorial on how to make a App Intro component with animations [link in comment]", - "OkCupid Presents: Why we decided against GraphQL for local state management", - "Javascript Testing Masterclass (React, Jest, React Testing Library, Cypress)", - "Introducing Rome: A linter for JavaScript and TypeScript.", - "SWR: React Hooks for Remote Data Fetching", - "Facebook and Microsoft Partnering on Remote Development", - "Babel 7.8.0 Released: we can now use ECMAScript 2020 new features like.", - "Chrome Extension starter kit built with React, TypeScript, SCSS, Storybook, EsLint, Prettier, Webpack, & Bootstrap", - "I made an instagram clone", - "This sub has grown 100% since 1 year ago", - "How to replicate Zelda BOTW interface with React, Tailwind and Framer-motion", - "Built a site to watch YouTube together with friends.", - "I made a Donald Trump press conference simulator in react.js (create-react-app)", - "airbnb/ts-migrate - a tool for helping migrate code to TypeScript", - "🎉 Announcing React Table v7! 🎉", - "React + Typescript ❤️: The good parts ⚡️", - "Hi everyone, I have been working on this file upload UI. Have been following some references and trying to improve on it.", - "ReactJS Crash Course 2020 | React Functional Components, Hooks, and React Router [<30 minutes]", - "Do something to lower worlds healthcare cost", - "Examples of large production-grade, open-source React apps", - "⚡️Introducing react-shimmer: Async loading, performant Image component for React.js", - "A highly scalable, performance focused React starter template, that focuses on best practices and a great developer experience.", - "My first React project - a personal site.", - "A PR is merged into slate.js (React-based rich text editor), closing so many issues that it temporarily broke github", - "Redux Starter Kit is now Redux Toolkit; the official, improved way to work with Redux", - "CoronaWatch - Built a website for monitoring the corona virus.", - "A Guide to Commonly Used React Component Libraries", - "useEffect(fn, []) is not the new componentDidMount()", - "FUCK YEAH. I just made my first MERN stack application.", - "Announcing TinaCMS: open-source, real time site editing toolkit for React based frameworks like Gatsby and Next.js", - "⚛️ Reparenting is now possible with React", - "New official stripe React lib - React Stripe.js", - "Anix - Stream Animes", - "Just finished implementing the dark-mode toggle on the hero section of my personal site - You've got to have fun with these things!", - "React Query v1.0.0 released", - "I built this website that suggests places that you can travel with your passport using React and NextJS.", - "Why Next.js Is the Future of React", - "My library (React Easy State) is now supported by my workplace (Risingstack). I am excited about the future (:", - "Next.js Building a Car Trader App: All 6 videos now available =)", - "How a React App Works Under the Hood", - "Mini graphiql component to document graphql API queries", - "Compound Components in React w/Styled Components", - "Hey all -- I converted ReactJS.org documentation to use hooks! Useful? Any feedback?", - "🎉 Introducing use-places-autocomplete: A React hook for Google Maps Places Autocomplete.", - "I've created a react hook to grab a color palette from images. It also renders a skeleton color while your original image still loading. Feedback appreciated", - "I made a chrome extension with React which replaces the github file list with with an expandable tree view with file preview! It's called Tako, check it out!", - "Anybody here interested in how React code talks to native code in a React Native app? If so, I made this short video explaining how it works.", - "Started working on a webapp last sunday to help make configs for Karabiner Elements. Its ugly but works! :) link in comments", - "I built a SERVERLESS VIDEO CHAT app in REACTJS using WEBRTC and FIREBASE", - "Learning to Think in React by Building a Shopping Cart using Vanilla JS and then React", - "Found this Full Stack Tutorial on React + Web API. Must Watch for Beginners - 2 Hr Duration", - "Gatsby JS - The Great Gatsby Bootcamp [Full Tutorial]", - "Just published a React Animated Icons library!", - "Building an isometric frogger style game with React and Recoil", - "I made a site that allows you to browse the Spotify catalog and curate a \\"Tindify\\" playlist by swiping song cards", - "Was able to make my react-virtualized MultiGrid cells editable with only one double-click listener! #quarantinegoals", - "Build a Google Chrome Extension Using React (Full Project Download)", - "MERN stack user authentication: Part 1 | User accounts with JWT, bcrypt, react hooks, context API", - "Create a React app with Typescript, Redux and OAuth 2.0 user authorization", - "Unit testing in React. Practical examples and advice on what, how and why to test.", - "NETFLIX clone - React and Firebase", - "Wes Bos' uses.tech - A list of /uses pages detailing developer setups, gear, software and configs - Gatsby + Netlify site", - "What Is JavaScript Made Of?", - "What's the difference between Kent Dodds' $359 Epic React course and $10 Udemy react course by popular instructors?", - "[WIP] Click in your app and jump to the relevant code", - "Egghead.io is building the next version of Egghead.io on Next.js and it is open source", - "Dokz - Effortless documentation with Next.js and MDX", - "Announcing Ionic React: a native React version of Ionic Framework that makes it easy to build apps for iOS, Android, Desktop, and the web as a PWA with Over 100 React components", - "React Performance Optimization with React.memo()", - "Happy 3rd Birthday React 16 🎂", - "Data-fetching library SWR now has pagination and infinite loading", - "How React Reignited My Love for Web Development", - "[WIP] two-way WYSIWYG editing", - "Introducing Concurrent Mode (Experimental)", - "Learn GraphQL, Apollo Server 2, and Black-box Testing (P2/3 of a newsreader built using React)", - "Github Mobile App - Built with React Native and Redux", - "Intro to Storybook 2020", - "Deep Dive into Redux Toolkit with React - Complete Guide", - "Instagram Pinch-to-Zoom - “Can it be done in React Native?”", - "Movie time calculator", - "A demo of the new beta for my trip planning app, Tour, built completely with React Native.", - "Prettier 2.0", - "Create a Weather App on React with RESTFUL APIs from Scratch [Full App]", - "JavaScript frameworks are pushing each other to improve accessibility", - "ReactSS - One tab to rule them all", - "Come help build our open source react web app for organizing food delivery and volunteering #COVID-19", - "Next.js released v9.3.0", - "To those who recommend beginners learn to build projects in Vanilla js...", - "GraphQL first full-stack starter kit with Node, React. Powered by TypeScript", - "UI Playbook — the documented collection of UI components", - "Astrofox - I made a motion graphics program for turning music visualizations into videos. Built with React, WebGL, and Electron. Free to use.", - "I build an open api lists repository", - "I made an avatar picker for my app's sign up flow using React.js", - "[Beginners Tutorial] React Hooks: How to set parent component state from within child", - "Improve build speed by moving node_modules into RAM", - "I built a FREE online video editor using React.js", - "Replacing Redux with observables and React Hooks", - "Made a very complex OS simulator with React", - "Self taught, just finished my 2nd React App. A League of Legends champion page. Feedback appreciated", - "Timeline Component in React (and some CSS Magic 🎩)", - "SpreadSheet Grid: Excel-like DataGrid component for React JS. Built for high performance rendering similar to google sheets.", - "I want to teach you React!", - "Vue 3.0", - "🔥A collection of beautiful and (hopefully) useful React hooks to speed-up your components and hooks development", - "On let vs const", - "Add role-based permissions to your React app", - "Using Composition in React to Avoid \\"Prop Drilling\\" - 15min lesson from Michael Jackson", - "React Query ⚛️ Hooks for fetching, caching and updating asynchronous data in React", - "Material UI Dashboard with React", - "I made on offline notetaking app using hooks, indexeddb, material-ui, and redux with support for markdown. Notes are stored locally for maximum privacy. Looking to improve https://www.ofnote.site", - "Introducing Bumbag – A React UI Kit", - "What the heck is React Fast Refresh", - "Built a virtual quiz app with React & Node to play along with YouTube pub quizzes during the quarantine", - "Introducing Full Page React Router Transitions", - "React DevTools now shows the names of Custom Hooks - Shu Ding on Twitter", - "Hi! I just want to share my personal site.", - "A Sneak Peek at React Router v6", - "Med-i: a health app built with React Native. Call national emergency numbers from anywhere, find nearby pharmacies, get medication for your symptoms and learn first aid steps in case of accidents and emergencies. [app links in the comment]", - "A Visual Guide To React Mental Models", - "React Query migrates to TypeScript", - "Lets update Official React's Tic Tac Toe Tutorial with Hooks and Typescript! (Video Tutorial)", - "Got my first app onto the Apple app store last week and just got it accepted onto the google play store today. Happy to answer any questions! It’s a white noise app (with bells and whistles).", - "Making instagram.com faster: Code size and execution optimizations (Part 4)", - "Just finished making this dashboard for trading. looking forward for your precious comments.", - "After 3 weeks of building with react & typescript I'm officially in love. We managed to build out the web app for StockAlarm and here's how it turned out...", - "My Gatsby Theme is Available for Use and Modification (Check Source Code on GitHub)", - "I updated my RPG game made with React.js and wanted to share", - "show reddit: I made something very silly in react: the mlemmer blepper", - "Getting started with the official Redux Template for create-react-app (Video)", - "Intro to SVG for React Developers", - "How to IDE-ify your GitHub", - "Data Fetching Best Practices", - "I have created a React component designed for displaying HTML e-mail contents safely, matching Gmail's rendering and support for HTML/CSS features. Other features include first-class TypeScript support and no extra dependencies.", - "Beautiful React Hooks - a collection of beautiful (and hopefully useful) React hooks to speed-up your components and hooks development", - "Next.js 9.2 released: Built-In CSS Imports and CSS Modules, Catch-All Dynamic Routes, Up to 70% Reduced Largest JavaScript Bundle, and Up to 87% Less JavaScript Loaded after Multiple Navigations", - "VS Code extension with React snippets and other useful libraries", - "I created a game using react-three-fiber", - "Why is Redux necessary?", - "2 possible new Hooks to be announced at React Conf: useDeferredValue and useTransition", - "Serverless Video Chat App using Firebase and WebRTC in React", - "Any other typescript users constantly confused between JSX.Element, React.ReactNode, React.ReactElement, React.ComponentType when using memo, context, HOCs, etc?", - "Twizzle: Open Source desktop app for Twitter DM & composing tweets from the menubar. React + Emotion + Redux + Electron app. Sources in comment", - "A React component to compare two images", - "Stop using isLoading booleans - Kent C. Dodds", - "React Hook Form: Performant, flexible and extensible forms with easy-to-use validation", - "For all the Unity developers in here, I've made a library to build your interfaces with two way binding! React Unity WebGL provides an easy solution for embedding Unity WebGL builds in your React application, with two-way communication between your React and Unity application with advanced API's.", - "[Show off] Second \\"full-stack\\" app - Roomie - Find a room to rent! Built with: React + TailwindCSS + Express + MongoDB + Heroku / S3", - "Why Suspense matters, a short thread - Dan Abramov on Twitter", - "Don't know what to test on your React App? Learn how to make a test list.", - "\\"Next time we rewrite, likely we’ll go the Deno route: Rust core, TypeScript shell.\\" - Andrew Clark on Twitter", - "React Libraries in 2020", - "GraphQL Interactive Tutorial", - "I applied for 100+ jobs but no interview", - "\\"The Opinionated Guide to React\\" book by Sara Vieira on Twitter", - "React Router v6.0.0-alpha.0 released, with relative and nested routes, suspense-based navigations", - "🎂Happy 6th Birthday React - what are you earliest memories? ⚛️", - "The Ultimate Guide to Next.js Authentication with Auth0", - "I've created a small package where you can link similar components together to animate them when changing views. Feedback appreciated. 🙌", - "D3.js dashboard tutorial with react and cube.js", - "Introducing Create Next App", - "Build a Weather App in React JS | React JS beginner Tutorial", - "Understanding the Context API by Building a Spotify Clone in React", - "The Quest for the Perfect Dark Mode", - "Fully functional Trello board written using React and Redux", - "Simple budgeting application for shared expenses (React + Redux + Firebase)", - "Wait, You're not using <StrictMode>?!", - "Introduction to MobX & React in 2020", - "I've created a library to make transitions between React router pages", - "Microsoft looks to React Native as a way to tackle the cross-platform development puzzle", - "Why you should implement query fragments in Gatsby", - "Turns out JavaScript compiling and injection in iframes is NOT as simple as HTML/CSS 😅 but I finally made some good progress 🙌🏻. Next steps are to make the iframe refresh after the user hasn’t typed for a while, improved formatting/auto completion, and generate downloadable/shareable code files", - "Why Redux makes you a better JavaScript Developer", - "How do I write meaningful tests using React Testing Library?", - "Demo video for a rota application I've been working on using React/Django", - "Twitter clone using the RPG🚀stack", - "Understanding writing tests for React", - "Storybook 5.3 release: stories & docs in MDX, first-class React support, Declarative config, and Design tool integrations", - "Lifelike - the cellular automata browser toy I've always wanted (first React app)", - "What are some mini React challenges that may come up in a Junior Front-end Interview?", - "React + GraphQL boilerplate that scales easily", - "As a Florida resident, I was tired of visiting several slow mobile-unfriendly Covid Dashboards to get the info I wanted (including my local Tampa Bay stats). So I built COVJOSH.COM for my friends and myself to get real-time data.", - "ZEIT is now Vercel, announces $21m Series A including Accel, CRV, Naval Ravikant, Nat Friedman, and... Jordan Walke", - "React Router v6 Preview", - "We made a website where people can talk to others in a small group - hopefully this helps with isolation!", - "Generating TypeScript types and React Hooks based on GraphQL endpoint", - "✨ Introducing react-cool-portal: React hook for Portals, which renders modals, dropdowns, tooltips etc. to <body> or else.", - "Road to React: The one with Hooks", - "React Nice Dates: A responsive, touch-friendly, and modular date picker library for React.", - "55 Lessons from 5 Years in React - Cory House", - "In the past 30 days, I made an open source design system: Looking for feedback!", - "Building complex animations with React and Framer Motion", - "gqless: GraphQL client without queries", - "Plasmic - enables developers and designers to compose React UIs visually. It lets you start with rough designs from Figma/Sketch or from scratch, and refactor them into maintainable, production-ready presentational components", - "I built my first website in ReactJS while in self isolation! A coronavirus stats tracker!", - "Redux most common anti pattern", - "How to use React Ref", - "Building Resilient Frontend Architecture", - "Get started with animations in React - Part of React Christmas 🎅", - "A simple game to kill time", - "Understanding React's useRef Hook", - "I redesigned my personal website from scratch, and it is great!", - "My Complete Salary History as a React Dev - Full Numbers from Intern to Intermediate.", - "React Complete testing tutorial", - "After wrestling with managing network request state, I decided to create use-axios-client: a custom hooks library to abstract away your network request state so you can focus on building your UI.", - "Meet the new Axios website (Next.js, TypeScript, GraphQL, Cloudflare Workers)", - "I just rebuilt my website. I was feeling a little nostalgic I guess!", - "Creating an Animated Tree Chart – Using React (Hooks) with D3", - "State of Storybook 2019 – a breakout year for a popular frontend tool", - "In Defense of Class Components", - "Personal website I built", - "\\"Framework Overhead\\" is bikeshedding - React is only 8% of execution time on real apps, but ~90% on benchmarks. Most apps are not \\"framework bound\\" (Sebastian Markbåge on Twitter)", - "How I structure my React projects", - "Formik 2.0 with hooks", - "React: Lifting state up is killing your app", - "React Router v6 migrated to TypeScript", - "Is there any good example of a React application doing unit, integration and E2E testing perfectly?", - "How we accidentally launched a popular Gatsby plugin", - "useParams — Extract parameters from the URL in one line.", - "So, has anyone had a chance to try out Recoil yet? Coming from some pretty Redux/React.Context heavy projects this seems like a more convenient way of coding? Especially when using hooks and FCs.", - "Just Finished My Portfolio Website Using Gatsby.js and my Genetic Algorithm Library, Genie.js", - "Stack Overflow Developer Survey 2020 - Web Frameworks", - "I made the same web app in Gatsby and Next.js and found Gatsby performed better", - "[Tutorial Axios Hooks] Using Promises and Await was hard for me, but using Hooks helped me write cleaner and much faster HTTP requests without any fatigue", - "This sub has grown 50% since July", - "A Simple Guide to React Context with Hooks", - "Free tickets available: Attend the biggest React conf in the cloud – April 17, 2020", - "Learn the basics of React-Dnd. easily add Drag and Drop interactions to your apps!", - "Using React (Hooks) with D3 – [06] Responsive Chart Components with ResizeObserver", - "Is Firebase better than Express + MongoDB", - "fake-tweet • Tweet React component", - "Mastering SEO in React and Next.js", - "I have a good corporate job not programming but I taught myself js and react for fun and I just kind of like it.", - "Up to date answer about when to use React context or Redux (Redux Toolkit)", - "How to get these animations working in react js? Is there a library that i can use or can it be done using plain css?", - "React Best Practices?", - "Few ways to boost your react applications performance", - "Is Material UI worth it?", - "Improved Next.js and Gatsby page load performance with granular chunking", - "6 Awesome Chrome Extension for Github", - "Resources for learning react under the hood?", - "I made my first real React App: a site to help people learn songs on the flute. I would love any and all feedback and constructive criticism!", - "Get in that declarative spirit with React Christmas 🎅", - "Build a TikTok Clone with React and Firebase - CodeSource.io", - "A dashboard in React and CSS Grid", - "How to build bulletproof react components", - "Understand React Rendering with examples", - "Next.js: Server-side Rendering vs. Static Generation", - "My very first React+GatsbyJS powered live website", - "React Remains Top UI Library - A Recap of Frontend Development in 2019", - "What is the most impressive React-based site you've seen?", - "New react router with hooks realeased", - "Learn React Native with me 😀", - "Next.js Static Site Generation RFC", - "Store - The cleanest state management library I could come up with - very few APIs, UI-framework agnostic, TypeScript support with no effort, fast by default", - "React: the basics in 20 min | Learn React | Basics for beginners", - "We've built a tool to help developers grow in their career", - "🎉🎁🎊 zeit/next.js released v9.1.0", - "Countering React Native FUD: There are more than 750 screens in both Facebook for Android and iOS as well as several standalone apps primarily built using RN, at FB", - "New HackerNews Frontend built with React", - "🎹react-synth 🎹", - "Help us create a community-curated list of React Libraries!", - "Setting up ESLint & Prettier for React App in VSCode", - "My updated portfolio site", - "I wrote this to help me wrap my head around React Suspense for data fetching. Hope it helps you too", - "Build the Next Generation of Forms With React Hooks Forms", - "Write readable styled-components with curry functions", - "Music Analyzer - MERN Stack Web app using the Spotify API", - "My very first Portfolio site after learning react.js.", - "I made a React app with an interactive map that features all the bike lanes, bike parking spots, services and etc. for my city.", - "React JS Tutorial: Building Firebase Chat App (React Hooks)", - "React Material-UI Themes: Customize Material Components for your Project", - "Babel 7.10.0 Released: a better React tree-shaking", - "Dan Abramov on marketing your OSS - deep in the comments of CRA's issues in 2016", - "react-see-through - Draw attention to specific components on your page", - "React hook that helps developers use google spreadsheet as their data table (API endpoint)", - "Introducing storybook-addon-performance 🚀", - "Popper 2 released! The popular positioning engine for tooltips and popovers, used by Material UI, Bootstrap, and more", - "People love to use Redux, I haven't found a use yet.", - "The unseen performance costs of modern CSS-in-JS libraries in React apps || Web Performance Calendar", - "GitHub - My first big boy React project: a Kubernetes love doctor", - "Don't call a React function component - Kent C. Dodds", - "Download Dan's Overreacted.io as an e-book!", - "Using Window.matchMedia() to do media queries in reactjs", - "Looking for a good open source repo to look at that uses React and GraphQL", - "How to test custom React hooks", - "I made stock trading app with react, firebase and IEX api.", - "Deploying to Github Pages? Don't Forget to Fix Your Links", - "I made some unofficial JSX and TSX logos if you're like logos like me", - "Svg Icons as React Components", - "Hacker Noon: Attend JSNation Live 2020, the remote spin-off of a successful JavaScript conference", - "I made a Kanban boards app with React & Django (open-source) https://github.com/rrebase/knboard", - "React Router 6 Tutorial", - "Meet the React Team (New page on Docs)", - "Favorite YouTubers to learn react?", - "React/Full stack projects to learn from", - "Mini social network that I made as my first MERN stack project.", - "Full-stack web app in React + TypeScript + GraphQL + PostgreSQL", - "Framer Guide to React", - "How I used React-Loadable to more than half my React app's load time", - "react-native released 0.62.0 🎉", - "Dan discusses benchmarks in JavaScript community", - "React Highcharts Example with Cube.js", - "Epic thread of **Remote** React Jobs by /u/mstoiber", - "My first react library published to NPM registry!", - "React Router Crash Course | Part#1 | Build Navbar, Home component & Footer | React Bootstrap", - "I has fun making this little dark mode toggle!", - "How I recreated the Hey \\"Feed\\" with AWS Lambda, SES and React", - "Full page transitions example", - "When to use useEffect or useLayoutEffect", - "Iowa Caucus React Native App Bundle", - "Is redux really a good idea?", - "svg-to-react - a utility to convert raw SVG files into accessible and extendable React Components", - "Build a Workout Diary App with React #1 | Getting started", - "Recoiljs TypeScript types have been merged into DefinitelyTyped 🎉", - "react-uploady - a new way to upload files in React", - "Intro to Federated Modules in Webpack 5", - "Repos for Beginners to Learn From", - "📈 A responsive, composable react charting chart library with a hand-drawn style.", - "ELI5: When would I use useReducer/useCallback/useMemo over state/effect/ref?", - "New Ionic React live code demo and starter apps", - "Mergefly - A new UI for GitHub", - "Using React (Hooks) with D3 – [04] Animated Bar Chart", - "Retro nostalgia & why my new website looks like Windows 9x (made with React/Preact)", - "Use create-react-app to develop Chrome extensions", - "📦 Parcel 2 beta 1: improved stability, tree shaking, source map performance, and more! 🚀", - "I rewrote my command prompt / terminal inspired website using React", - "Next.js Building a Car Trader App: Introduction and FAQ Page", - "CSS Variables for React Developers", - "Serverless Stack - learn how to build a note taking app using Serverless and React on AWS", - "Got a Job as a React developer to build an ecommerce site.", - "How do companies work with components at scale?", - "Rich Harris implements the \\"Round\\" React demo with Svelte making comparison on Twitter", - "UI Testing with React, Mirage, Jest and Testing Library", - "Andrew Clark (React Core Team member) on Concurrent Mode", - "GitHub - appwrite/appwrite: End-to-end backend as a service for web and mobile 🚀", - "Me and my friend built a hosting platform where you can deploy frontend apps for free, with just a few clicks. I would love to hear some feedback from you!", - "Is anyone else frustrated by the state of React documentation, before and after the introduction of hooks?", - "react-loaders-kit", - "Is there any tutorial that shows someone fixing up a badly written React app?", - "What goes into building a drag and drop component in 2019?", - "Redux Starter Kit 1.0: the official, opinionated, batteries-included toolset for Redux", - "Jordan Walke - React to the Future", - "Pre-configured working virtual macOS setup to develop React Native ios apps on Windows10 .", - "React Folder Structure in 5 Steps", - "The Opinionated Guide to React - new book by Sara Viera - Folder Structure, CRA/Next/Gatsby, TypeScript, Routing, State Mgmt, Animation, Styling, Forms, Dates, GraphQL and UI Toolkits", - "Learning React coming from Angular. I really liked having HTML in a separate file. JSX feels weird to me.", - "Persistent Layout Patterns in Next.js", - "A volunteer community of React Devs have been building an app/site to change global homelessness by building stronger social safety nets in communities. It's basic but has begun helping people. Could you improve it?", - "Recently I pushed a major update to my long abandoned project, YouTube Remote, a chrome-extension for everyone to control their YouTube tabs from anywhere in the browser. It's free and offers more features that the default chrome audio remote!", - "React Adaptive Loading Hooks - from Google Chrome (released at Chrome Dev Summit)", - "How to Create a Weather Widget with a Weather API", - "Introducing the New JSX Transform", - "React + Typescirpt + DJANGO boilerplate", - "How To Mock Fetch in Jest (Covers React & React Testing Library)", - "Can someone summarize the best ReactConf talks each day for those of us who cannot watch live?", + Array [ + 0, + 2, + 3, + 3, + 2, + 0, + 2, + 2, + 2, + 2, + 1, + 4, + 3, + 2, + 6, + 3, + 5, + 4, + 4, + 6, + 6, + 2, + 2, + 4, + ], + Array [ + 1, + 2, + 2, + 0, + 3, + 0, + 2, + 2, + 2, + 1, + 1, + 4, + 0, + 6, + 6, + 7, + 7, + 3, + 5, + 3, + 7, + 4, + 6, + 0, + ], + Array [ + 5, + 1, + 3, + 2, + 1, + 2, + 0, + 1, + 2, + 3, + 2, + 4, + 2, + 1, + 7, + 9, + 3, + 4, + 3, + 4, + 8, + 2, + 0, + 2, + ], + Array [ + 1, + 2, + 0, + 2, + 1, + 2, + 1, + 1, + 0, + 2, + 4, + 2, + 7, + 3, + 4, + 5, + 5, + 3, + 2, + 5, + 2, + 3, + 1, + 4, + ], + Array [ + 3, + 2, + 1, + 1, + 4, + 0, + 0, + 3, + 0, + 3, + 2, + 5, + 3, + 1, + 5, + 2, + 12, + 5, + 8, + 6, + 5, + 1, + 3, + 1, + ], + Array [ + 0, + 2, + 0, + 3, + 3, + 2, + 2, + 0, + 1, + 2, + 1, + 3, + 9, + 0, + 3, + 9, + 7, + 4, + 4, + 4, + 5, + 3, + 3, + 0, + ], + Array [ + 1, + 2, + 3, + 1, + 2, + 0, + 2, + 1, + 4, + 2, + 3, + 4, + 2, + 4, + 6, + 6, + 7, + 3, + 4, + 5, + 6, + 1, + 5, + 3, + ], ] `; diff --git a/src/page-search/propTypes.js b/src/page-search/propTypes.js new file mode 100644 index 0000000..e69de29 diff --git a/src/page-search/useFetchPosts.js b/src/page-search/useFetchPosts.js index 3d42acb..aeecb4f 100644 --- a/src/page-search/useFetchPosts.js +++ b/src/page-search/useFetchPosts.js @@ -1,19 +1,40 @@ import { useEffect, useState } from 'react'; +const NUM_POSTS_TO_FETCH = 500; +const MAX_NUM_POSTS_PER_PAGE = 100; + +let controller; +let signal; + +/** + * The reddit endpoint that we fetch the top posts from uses pagination. We can fetch a maximum + * number of 100 posts per page. In order to fetch the first 500 posts we use this recursive + * function. Until the last page or the required number of posts has been reached we continue + * to fetch more posts. + * + * @param {string} subreddit the name of the subreddit + * @param {array} previousPosts the posts that have already been loaded + * (only to be used in recursive calls) + * @param {string} after the id of the last post used for pagination + * (only to be used in recursive calls) + * @returns {array} list of top 500 posts for subreddit + */ + export async function fetchPaginatedPosts(subreddit, previousPosts = [], after = null) { - let url = `https://www.reddit.com/r/${subreddit}/top.json?t=year&limit=100`; + let url = `https://www.reddit.com/r/${subreddit}/top.json?t=year&limit=${MAX_NUM_POSTS_PER_PAGE}`; if (after) { url += `&after=${after}`; } - const response = await fetch(url); // should be hihjacked by mock server + const response = await fetch(url, { signal }); // should be hihjacked by mock server const { data } = await response.json(); // const allPosts = [...previousPosts, ...data.children]; const allPosts = previousPosts.concat(data.children); - const noMorePosts = data && data.dist < 100; // if we're fetching 100 posts per request - const limitReached = allPosts.length >= 500; + // if we're fetching 100 posts per request + const noMorePosts = data && data.dist < MAX_NUM_POSTS_PER_PAGE; + const limitReached = allPosts.length >= NUM_POSTS_TO_FETCH; if (noMorePosts || limitReached) { return allPosts; @@ -22,25 +43,78 @@ export async function fetchPaginatedPosts(subreddit, previousPosts = [], after = return fetchPaginatedPosts(subreddit, allPosts, data.after); } +/** + * Builds an object containing posts per day of week and hour to create the heatmap. + * Each entry obj[dayOfWeek][hour] contains an array of posts. + * dayOfWeek is a number between 0 and 6, hour a number between 0 and 23. + * + * @param {array} posts the concatenated list of posts returned from fetchPaginatedPosts + * @returns {array} nested 2D array that contains the number of posts grouped by week day and hour + */ +async function groupPostsPerDayAndHour(posts) { + const totalPosts = Array(7) + .fill() + .map(() => Array(24).fill().map(() => [])); + const postsPerDay = Array(7) + .fill() + .map(() => Array(24).fill().map(() => 0)); + + posts.forEach((post) => { + const createdAt = new Date(post.data.created_utc * 1000); + const dayOfWeek = createdAt.getDay(); + const hour = createdAt.getHours(); + // + const { + // eslint-disable-next-line camelcase + author, title, num_comments, score, url, + } = post.data; + totalPosts[dayOfWeek][hour].push({ + author, + comments: num_comments, + title, + score, + createdAt, + url, + }); + postsPerDay[dayOfWeek][hour] += 1; + }); + + // return postsPerDay; + return { postsPerDay, totalPosts }; +} + function useFetchPosts(subreddit) { - const [posts, setPosts] = useState([]); + const [allPosts, setAllPosts] = useState([]); + const [postsPerDay, setPostsPerDay] = useState([]); const [status, setStatus] = useState('pending'); useEffect(() => { + controller = new AbortController(); + signal = controller.signal; + let mounted = true; setStatus('pending'); fetchPaginatedPosts(subreddit) - .then((newPosts) => { - setPosts(newPosts); - setStatus('resolved'); + .then((posts) => groupPostsPerDayAndHour(posts)) + .then((postsData) => { + if (mounted) { + setPostsPerDay(postsData.postsPerDay); + setAllPosts(postsData.totalPosts); + setStatus('resolved'); + } }) - .catch(() => setStatus('rejected')); + .catch(() => { + controller.abort(); + setStatus('rejected'); + }); + return () => { mounted = false; }; }, [subreddit]); return { isLoading: status === 'pending', hasError: status === 'rejected', - posts, + postsPerDay, + allPosts, }; } diff --git a/src/page-search/useFetchPosts.test.js b/src/page-search/useFetchPosts.test.js index cfb0866..58dca8c 100644 --- a/src/page-search/useFetchPosts.test.js +++ b/src/page-search/useFetchPosts.test.js @@ -2,19 +2,29 @@ import { renderHook } from '@testing-library/react-hooks'; import useFetchPosts from './useFetchPosts'; +const getNumPosts = (nestedPostsArray) => nestedPostsArray.reduce( + (numTotal, postsPerDay) => postsPerDay.reduce( + (numPerDay, postsPerHour) => numPerDay + postsPerHour, numTotal, + ), + 0, +); + test('loads 500 posts from the Reddit API', async () => { const { result, waitForNextUpdate } = renderHook(() => useFetchPosts('500-posts')); expect(result.current.isLoading).toBe(true); - expect(result.current.posts).toEqual([]); + // expect(result.current.posts).toEqual([]); + expect(result.current.postsPerDay).toEqual([]); await waitForNextUpdate(); expect(result.current.isLoading).toBe(false); - expect(result.current.posts.length).toEqual(500); + // expect(result.current.posts.length).toEqual(500); + expect(getNumPosts(result.current.postsPerDay)).toEqual(500); // 500 is MAXNUM_TO_FETCH + expect(result.current.postsPerDay).toMatchSnapshot(); - const postTitles = result.current.posts.map(({ data }) => data.title); - expect(postTitles).toMatchSnapshot(() => useFetchPosts('500-posts')); + // const postTitles = result.current.posts.map(({ data }) => data.title); + // expect(postTitles).toMatchSnapshot(() => useFetchPosts('500-posts')); }); test('stop loading when less than 500 posts are available', async () => { @@ -23,7 +33,8 @@ test('stop loading when less than 500 posts are available', async () => { await waitForNextUpdate(); expect(result.current.isLoading).toBe(false); - expect(result.current.posts.length).toEqual(270); + // expect(result.current.posts.length).toEqual(270); + expect(getNumPosts(result.current.postsPerDay)).toEqual(270); }); test('returns error when the request fails', async () => { diff --git a/src/scratchPad.js b/src/scratchPad.js new file mode 100644 index 0000000..e69de29 diff --git a/src/setupTests.js b/src/setupTests.js index 41273e4..ce88d61 100644 --- a/src/setupTests.js +++ b/src/setupTests.js @@ -1,4 +1,5 @@ import '@testing-library/jest-dom/extend-expect'; +import 'jest-axe/extend-expect'; import server from './__mocks__/server'; diff --git a/src/style/theme.js b/src/style/theme.js index 654ee83..2004157 100644 --- a/src/style/theme.js +++ b/src/style/theme.js @@ -1,3 +1,6 @@ +const HEATMAP_WIDTH = 1114; +const HEATMAP_DAY_WIDTH = 154; + const theme = { background: { color: { @@ -8,6 +11,12 @@ const theme = { size: { headerHeight: '100px', footerHeight: '100px', + heatmap: { + width: HEATMAP_WIDTH, + headerHeight: 52, + dayWidth: HEATMAP_DAY_WIDTH, + hour: (HEATMAP_WIDTH - HEATMAP_DAY_WIDTH) / 24, + }, }, color: { text: '#93918f', @@ -16,6 +25,27 @@ const theme = { midLight: '#d5d5d5', light: '#fff', primary: '#fdb755', + heatmap: { + dayBackground: '#1e2537', + hourBackground: [ + '#e0e592', + '#aed396', + '#a9d194', + '#a0ce93', + '#99cd94', + '#8cc894', + '#5eb391', + '#5db492', + '#5cb391', + '#5aad8c', + '#3984a3', + ], + hourHoverBorder: '#1e2537', + headerHour: '#787878', + headerBorder: '#f3f3f3', + headerBackground: 'linear-gradient(to bottom, #fefefe, #e9e9e9)', + + }, }, font: { family: { diff --git a/yarn.lock b/yarn.lock index e6e5b90..9464f49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -47,7 +47,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.7.5": +"@babel/core@^7.1.0", "@babel/core@^7.4.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== @@ -69,7 +69,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.4.0", "@babel/generator@^7.8.7", "@babel/generator@^7.9.0": +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== @@ -455,21 +455,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": +"@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== @@ -504,14 +497,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-import-meta@^7.8.3": - 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.4" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -525,14 +511,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -546,21 +532,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -1129,7 +1115,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.4.0", "@babel/template@^7.8.6": +"@babel/template@^7.10.4", "@babel/template@^7.4.0", "@babel/template@^7.8.6": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -1153,7 +1139,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== @@ -1162,11 +1148,6 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -1283,22 +1264,6 @@ dependencies: "@hapi/hoek" "^8.3.0" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" @@ -1308,17 +1273,6 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" - slash "^3.0.0" - "@jest/core@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" @@ -1353,40 +1307,6 @@ slash "^2.0.0" strip-ansi "^5.0.0" -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - "@jest/environment@^24.3.0", "@jest/environment@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" @@ -1397,15 +1317,6 @@ "@jest/types" "^24.9.0" jest-mock "^24.9.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - "@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" @@ -1415,7 +1326,7 @@ jest-message-util "^24.9.0" jest-mock "^24.9.0" -"@jest/fake-timers@^25.1.0", "@jest/fake-timers@^25.5.0": +"@jest/fake-timers@^25.1.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== @@ -1426,15 +1337,6 @@ jest-util "^25.5.0" lolex "^5.0.0" -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" - "@jest/reporters@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" @@ -1462,38 +1364,6 @@ source-map "^0.6.0" string-length "^2.0.0" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" - "@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" @@ -1503,15 +1373,6 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - "@jest/test-result@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" @@ -1521,16 +1382,6 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== - dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-sequencer@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" @@ -1541,17 +1392,6 @@ jest-runner "^24.9.0" jest-runtime "^24.9.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - "@jest/transform@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" @@ -1574,28 +1414,6 @@ source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/types@^24.3.0", "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" @@ -1626,6 +1444,17 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^26.5.2": + version "26.5.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d" + integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1651,11 +1480,6 @@ dependencies: any-observable "^0.3.0" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - "@sinonjs/commons@^1.7.0": version "1.8.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" @@ -1766,13 +1590,6 @@ "@svgr/plugin-svgo" "^4.3.1" loader-utils "^1.2.3" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@testing-library/dom@^7.22.3": version "7.24.3" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.24.3.tgz#dae3071463cf28dc7755b43d9cf2202e34cbb85d" @@ -1828,7 +1645,7 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== -"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.7": +"@types/babel__core@^7.1.0": version "7.1.10" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" integrity sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw== @@ -1884,14 +1701,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== @@ -1946,21 +1756,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -2054,15 +1854,6 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@^1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" - "@typescript-eslint/parser@^2.10.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" @@ -2073,14 +1864,6 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== - dependencies: - lodash.unescape "4.0.1" - semver "5.5.0" - "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" @@ -2255,11 +2038,6 @@ abab@^2.0.0, abab@^2.0.3: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - 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" @@ -2268,7 +2046,7 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-globals@^4.1.0, acorn-globals@^4.3.0, acorn-globals@^4.3.2: +acorn-globals@^4.1.0, acorn-globals@^4.3.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -2309,7 +2087,7 @@ acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.1: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== @@ -2363,13 +2141,6 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -2445,7 +2216,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: +anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -2478,7 +2249,7 @@ aria-query@^3.0.0: ast-types-flow "0.0.7" commander "^2.11.0" -aria-query@^4.0.2, aria-query@^4.2.2: +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== @@ -2643,7 +2414,7 @@ async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.1.1, async@^3.2.0: +async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== @@ -2691,6 +2462,11 @@ axe-core@^3.5.4: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axe-core@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== + axobject-query@^2.0.2, axobject-query@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -2737,20 +2513,6 @@ babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - babel-loader@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -2779,17 +2541,6 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.3.0" test-exclude "^5.2.3" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - babel-plugin-jest-hoist@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" @@ -2797,15 +2548,6 @@ babel-plugin-jest-hoist@^24.9.0: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - babel-plugin-macros@2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" @@ -2853,23 +2595,6 @@ babel-plugin-transform-react-remove-prop-types@0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-current-node-syntax@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" - integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - babel-preset-jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" @@ -2878,14 +2603,6 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== - dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" - babel-preset-react-app@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz#54775d976588a8a6d1a99201a702befecaf48030" @@ -3030,20 +2747,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3284,19 +2987,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -3451,7 +3141,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.4.1, chokidar@^3.4.2: +chokidar@^3.3.0, chokidar@^3.4.1, chokidar@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== @@ -3513,11 +3203,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -3585,15 +3270,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.1.tgz#a4cb67aad45cd83d8d05128fc9f4d8fbb887e6b3" @@ -3623,13 +3299,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3649,11 +3318,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -3791,18 +3455,6 @@ concat-stream@^1.5.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - confusing-browser-globals@^1.0.5, confusing-browser-globals@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" @@ -3840,7 +3492,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -4028,11 +3680,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-blank-pseudo@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" @@ -4156,7 +3803,7 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^2.0.0: +css@^2.0.0, css@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== @@ -4270,7 +3917,7 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4, cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssom@^0.4.1, cssom@^0.4.4: +cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== @@ -4282,7 +3929,7 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: dependencies: cssom "0.3.x" -cssstyle@^2.0.0, cssstyle@^2.2.0: +cssstyle@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -4393,7 +4040,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -4422,13 +4069,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -4441,21 +4081,11 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -4464,11 +4094,6 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - 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" @@ -4539,11 +4164,6 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -4567,6 +4187,11 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff-sequences@^26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.5.0.tgz#ef766cf09d43ed40406611f11c6d8d9dd8b2fefd" + integrity sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -4723,11 +4348,6 @@ dotenv@8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -4924,11 +4544,6 @@ escalade@^3.0.2, escalade@^3.1.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -4944,7 +4559,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.11.0, escodegen@^1.11.1, escodegen@^1.14.1, escodegen@^1.9.1: +escodegen@^1.11.0, escodegen@^1.14.1, escodegen@^1.9.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -4992,13 +4607,6 @@ eslint-config-airbnb@^18.2.0: object.assign "^4.1.0" object.entries "^1.1.2" -eslint-config-prettier@^3.1.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217" - integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ== - dependencies: - get-stdin "^6.0.0" - eslint-config-react-app@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" @@ -5006,12 +4614,7 @@ eslint-config-react-app@^5.2.1: dependencies: confusing-browser-globals "^1.0.9" -eslint-import-resolver-alias@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" - integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== - -eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.3, eslint-import-resolver-node@^0.3.4: +eslint-import-resolver-node@^0.3.2, 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== @@ -5070,25 +4673,6 @@ eslint-plugin-import@2.20.1: read-pkg-up "^2.0.0" resolve "^1.12.0" -eslint-plugin-import@^2.19.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== - dependencies: - 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.4" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - eslint-plugin-import@^2.22.0: version "2.22.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" @@ -5108,13 +4692,6 @@ eslint-plugin-import@^2.22.0: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jest@^22.4.1: - version "22.21.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.21.0.tgz#8137294645866636160487d9764224b9a43e2eb1" - integrity sha512-OaqnSS7uBgcGiqXUiEnjoqxPNKvR4JWG5mSRkzVoR6+vDwlqqp11beeql1hYs0HTbdhiwrxWLxbX0Vx7roG3Ew== - dependencies: - "@typescript-eslint/experimental-utils" "^1.13.0" - eslint-plugin-jsx-a11y@6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" @@ -5152,11 +4729,6 @@ eslint-plugin-react-hooks@^1.6.1: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== -eslint-plugin-react-hooks@^2.4.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" - integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== - eslint-plugin-react-hooks@^4.0.6: version "4.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz#2eb53731d11c95826ef7a7272303eabb5c9a271e" @@ -5180,7 +4752,7 @@ eslint-plugin-react@7.19.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" -eslint-plugin-react@^7.18.3, eslint-plugin-react@^7.20.3: +eslint-plugin-react@^7.20.3: version "7.21.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.2.tgz#3bd5d2c4c36d5a0428d0d6dda301ac9a84d681b2" integrity sha512-j3XKvrK3rpBzveKFbgAeGsWb9uz6iUOrR0jixRfjwdFeGSRsXvVTFtHDQYCjsd1/6Z/xvb8Vy3LiI5Reo7fDrg== @@ -5197,30 +4769,16 @@ eslint-plugin-react@^7.18.3, eslint-plugin-react@^7.20.3: resolve "^1.17.0" string.prototype.matchall "^4.0.2" -eslint-plugin-styled-components-a11y@^0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/eslint-plugin-styled-components-a11y/-/eslint-plugin-styled-components-a11y-0.0.16.tgz#ebf5313d8a5ae5a58d1e1b8c212c7b9af0eaf261" - integrity sha512-RdwqxffXfxftbG7C9RBskwitEcDmzN1GUzXV/ZRRlIpI884xSh5zNRmMkoQ8jW/p704Oh/ozqxIEZB6AwPIKcA== +eslint-plugin-styled-components-a11y@^0.0.17: + version "0.0.17" + resolved "https://registry.yarnpkg.com/eslint-plugin-styled-components-a11y/-/eslint-plugin-styled-components-a11y-0.0.17.tgz#8f09d883fc4af5f213766ca94ff3035d31624cfd" + integrity sha512-ibobc/oEVhrpBW1O60c3A20Z9X2mq9GnWygx95SiEqQiKT+Nb9+kTVv2OWqDqhgkqSpdIItIoic5QqxzdNIxKg== dependencies: - "@babel/generator" "^7.8.7" "@babel/parser" "^7.8.4" - aria-query "^4.0.2" - async "^3.1.1" - damerau-levenshtein "^1.0.6" - eslint "^6.8.0" eslint-config-airbnb "^17.1.0" - eslint-config-prettier "^3.1.0" - eslint-import-resolver-alias "^1.1.2" - eslint-plugin-import "^2.19.1" - eslint-plugin-jest "^22.4.1" eslint-plugin-jsx-a11y "^6.2.3" - eslint-plugin-react "^7.18.3" - eslint-plugin-react-hooks "^2.4.0" - jest "^25.1.0" - jsx-ast-utils "^2.2.3" - nodemon "^2.0.2" -eslint-scope@^4.0.0, eslint-scope@^4.0.3: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -5394,22 +4952,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" @@ -5467,18 +5009,6 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -5749,7 +5279,7 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: +find-up@4.1.0, find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -5960,7 +5490,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.1.2: +fsevents@~2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== @@ -5995,24 +5525,14 @@ 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-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -6129,23 +5649,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -6245,11 +5748,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -6415,11 +5913,6 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -6547,11 +6040,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -6597,11 +6085,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -6610,14 +6093,6 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6666,7 +6141,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.5, ini@~1.3.0: +ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -6935,7 +6410,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.3.1, is-installed-globally@^0.3.2: +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== @@ -6948,11 +6423,6 @@ is-negative-zero@^2.0.0: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7079,7 +6549,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -7101,11 +6571,6 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -7143,11 +6608,6 @@ istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" @@ -7161,16 +6621,6 @@ istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - istanbul-lib-report@^2.0.4: version "2.0.8" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" @@ -7180,15 +6630,6 @@ istanbul-lib-report@^2.0.4: make-dir "^2.1.0" supports-color "^6.1.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - istanbul-lib-source-maps@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" @@ -7200,15 +6641,6 @@ istanbul-lib-source-maps@^3.0.1: rimraf "^2.6.3" source-map "^0.6.1" -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - istanbul-reports@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" @@ -7216,13 +6648,15 @@ istanbul-reports@^2.2.6: dependencies: html-escaper "^2.0.0" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +jest-axe@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-4.0.0.tgz#cb7a55da739d3e085d26491285139ebd784a18d1" + integrity sha512-Uu8bpPdl+EMtlXIh9KtUY+0us41Lb+KIWL+tP42Kl/tRmDWtgd0qJO4XAkJ/FW90OcKaOwRrQyfTboH+UsmUmA== dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + axe-core "^4.0.1" + chalk "^4.0.0" + jest-matcher-utils "^26.0.1" + lodash.merge "^4.6.2" jest-changed-files@^24.9.0: version "24.9.0" @@ -7233,15 +6667,6 @@ jest-changed-files@^24.9.0: execa "^1.0.0" throat "^4.0.0" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - jest-cli@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" @@ -7261,26 +6686,6 @@ jest-cli@^24.9.0: realpath-native "^1.1.0" yargs "^13.3.0" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== - dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" - jest-config@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" @@ -7304,31 +6709,6 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" @@ -7339,7 +6719,7 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^25.2.1, jest-diff@^25.5.0: +jest-diff@^25.2.1: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== @@ -7349,6 +6729,16 @@ jest-diff@^25.2.1, jest-diff@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" +jest-diff@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.5.2.tgz#8e26cb32dc598e8b8a1b9deff55316f8313c8053" + integrity sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.5.0" + jest-get-type "^26.3.0" + pretty-format "^26.5.2" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -7356,13 +6746,6 @@ jest-docblock@^24.3.0: dependencies: detect-newline "^2.1.0" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== - dependencies: - detect-newline "^3.0.0" - jest-each@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" @@ -7374,17 +6757,6 @@ jest-each@^24.9.0: jest-util "^24.9.0" pretty-format "^24.9.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - jest-environment-jsdom-fourteen@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz#4cd0042f58b4ab666950d96532ecb2fc188f96fb" @@ -7419,18 +6791,6 @@ jest-environment-jsdom@^24.9.0: jest-util "^24.9.0" jsdom "^11.5.1" -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - jest-environment-node@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" @@ -7442,18 +6802,6 @@ jest-environment-node@^24.9.0: jest-mock "^24.9.0" jest-util "^24.9.0" -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - jest-fetch-mock@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz#31749c456ae27b8919d69824f1c2bd85fe0a1f3b" @@ -7472,6 +6820,11 @@ jest-get-type@^25.2.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -7491,26 +6844,6 @@ jest-haste-map@^24.9.0: optionalDependencies: fsevents "^1.2.7" -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - jest-jasmine2@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" @@ -7533,29 +6866,6 @@ jest-jasmine2@^24.9.0: pretty-format "^24.9.0" throat "^4.0.0" -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - jest-leak-detector@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" @@ -7564,14 +6874,6 @@ jest-leak-detector@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-matcher-utils@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" @@ -7582,15 +6884,15 @@ jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== +jest-matcher-utils@^26.0.1: + version "26.5.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz#6aa2c76ce8b9c33e66f8856ff3a52bab59e6c85a" + integrity sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA== dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + chalk "^4.0.0" + jest-diff "^26.5.2" + jest-get-type "^26.3.0" + pretty-format "^26.5.2" jest-message-util@^24.9.0: version "24.9.0" @@ -7644,11 +6946,6 @@ jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - jest-resolve-dependencies@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" @@ -7658,15 +6955,6 @@ jest-resolve-dependencies@^24.9.0: jest-regex-util "^24.3.0" jest-snapshot "^24.9.0" -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - jest-resolve@24.9.0, jest-resolve@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" @@ -7678,21 +6966,6 @@ jest-resolve@24.9.0, jest-resolve@^24.9.0: jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" - jest-runner@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" @@ -7718,31 +6991,6 @@ jest-runner@^24.9.0: source-map-support "^0.5.6" throat "^4.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - jest-runtime@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" @@ -7772,50 +7020,11 @@ jest-runtime@^24.9.0: strip-bom "^3.0.0" yargs "^13.3.0" -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - jest-serializer@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - jest-snapshot@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" @@ -7835,26 +7044,12 @@ jest-snapshot@^24.9.0: pretty-format "^24.9.0" semver "^6.2.0" -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== +jest-styled-components@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.3.tgz#cc0b031f910484e68f175568682f3969ff774b2c" + integrity sha512-jj9sWyshehUnB0P9WFUaq9Bkh6RKYO8aD8lf3gUrXRwg/MRddTFk7U9D9pC4IAI3v9fbz4vmrMxwaecTpG8NKA== dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" + css "^2.2.4" jest-util@^24.0.0, jest-util@^24.9.0: version "24.9.0" @@ -7897,18 +7092,6 @@ jest-validate@^24.9.0: leven "^3.1.0" pretty-format "^24.9.0" -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" - jest-watch-typeahead@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz#e5be959698a7fa2302229a5082c488c3c8780a4a" @@ -7935,18 +7118,6 @@ jest-watcher@^24.3.0, jest-watcher@^24.9.0: jest-util "^24.9.0" string-length "^2.0.0" -jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== - dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" - jest-worker@^24.6.0, jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" @@ -7955,7 +7126,7 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^25.1.0, jest-worker@^25.5.0: +jest-worker@^25.1.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== @@ -7971,15 +7142,6 @@ jest@24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" -jest@^25.1.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== - dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8067,38 +7229,6 @@ jsdom@^14.1.0: ws "^6.1.2" xml-name-validator "^3.0.0" -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - jsdom@^16.2.1: version "16.4.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" @@ -8141,11 +7271,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -8241,13 +7366,6 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1: array-includes "^3.1.1" object.assign "^4.1.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -8309,13 +7427,6 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -8496,6 +7607,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -8521,11 +7637,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -8585,16 +7696,6 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -8803,11 +7904,6 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -9108,17 +8204,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - node-releases@^1.1.52, node-releases@^1.1.61: version "1.1.61" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" @@ -9133,30 +8218,7 @@ node-request-interceptor@^0.5.1: debug "^4.1.1" headers-utils "^1.2.0" -nodemon@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416" - integrity sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ== - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^4.0.0" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9198,11 +8260,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -9461,11 +8518,6 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -9478,21 +8530,11 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - 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" @@ -9567,16 +8609,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -10558,11 +9590,6 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - pretty-bytes@^5.1.0, pretty-bytes@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" @@ -10606,6 +9633,16 @@ pretty-format@^26.4.2: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-format@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.5.2.tgz#5d896acfdaa09210683d34b6dc0e6e21423cd3e1" + integrity sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og== + dependencies: + "@jest/types" "^26.5.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -10673,11 +9710,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -10730,13 +9762,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== - dependencies: - escape-goat "^2.0.0" - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -10817,16 +9842,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-app-polyfill@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" @@ -11020,15 +10035,6 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -11047,16 +10053,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -11102,11 +10098,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -11194,20 +10185,6 @@ regexpu-core@^4.7.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" -registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" @@ -11265,7 +10242,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.5, request-promise-native@^1.0.7, request-promise-native@^1.0.8: +request-promise-native@^1.0.5, request-promise-native@^1.0.8: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -11327,13 +10304,6 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -11344,11 +10314,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" @@ -11394,13 +10359,6 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.1 dependencies: path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -11626,28 +10584,16 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - semver-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -11969,11 +10915,6 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -12177,7 +11118,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -12270,11 +11211,6 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - strip-comments@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" @@ -12305,11 +11241,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - style-loader@0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -12369,14 +11300,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - svg-parser@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -12426,19 +11349,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - terser-webpack-plugin@2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" @@ -12488,15 +11398,6 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -12507,11 +11408,6 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -12593,11 +11489,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -12628,13 +11519,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -12732,11 +11616,6 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -12760,25 +11639,11 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -undefsafe@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -12836,13 +11701,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -12881,25 +11739,6 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" @@ -12921,13 +11760,6 @@ url-loader@2.3.0: mime "^2.4.4" schema-utils "^2.5.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -13006,15 +11838,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -13302,20 +12125,13 @@ which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -13495,15 +12311,6 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -13527,16 +12334,6 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -13558,16 +12355,11 @@ ws@^6.1.2, ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.0.0, ws@^7.2.3: +ws@^7.2.3: version "7.3.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -13631,14 +12423,6 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.0.0: version "20.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.1.tgz#28f3773c546cdd8a69ddae68116b48a5da328e77" @@ -13678,23 +12462,6 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.0.3.tgz#7a919b9e43c90f80d4a142a89795e85399a7e54c"