diff --git a/.github/workflows/test-and-publish.yml b/.github/workflows/test-and-publish.yml index 9087582d48..8330a52bac 100644 --- a/.github/workflows/test-and-publish.yml +++ b/.github/workflows/test-and-publish.yml @@ -29,7 +29,7 @@ jobs: publish-module: name: 'Publish Module to NPM' needs: test - if: github.ref == 'refs/heads/master' #publish only when merged in master, not on PR + if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/next' #publish only when merged in master, not on PR runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 27e42b5743..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,453 +0,0 @@ -# Changelog - -## 1.3.1 - -- Added semantic release support. So no more changelog entries here! See ya! -- Fixed an issue where isDataEqual default function did not work with dates -- Fixed some types - -## 1.3.0 - -- Added a new feature where old and new data when fetching is compared for deep equality. When they are equal, the data reference will not be changed and thus keep referential equality and stability for usage in change-detection like useMemo, useCallback, and useEffect. -- Added the `config.isDataEqual` option to allow customization of the above feature -- Fixed an issue where query side effects would not fire in suspense mode -- Fixed an issue where queries would double fetch when using suspense -- Fixed an issue where cursors would not be rebuilt on infinite query refetches -- Fixed an issue where refetchInterval could cause an infinite loop - -## 1.2.9 - -- Added homepage to readme for link to docs to be displayed in IDEs - -## 1.2.8 - -- Fixed an issue where stale and garbage collection timeouts would fire in server-like environments - -## 1.2.7 - -- Imported types from Definitely Typed to repo -- Upgraded dependency for Scarf - -## 1.2.6 - -- Fixed an issue where `isFetching` could be `true` when a falsy query key is supplied - -## 1.2.5 - -- Added postinstall message for sponsorship/support - -## 1.2.4 - -- cacheTime now accepts `Infinity` as a value -- Fixed an issue where useInfiniteQuery's isFetchingMore boolean was updated, but not rerendered - -## 1.2.3 - -- Fixed an issue where cancelled requests would not mark a query as stale, especially if that query had been manually refetched before its stale timeout had lapsed - -## 1.2.2 - -- Fixed an issue where garbage collection was messing with proper test cleanup -- Fixed an issue where tests were giving false positives because of the above -- Fixed an issue where query creation during the render phase was eventually triggering setState (found via a cache subscription in the `useIsFetching` hook, when used in the same parent component as a query) - -## 1.2.1 - -- Fixed an issue where the `throwOnError` option was not working for `queryCache.prefetchQuery` -- Fixed an issue where the `force` option was not working for `queryCache.prefetchQuery` - -## 1.2.0 - -- Add function for checking if retries should be performed - -## 1.1.7 - -- Add unminified esm build - -## 1.1.6 - -- Fixed an issue where a race condition could exist when using useMutation rapidly - -## 1.1.5 - -- Fixed an issue where multiple mutation attempts would still run side effects for the expired mutation attempts - -## 1.1.4 - -- Fixed an issue where fetchMore would fire, even if canFetchMore is falsy - -## 1.1.3 - -- Fix publishing issue - -## 1.1.2 - -- Added anonymous usage analytics to package via Scarf - -## 1.1.1 - -- Fixed an issue where `useInfiniteQuery`'s `canFetchMore` variable could unexpectedly be `undefined` when using `initialData` - -## 1.1.0 - -- Added the `onMutate` callback function to `useMutation`. This callback can be used to perform optimistic updates and even supply a roll-back value to the `onError` and `onSettled` callbacks. -- Added the `snapshotValue` parameter (the returned value from `onMutate`) to both the `onError` and `onSettled` callbacks in the `useMutation` hook. - -## 1.0.36 - -- Fixed an issue where `useErrorBoundary` was only possible when suspense mode is turned on. -- Fixed an issue where `throwOnError` would not override at the mutate level of `useMutation` if it was set at a higher level. - -## 1.0.35 - -- Fixed an issue where `mutate`-level side effect handlers would override the hook-level handlers. Both will now fire and in the correct order as well. - -## 1.0.34 - -- Added the `variables` argument to `useMutations` `onSuccess`, `onError` and `onSettled` callbacks - -## 1.0.33 - -- Fixed an issue where `queryCache.isFetching` would be one tick behind subscription listener updates -- Fixed an issue where a query dispatch was attempted on a removed query - -## 1.0.32 - -- Nothing to see here - -## 1.0.31 - -- Nothing to see here - -## 1.0.30 - -- Fixed an issue where a stale timeout could be called on a removed query - -## 1.0.29 - -- Fixed an issue where dispatch was called on an unmounted component - -## 1.0.28 - -- Fixed an issue where the documentation displayed deprecated behavior for using falsey query key parts for dependant queries -- Removed deprecated `updateQuery` docs from README -- Fixed an issue where inactive queries would also be refetched on window focus - -## 1.0.27 - -- Added the ability to use `staleTime: Infinity` for queries that should never go stale -- Added the `queryCache.getQueries` function -- `useMutation` can now allow multiple mutation requests at the same. - -## 1.0.26 - -- Fixed a regression issue where setting data would not work due to using the wrong updater variable - -## 1.0.25 - -- Added back an es module build of the library - -## 1.0.24 - -- Fixed an issue where a falsey query key could not be used in the object syntax -- Fixed an issue where `queryCache.removeQueries` would crash -- Fixed an issue where `queryCache.setQueryData` would crash if a functional predicate is used and a query is not found, and thus attempted to be created. -- Fixed an issue where `queryCache.setQueryData` would mark a query as fresh but would not schedule a stale timeout. - -## 1.0.23 - -- Fixed an issue where a nullish query key would result in an error -- Fixed an issue where undefined query keys could possibly result in infinite loops -- Fixed an issue where queries with initial data would not trigger global listeners that that the store had changed - -## 1.0.22 - -- Fixed an issue where a query would be initialized with wrong state when using falsy initialData - -## 1.0.21 - -- Fixed an issue where a query would be marked as fetching when using initialData - -## 1.0.20 - -- Fixed an issue where `useInfiniteQuery`'s `fetchMore` method would not work if the query is in the middle of a normal refetch - -## 1.0.19 - -- Fixed an issue where `usePaginatedQuery` and `useInfiniteQuery` could not be used in suspense mode - -## 1.0.18 - -- Fixed an issue where useInfiniteQuery could not override the queryFn internally -- Fixed an issue where a function could not be used as the query key -- Fixed an issue where the object syntax for queries could not be used - -## 1.0.17 - -- Fixed an issue where `queryCache.prefetchQuery` did not resolve the query data if the query was already cached. - -## 1.0.16 - -- Fixed an issue where some overloaded query arg signatures would not have proper defaults -- Added the `force` option to the private `query.fetch` function -- Added the `force` and `throwOnError` options to the `refetch` method to be in line with documentation and expectations of v0.x functionality -- Updated documentation to show correct options for `usePaginatedQuery` and `useInfiniteQuery` -- Improved documentation around `getFetchMore` and fetch more variables -- Fixed an issue where query state was not updated correctly. It is now computed from the query instead of manually tracked. - -## 1.0.15 - -- Added the ability to configure a query with an object instead of overloaded params -- Fixed an issue where prefetching a query would result in an error - -## 1.0.14 - -- Fixed an issue where stale queries would not be prefetched properly - -## 1.0.13 - -- Fixed an issue where a query that had been prefetched before usage in a `useQuery` instance would result in a double fetch - -## 1.0.12 - -- Fixed an issue where React Query could not be imported properly in dev mode - -## 1.0.11 - -- Fixed an issue where fresh (non-stale) queries would be refetched when using `queryCache.refetchQueries` or when focusing the window. -- Added a `force` option to both `queryCache.refetchQueries` and `queryCache.prefetchQueries` to restore expected functionality with regards to the issue above, allowing the user to bypass the stale safety of a query and force it to be refetched. -- Fixed an issue where `failureCount` would not get reset when a query succeeds - -## 1.0.10 - -- Memory optimizations when determining currently fetching queries - -## 1.0.9 - -- Fixed an issue where query retries would not continue firing if the page was unfocused and refocused again - -## 1.0.8 - -- Fixed an issue where `useIsFetching` would not read properly from the query cache -- Fixed an issue where `queryCache.setQueryCache` would not match multiple queries and would not partially match queries -- Removed some unused code from the codebase - -## 1.0.7 - -- Fixed an issue where failed queries with no data could be unintentionally garbage collected immediately -- Fixed an issue where queries with falsey query keys would initialize to `loading` instead of `success` - -## 1.0.6 - -- Fixed an issue where paginated queries, when updated rapidly, would display an unnecessary loading state. - -## 1.0.5 - -- Fixed a regression where query errors were not thrown properly -- Fixed an issue where the `mutate` function returned from `useMutation` was not memoized properly - -## 1.0.4 - -- Silently remove the `query.state.isInactive` boolean. If you somehow relied on this state, then you can still derive it using `const isInactive = !query.instances.length` - -## 1.0.3 - -- Fixed an issue where the first query rendered on the page would always remount due to a bug in the `useUid` hook -- Fixed an issue where queries were still refetching on mount if `manual` was `true` -- Optimized garbage collection for queries that have no data so they will be removed immediately -- Fixed a potential issue where returned promises in try/catch blocks were not always awaited, yet still worked usually. -- Fixed a potential issue where a query function that had already been settled would get it's `cancel` function called. - -## 1.0.2 - -- Fixed an issue where React Native would try and call `window.addEventListener` -- Fixed an issue where `setConsole` was not exported - -## 1.0.1 - -- Removed outdated external types dependency - -## 1.0.0 - -**Features & Enhancements** - -- `usePaginatedQuery` - A dedicated hook for window-like querying of paginated data or cursor-driven batches of data -- `useInfiniteQuery` - A dedicated hook for accumulative querying of paginated data or cursor-driven batches of data -- Synchronous Query Cache Reads/Writes/Upserts/Deletes -- Improved query key matching for removing and refetching queries -- External subscriptions to query cache updates -- Unlimited query key length support -- Optional Query Variables -- `onSettled` callback for query and mutation hooks -- `onSuccess` and `onError` callbacks for mutations -- Better SSR support via `config.initialData` -- `config.initialData` now supports passing an initializer function, similar to React.useState -- Query status is now automatically inferred based on `initialData` (`success` for non-`undefined` intitial data, `loading` for `undefined` intitial data) -- Query objects now supply an `updatedAt` property for making better informed decisions about synchronous cache usage -- Overall, less over-fetching out of the box when using multiple instances of a query. -- Added a new `config.refetchOnMount` that defaults to `true` and when set to `false` will disable additional instances of a query to trigger background refetches. -- More reliable suspense support for prefetched queries and background refetching lifecycles -- Support for errorBoundaries out of the box when using Suspense for both queries and mutations -- Added a `globalConfig.queryFnParamsFilter` function that allows filtering the parameters that get sent to the query function. - -**Breaking Changes** - -- Query Keys and Query functions - - Query keys in array form are no longer limited to a `[String, Object]` tuple, but can have as many serializable items in them as necessary. - - Query functions now receive **all** query key items as parameters (before they only recieved a single variables object if supplied) - - Query functions can now also receive optional query variables (passed as an optional second variable to `useQuery`) as parameters. They are applied after the query key parameters -- `useQuery` - - `paginated` has been removed in favor of the new `usePaginatedQuery` and `useInfiniteQuery` hooks. This includes the following options and methods as well: - - `isFetchingMore` - - `canFetchMore` - - `fetchMore` -- `useMutation` - - `refetchQueries` and `updateQuery` options have been removed in favor of `onSuccess`, `onError` and `onSettled` + `queryCache.refetchQueries` and `queryCache.setQueryData` -- `prefetchQuery` has been removed in favor of `queryCache.prefetchQuery` -- `refetchQuery` has been removed in favor of `queryCache.refetchQueries` -- `refetchAllQueries` has been removed in favor of `queryCache.refetchQueries` -- `updateQuery` has been removed in favor of `queryCache.setQueryData` -- `clearQueryCache` has been removed in favor of `queryCache.clear` and `queryCache.removeQueries` -- When `initialData` now resolves to any non-`undefined` value: - - `status` will be initially set to `success` - - The query will not automatically refetch on mount - - `isStale` will initially be set to `true`, and the standard staleTimeout will be applied - -## 0.4.3 - -- Remove unrelated branch artifacts from dist folder, including types - -## 0.4.2 - -- Added a new `setConsole` exported function that allows you replace the `console` interface used to log errors. By default, the `window.console` object is used. - -## 0.4.1 - -- Fixed an issue where interval fetching errors would throw repeatedly - -## 0.4.0 - -- Added the `useMutation.throwOnError` and corresponding `queryConfig.throwOnError` option to configure whether the `mutate` function rethrows errors encountered in the mutation function -- Added the `useMutation.useErrorBoundary` and corresponding `queryConfig.useErrorBoundary` option to configure whether mutation errors should be thrown during the render function and propagated to the nearest error boundary. This option will default to the same value as `queryConfig.suspense` if not defined otherwise -- Added a new `reset` function for `useMutation` which will revert the hook's state back to the initial `null` state - -## 0.3.27 - -- Switched from the fast-async babel plugin to the babel-plugin-transform-async-to-promises. This should offer better compiler/browser support at the expense of 0.1kb - -## 0.3.26 - -- By default the initial state for `data` is now `undefined` instead of `null`, allowing for use of default parameters in destructuring. While this may technically be a "breaking" change, it's more of a bug in spirit as it was not intended to be shipped this way. Don't like this? Become a sponsor and demand otherwise ;) - -## 0.3.25 - -- Fixed an issue where `cancelQueries` was called while not being defined - -## 0.3.24 - -- Fixed an issue where isDocumentVisible wasn't properly guarded against in all non-web scenarios -- Fixed an issue where query cancellation functions may not have been called -- Added the new `setFocusHandler` utility which allows the overriding of the event that triggers window focusing -- Updated the docs to show how to use `setFocusHandler` to avoid iframe events from triggerig window focus - -## 0.3.23 - -- Fixed an issue where queries would not refresh in the background when using suspense - -## 0.3.22 - -- Caching is now disabled when React Query is used on the server. It is still possible to seed queries using `initialData` during SSR. - -## 0.3.21 - -- Fixed an edge case where `useIsLoading` would not update or rerender correctly. - -## 0.3.20 - -- Added `config.refetchIntervalInBackground` option - -## 0.3.19 - -- Added `config.initialData` option for SSR - -## 0.3.18 - -- Fix and issue where `setQueryData` would crash when the query does not exist - -## 0.3.17 - -- Fix and issue where queries would double fetch when using suspense - -## 0.3.16 - -- Remove nodent runtime from react-async (shaved off 938 bytes!) - -## 0.3.15 - -- Better esm bundle configuration - -## 0.3.14 - -- Add `promise.cancel` support to query promises to support request cancellation APIs -- Refetch all on window focus should no longer raise unhandled promise rejections - -## 0.3.13 - -- Fix issue where `document` was not guarded againts in React Native - -## 0.3.12 - -- Remove orphaned npm dependencies - -## 0.3.11 - -- Add `@types/react-query` as a dependency for typescript users - -## 0.3.10 - -- Fix issue where window focus event would try and register in react-native - -## 0.3.9 - -- Fix issue where variable hashes could contain arrays or similar number/string pairs -- Fix issue where clearing query cache could lead to out of date query states - -## 0.3.8 - -- Internal cleanup and refactoring - -## 0.3.7 - -- Added the `clearQueryCache` API function to clear the query cache - -## 0.3.6 - -- Fixed an issue where passing `config` to `ReactQueryConfigProvider` would not update the non-hook `defaultContext` - -## 0.3.5 - -- Fixed an issue where `isLoading` would remain `true` if a query encountered an error after all retries -- Fixed regression where `useIsFetching` stopped working - -## 0.3.4 - -- Fixed an issue where `useMutation().mutate` would not throw an error when failing - -## 0.3.3 - -- Fixed an issue where falsey query keys would sometimes still fetch - -## 0.3.2 - -- Added the `useQuery.onSuccess` callback option -- Added the `useQuery.onError` callback option - -## 0.3.1 - -- Added the `prefetchQuery` method -- Improved support for Suspense including fetch-as-you-render patterns -- Undocumented `_useQueries` hook has been removed - -## 0.3.0 - -- The `useReactQueryConfig` hook is now a provider component called `ReactQueryConfigProvider` diff --git a/README.md b/README.md index d46e4d7636..c537f23107 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ Enjoy this library? Try them all! [React Table](https://github.com/tannerlinsley - Request Cancellation - [React Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html) + Fetch-As-You-Render Query Prefetching - [Dedicated Devtools (React Query Devtools)](https://github.com/tannerlinsley/react-query-devtools) -- 4kb - 6kb (depending on features imported) +- - + (depending on features imported)
Core Issues and Solution @@ -74,15 +74,15 @@ React Query exports a set of hooks that address these issues. Out of the box, Re
Inspiration & Hat-Tipping
-A big thanks to both [Draqula](https://github.com/vadimdemedes/draqula) for inspiring a lot of React Query's original API and documentation and also [Zeit's SWR](https://github.com/zeit/swr) and its creators for inspiring even further customizations and examples. You all rock! +A big thanks to both [Draqula](https://github.com/vadimdemedes/draqula) for inspiring a lot of React Query's original API and documentation and also [Vercel's SWR](https://github.com/zeit/swr) and its creators for inspiring even further customizations and examples. You all rock!
-How is this different from Zeit's SWR? +How is this different from Vercel's SWR?
-[Zeit's SWR](https://github.com/zeit/swr) is a great library, and is very similar in spirit and implementation to React Query with a few notable differences: +[Vercel's SWR](https://github.com/vercel/swr) is a great library, and is very similar in spirit and implementation to React Query with a few notable differences: - Automatic Cache Garbage Collection - React Query handles automatic cache purging for inactive queries and garbage collection. This can mean a much smaller memory footprint for apps that consume a lot of data or data that is changing often in a single session - `useMutation` - A dedicated hook for handling generic lifecycles around triggering mutations and handling their side-effects in applications. SWR does not ship with anything similar, and you may find yourself reimplementing most if not all of `useMutation`'s functionality in user-land. With this hook, you can extend the lifecycle of your mutations to reliably handle successful refetching strategies, failure rollbacks and error handling. @@ -92,12 +92,16 @@ A big thanks to both [Draqula](https://github.com/vadimdemedes/draqula) for insp
+## Videos and Tutorials + +- ["React Query: It’s Time to Break up with your Global State!" @ React Summit 2020](https://youtu.be/seU46c6Jz7E) + ## Used By - [Google](https://google.com) +- [Walmart](https://walmart.com) - [PayPal](https://paypal.com) - [Amazon](https://amazon.com) -- [Walmart](https://walmart.com) - [Microsoft](https://microsoft.com) - [Target](https://target.com) - [CarFAX](https://carfax.com) @@ -207,7 +211,6 @@ This library is being built and maintained by me, @tannerlinsley and I am always - [Queries](#queries) - [Query Keys](#query-keys) - [Query Key Variables](#query-key-variables) - - [Optional Variables](#optional-variables) - [Using a Query Object instead of parameters](#using-a-query-object-instead-of-parameters) - [Dependent Queries](#dependent-queries) - [Caching & Invalidation](#caching--invalidation) @@ -249,7 +252,7 @@ This library is being built and maintained by me, @tannerlinsley and I am always - [`queryCache.prefetchQuery`](#querycacheprefetchquery) - [`queryCache.getQueryData`](#querycachegetquerydata) - [`queryCache.setQueryData`](#querycachesetquerydata) - - [`queryCache.refetchQueries`](#querycacherefetchqueries) + - [`queryCache.invalidateQueries`](#querycacherefetchqueries) - [`queryCache.cancelQueries`](#querycachecancelqueries) - [`queryCache.removeQueries`](#querycacheremovequeries) - [`queryCache.getQuery`](#querycachegetquery) @@ -280,10 +283,10 @@ React Query uses [Scarf](https://www.npmjs.com/package/@scarf/scarf) to collect Out of the box, React Query is configured with **aggressive but sane** defaults. **Sometimes these defaults can catch new users off guard or make learning/debugging difficult if they are unknown by the user.** Keep them in mind as you continue to learn and use React Query: -- Query results that are _currently rendered on the screen_ will become "stale" immediately after they are resolved and will be refetched automatically in the background when they are rendered or used again. To change this, you can alter the default `staleTime` for queries to something other than `0` milliseconds. +- Query results that are _currently rendered on the screen_ (via `useQuery` and similar hooks) will become "stale" immediately after they are resolved and will be refetched automatically in the background when they are rendered or used again. To change this, you can alter the default `staleTime` for queries to something other than `0` milliseconds. - Query results that become unused (all instances of the query are unmounted) will still be cached in case they are used again for a default of 5 minutes before they are garbage collected. To change this, you can alter the default `cacheTime` for queries to something other than `1000 * 60 * 5` milliseconds. - Stale queries will automatically be refetched in the background **when the browser window is refocused by the user**. You can disable this using the `refetchOnWindowFocus` option in queries or the global config. -- Queries that fail will silently and automatically be retried **3 times, with exponential backoff delay** before capturing and displaying an error to the UI. To change this, you can alter the default `retry` and `retryDelay` options for queries to something other than `3` and the default exponential backoff function. +- Queries that fail will silently be retried **3 times, with exponential backoff delay** before capturing and displaying an error to the UI. To change this, you can alter the default `retry` and `retryDelay` options for queries to something other than `3` and the default exponential backoff function. - Query results by default are deep compared to detect if data has actually changed and if not, the data reference remains unchanged to better help with value stabilization with regards to useMemo and useCallback. The default deep compare function use here (`config.isDataEqual`) only supports comparing JSON-compatible primitives. If you are dealing with any non-json compatible values in your query responses OR are seeing performance issues with the deep compare function, you should probably disable it (`config.isDataEqual = () => false`) or customize it to better fit your needs. # Queries @@ -305,6 +308,31 @@ The **unique key** you provide is used internally for refetching, caching, dedup The query `info` returned contains all information about the query and can be easily destructured and used in your component: +```js +function Todos() { + const { isLoading, isError, data, error } = useQuery('todos', fetchTodoList) + + if (isLoading) { + return Loading... + } + + if (isError) { + return Error: {error.message} + } + + // also status === 'success', but "else" logic works, too + return ( + + ) +} +``` + +If booleans aren't your thing, you can also use the `status` string to do the same: + ```js function Todos() { const { status, data, error } = useQuery('todos', fetchTodoList) @@ -330,7 +358,9 @@ function Todos() { ## Query Keys -At its core, React Query manages query caching for you and uses a serializable array or "query key" to do this. Using a query key that is **simple** and **unique to the query's data** is very important. In other similar libraries, you'll see the use of URLs and/or GraphQL query template strings to achieve this, but we believe at scale, this becomes prone to typos and errors. To relieve this issue, React Query Keys can be **strings** or **an array with a string and then any number of serializable primitives and/or objects**. +At its core, React Query manages query caching for you based on query keys. Query keys can be as simple as a string, or as complex as an array or nested object of values. As long as the key is serializable, and **unique to the query's data**, you can use it! + +If you're learning React Query still, we suggest starting with using **strings** and **arrays with strings/numbers**, then working your way up to using more complex query keys. ### String-Only Query Keys @@ -394,10 +424,7 @@ To use external props, state, or variables in a query function, it's easiest to ```js function Todos({ completed }) { - const { status, data, error } = useQuery( - ['todos', { status, page }], - fetchTodoList - ) + const queryInfo = useQuery(['todos', { status, page }], fetchTodoList) } // Access the key, status and page variables in your query function! @@ -411,10 +438,7 @@ If you send through more items in your query key, they will also be available in ```js function Todo({ todoId, preview }) { - const { status, data, error } = useQuery( - ['todo', todoId, { preview }], - fetchTodoById - ) + const queryInfo = useQuery(['todo', todoId, { preview }], fetchTodoById) } // Access status and page in your query function! @@ -428,40 +452,13 @@ Whenever a query's key changes, the query will automatically update. In the foll ```js function Todo({ todoId }) { - const { status, data, error } = useQuery(['todo', todoId], fetchTodo) -} -``` - -## Optional Variables - -In some scenarios, you may find yourself needing to pass extra information to your query that shouldn't (or doesn't need to be) a part of the query key. `useQuery`, `usePaginatedQuery` and `useInfiniteQuery` all support passing an optional array of additional parameters to be passed to your query function: - -```js -function Todo({ todoId, preview }) { - const { status, data, error } = useQuery( - // These will be used as the query key - ['todo', todoId], - // These will get passed directly to our query function - [ - debug, - { - foo: true, - bar: false, - }, - ], - fetchTodoById - ) -} - -function fetchTodoById(key, todoId, debug, { foo, bar }) { - return new Promise() - // ... + const queryInfo = useQuery(['todo', todoId], fetchTodo) } ``` ## Using a Query Object instead of parameters -Anywhere the `[queryKey, variables, queryFn, config]` options are supported throughout React Query's API, you can also use an object to express the same configuration: +Anywhere the `[queryKey, queryFn, config]` signature is supported throughout React Query's API, you can also use an object to express the same configuration: ```js import { useQuery } from 'react-query' @@ -469,55 +466,39 @@ import { useQuery } from 'react-query' useQuery({ queryKey: ['todo', 7], queryFn: fetchTodos, - variables: [], config: {}, }) ``` -## Dependent Queries - -React Query makes it easy to make queries that depend on other queries for both: - -- Parallel Queries (avoiding waterfalls) and -- Serial Queries (when a piece of data is required for the next query to happen). +## Paralle Queries -To do this, you can use the following 2 approaches: +React Query is built to require **no extra effort** for making parallel queries. You don't need to do anything special! Just use React Query's hooks and handle all of the loading states and you're good to go! -### Pass a falsy query key +## Dependent Queries -If a query isn't ready to be requested yet, just pass a falsy value as the query key: +Dependent (or serial) queries are queries that depend on previous ones to finish before they can execute. To do this, use the `enabled` option to tell a query when it is ready to turn on: ```js // Get the user const { data: user } = useQuery(['user', email], getUserByEmail) // Then get the user's projects -const { data: projects } = useQuery( - // `user` would be `null` at first (falsy), - // so the query will not execute while the query key is falsy - user && ['projects', user.id], - getProjectsByUser +const { isIdle, data: projects } = useQuery( + ['projects', user.id], + getProjectsByUser, + { + // `user` would be `null` at first (falsy), + // so the query will not execute until the user exists + enabled: user, + } ) -``` -### Use a query key function that throws an exception - -If a function is passed, the query will not execute until the function can be called without throwing: - -```js -// Get the user -const { data: user } = useQuery(['user', email]) - -// Then get the user's projects -const { data: projects } = useQuery( - // This will throw trying to access property `id` of `undefined` until the `user` is available - () => ['projects', user.id] -) +// isIdle will be `true` until `enabled` is true and the query begins to fetch. It will then go to the `isLoading` stage and hopefully the `isSuccess` stage :) ``` ## Caching & Invalidation -React Query caching is automatic out of the box. It uses a `stale-while-revalidate` in-memory caching strategy together with robust query deduping to always ensure a query's data is only cached when it's needed and only cached once even if that query is used multiple times across your application. +React Query caching is automatic out of the box. It uses a `stale-while-revalidate` in-memory caching strategy (popularized by [HTTP RFC 5861](https://tools.ietf.org/html/rfc5861)) and a very robust query deduping strategy to always ensure a query's data is always readily available, only cached when it's needed, even if that query is used multiple times across your application and updated in the background when possible. At a glance: @@ -562,18 +543,19 @@ function Todos() { const fetchProjects = (key, page = 0) => fetch('/api/projects?page=' + page) const { - status, + isLoading, + isError, + error, resolvedData, latestData, - error, isFetching, } = usePaginatedQuery(['projects', page], fetchProjects) return (
- {status === 'loading' ? ( + {isLoading ? (
Loading...
- ) : status === 'error' ? ( + ) : isError ? (
Error: {error.message}
) : ( // `resolvedData` will either resolve to the latest page's data @@ -601,10 +583,12 @@ function Todos() { > Next Page - {// Since the last page's data potentially sticks around between page requests, - // we can use `isFetching` to show a background loading - // indicator since our `status === 'loading'` state won't be triggered - isFetching ? Loading... : null}{' '} + { + // Since the last page's data potentially sticks around between page requests, + // we can use `isFetching` to show a background loading + // indicator since our `status === 'loading'` state won't be triggered + isFetching ? Loading... : null + }{' '}
) } @@ -723,49 +707,63 @@ function Projects() { } ``` -## Scroll Restoration +### What if I want to infinitely load more data in reverse? -Out of the box, "scroll restoration" for all queries (including paginated and infinite queries) Just Works™️ in React Query. The reason for this is that query results are cached and able to be retrieved synchronously when a query is rendered. As long as your queries are being cached long enough (the default time is 5 minutes) and have not been garbage collected, scroll restoration will work out of the box all the time. +Sometimes you may not want to **append** infintely loaded data, but instead **prepend** it. If this is case, you can use `fetchMore`'s `previous` option, eg. -## Manual Querying +```js +fetchMore(previousPageVariables, { previous: true }) +``` -If you ever want to disable a query from automatically running, you can use the `manual = true` option. When `manual` is set to true: +This will ensure the new data is prepended to the data array instead of appended. -- The query will start in the `status === 'success'` state -- The query will not automatically fetch on mount -- The query will not automatically refetch due to rerenders, new instances appearing, or changes to its query key or variables. +## Scroll Restoration + +Out of the bx, "scroll restoration" for all queries (including paginated and infinite queries) Just Works™️ in React Query. The reason for this is that query results are cached and able to be retrieved synchronously when a query is rendered. As long as your queries are being cached long enough (the default time is 5 minutes)o and have not been garbage collected, scroll restoration will work out of the box all the time. + +## Disabling or Pausing a Query -> Pro Tip #1: Because manual queries start in the `status === 'success'` state, you should consider supplying an `initialData` option to pre-populate the cache or similarly use a default parameter value when destructuring the query result +If you ever want to disable a query from automatically running, you can use the `enabled = false` option. -> Pro Tip #2: Don't use `manual` for dependent queries. Use [Dependent Queries](#dependent-queries) instead! +When `enabled` is `false`: + +- If the query has cached data + - The query will initialized in the `status === 'success' or`isSuccess === true` state. +- If the query does not have cached data + - The query will start in the `status === 'idle'` or `isIdle === true` state. +- The query will not automatically fetch on mount. +- The query will not automatically refetch in the background due to rerenders or new instances appearing. ```js function Todos() { - const { status, data, error, refetch, isFetching } = useQuery( - 'todos', - fetchTodoList, - { - manual: true, - initialData: [], - } - ) + const { + isIdle, + isLoading, + isError, + data, + error, + refetch, + isFetching, + } = useQuery('todos', fetchTodoList, { + enabled: false, + }) return ( <> - {status === 'loading' ? ( + {isIdle ? ( + 'Not ready...' + ) : isLoading ? ( Loading... - ) : status === 'error' ? ( + ) : isError ? ( Error: {error.message} ) : ( - // `status === 'success'` will be the initial state, so we need - // account for our initial data (an empty array) <>
{isFetching ? 'Fetching...' : null}
@@ -777,7 +775,7 @@ function Todos() { ## Retries -When a `useQuery` query fails (the function throws an error), React Query will automatically retry the query if that query's request has not reached the max number of consecutive retries (defaults to `3`) or a function is provided to determine if a retry is allowed. +When a `useQuery` query fails (the query function throws an error), React Query will automatically retry the query if that query's request has not reached the max number of consecutive retries (defaults to `3`) or a function is provided to determine if a retry is allowed. You can configure retries both on a global level and an individual query level. @@ -790,7 +788,7 @@ You can configure retries both on a global level and an individual query level. import { useQuery } from 'react-query' // Make specific query retry a certain number of times -const { status, data, error } = useQuery(['todos', 1], fetchTodoListPage, { +const queryInfo = useQuery(['todos', 1], fetchTodoListPage, { retry: 10, // Will retry failed requests 10 times before displaying an error }) ``` @@ -806,7 +804,9 @@ The default `retryDelay` is set to double (starting at `1000`ms) with each attem import { ReactQueryConfigProvider } from 'react-query' const queryConfig = { - retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), + queries: { + retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), + }, } function App() { @@ -821,7 +821,7 @@ function App() { Though it is not recommended, you can obviously override the `retryDelay` function/integer in both the Provider and individual query options. If set to an integer instead of a function the delay will always be the same amount of time: ```js -const { status, data, error } = useQuery('todos', fetchTodoList, { +const queryInfo = useQuery('todos', fetchTodoList, { retryDelay: 1000, // Will always wait 1000ms to retry, regardless of how many retries }) ``` @@ -843,7 +843,17 @@ const prefetchTodos = async () => { The next time a `useQuery` instance is used for a prefetched query, it will use the cached data! If no instances of `useQuery` appear for a prefetched query, it will be deleted and garbage collected after the time specified in `cacheTime`. -Alternatively, if you already have the data for your query synchronously available, you can use the [Query Cache's `setQueryData` method](#querycachesetquerydata) to directly add or update a query's cached result. +If a prefetched query is rendered after the `staleTime` for a prefetched query, it will still render, but will be automatically refetched in the background! Cool right?! + +## Manually Priming a Query + +Alternatively, if you already have the data for your query synchronously available, you don't need to prefetch it. You can just use the [Query Cache's `setQueryData` method](#querycachesetquerydata) to directly add or update a query's cached result. + +```js +import { queryCache } from 'react-query' + +queryCache.setQueryData('todos', todos) +``` ## Initial Data @@ -852,7 +862,7 @@ There may be times when you already have the initial data for a query synchronou When providing an `initialData` value that is anything other than `undefined`: - The query `status` will initialize as `success` instead of `loading` -- The query's `isStale` property will initialize as `true` instead of false +- The query's `isStale` property will initialize as `false` instead of `true` - The query will not automatically fetch until it is invalidated somehow (eg. window refocus, queryCache refetching, etc) ```js @@ -917,11 +927,12 @@ function Todo({ todoId }) { When using SSR (server-side-rendering) with React Query there are a few things to note: -- Query caches are not written to memory during SSR. This is outside of the scope of React Query and easily leads to out-of-sync data when used with frameworks like Next.js or other SSR strategies. +- If you import and use the global `queryCache` directly, queries are not cached during SSR to avoid leaking sensitive information between requests. +- If you create a `queryCache` manually with `makeQueryCache`, queries will be cached during SSR. Make sure you create a separate cache per request to avoid leaking data. - Queries rendered on the server will by default use the `initialData` of an unfetched query. This means that by default, `data` will be set to `undefined`. To get around this in SSR, you can either pre-seed a query's cache data using the `config.initialData` option: ```js -const { status, data, error } = useQuery('todos', fetchTodoList, { +const queryInfo = useQuery('todos', fetchTodoList, { initialData: [{ id: 0, name: 'Implement SSR!' }], }) @@ -941,6 +952,8 @@ The query's state will still reflect that it is stale and has not been fetched y ## Suspense Mode +> NOTE: Suspense mode for React Query is experimental, same as Suspense for data fetchign itself. These APIs WILL change and should not be used in production unless you lock both your React and React Query versions to patch-level versions that are compatible with each other. + React Query can also be used with React's new Suspense for Data Fetching API's. To enable this mode, you can set either the global or query level config's `suspense` option to `true`. Global configuration: @@ -1059,6 +1072,15 @@ const PingPong = () => { } ``` +Just as with `useQuery` you can also use booleans if you'd like: + +```js +const [ + mutate, + { isIdle, isLoading, isError, isSuccess, data, error }, +] = useMutation(pingMutation) +``` + Mutations without variables are not that useful, so let's add some variables to closer match reality. ## Mutation Variables @@ -1102,7 +1124,7 @@ const CreateTodo = () => { } ``` -Even with just variables, mutations aren't all that special, but when used with the `onSuccess` option, the [Query Cache's `refetchQueries` method](#querycacherefetchqueries) and the [Query Cache's `setQueryData` method](#querycachesetquerydata), mutations become a very powerful tool. +Even with just variables, mutations aren't all that special, but when used with the `onSuccess` option, the [Query Cache's `invalidateQueries` method](#querycacherefetchqueries) and the [Query Cache's `setQueryData` method](#querycachesetquerydata), mutations become a very powerful tool. Note that since version 1.1.0, the `mutate` function is no longer called synchronously so you cannot use it in an event callback. If you need to access the event in `onSubmit` you need to wrap `mutate` in another function. This is due to [React event pooling](https://reactjs.org/docs/events.html#event-pooling). @@ -1131,155 +1153,165 @@ const CreateTodo = () => { } ``` -## Invalidate and Refetch Queries from Mutations +## Invalidating and Refetching Queries -When a mutation succeeds, it's likely that other queries in your application need to update. Where other libraries that use normalized caches would attempt to update local queries with the new data imperatively, React Query helps you to avoid the manual labor that comes with maintaining normalized caches and instead prescribes **atomic updates and refetching** instead of direct cache manipulation. - -For example, assume we have a mutation to post a new todo: +Waiting for queries to become stale before they are fetched again doesn't always work, especially when you know for a fact that a query needs to get refetched. For that purpose, the `queryCache` has an `invalidateQueries` method that lets you manually mark queries as stale and potentially refetch them too! ```js -const [mutate] = useMutation(postTodo) +import { queryCache } from 'react-query' + +queryCache.invalidateQueries('todos') ``` -When a successful `postTodo` mutation happens, we likely want all `todos` queries to get refetched to show the new todo item. To do this, you can use `useMutation`'s `onSuccess` options and the `queryCache`'s `refetchQueries`: +> Note: Where other libraries that use normalized caches would attempt to update local queries with the new data imperatively, React Query gives you the tools to avoid the manual labor that comes with maintaining normalized caches and instead prescribes **invalidation, background-refetching and ultimately atomic updates**. -```js -import { useMutation, queryCache } from 'react-query' +When a query is invalidated with `invalidateQueries`, two things happen: -// When this mutation succeeds, refetch any queries with the `todos` or `reminders` query key -const [mutate] = useMutation(addTodo, { - onSuccess: () => { - queryCache.refetchQueries('todos') - queryCache.refetchQueries('reminders') - }, -}) +- It is marked as stale, regardless of its `staleTime` configuration +- If the query is active (rendered via `useQuery` and friends), it will also be refetched in the background + +## Query Matching with `invalidateQueries` -mutate(todo) +When using APIs like `invalidateQueries` and `removeQueries` (and others that support partial query matching), you can match multiple queries by their prefix, or get really specific and match an exact query. -// The 3 queries below will be refetched when the mutation above succeeds +In this example, we can use the `todos` prefix to invalidate any queries that start with `todos` in their query key: + +```js +import { queryCache, useQuery } from 'react-query' + +queryCache.invalidateQueries('todos') + +// Both queries below will be invalidated const todoListQuery = useQuery('todos', fetchTodoList) const todoListQuery = useQuery(['todos', { page: 1 }], fetchTodoList) -const remindersQuery = useQuery('reminders', fetchReminders) ``` -You can even refetch queries with specific variables by passing a more specific query key to the `refetchQueries` method: +You can even invalidate queries with specific variables by passing a more specific query key to the `invalidateQueries` method: ```js -const [mutate] = useMutation(addTodo, { - onSuccess: () => { - queryCache.refetchQueries(['todos', { type: 'done' }]) - }, -}) - -mutate(todo) +queryCache.invalidateQueries(['todos', { type: 'done' }]) -// The query below will be refetched when the mutation above succeeds +// The query below will be invalidated const todoListQuery = useQuery(['todos', { type: 'done' }], fetchTodoList) -// However, the following query below will NOT be refetched +// However, the following query below will NOT be invalidated const todoListQuery = useQuery('todos', fetchTodoList) ``` -The `refetchQueries` API is very flexible, so even if you want to **only** refetch `todos` queries that don't have any more variables or subkeys, you can pass an `exact: true` option to the `refetchQueries` method: +The `invalidateQueries` API is very flexible, so even if you want to **only** invalidate `todos` queries that don't have any more variables or subkeys, you can pass an `exact: true` option to the `invalidateQueries` method: ```js -const [mutate] = useMutation(addTodo, { - onSuccess: () => { - queryCache.refetchQueries('todos', { exact: true }) - }, -}) - -mutate(todo) +queryCache.invalidateQueries('todos', { exact: true }) -// The query below will be refetched when the mutation above succeeds +// The query below will be invalidated const todoListQuery = useQuery(['todos'], fetchTodoList) -// However, the following query below will NOT be refetched +// However, the following query below will NOT be invalidated const todoListQuery = useQuery(['todos', { type: 'done' }], fetchTodoList) ``` -If you find yourself wanting **even more** granularity, you can pass a predicate function to the `refetchQueries` method. This function will receive each query object from the queryCache and allow you to return `true` or `false` for whether you want to refetch that query: +If you find yourself wanting **even more** granularity, you can pass a predicate function to the `invalidateQueries` method. This function will receive each query object from the queryCache and allow you to return `true` or `false` for whether you want to invalidate that query: ```js -const [mutate] = useMutation(addTodo, { - onSuccess: () => { - queryCache.refetchQueries( - query => query.queryKey[0] === 'todos' && query.queryKey[1]?.version >= 10 - ) - }, -}) - -mutate(todo) +queryCache.invalidateQueries( + query => query.queryKey[0] === 'todos' && query.queryKey[1]?.version >= 10 +) -// The query below will be refetched when the mutation above succeeds +// The query below will be invalidated const todoListQuery = useQuery(['todos', { version: 20 }], fetchTodoList) -// The query below will be refetched when the mutation above succeeds +// The query below will be invalidated const todoListQuery = useQuery(['todos', { version: 10 }], fetchTodoList) -// However, the following query below will NOT be refetched +// However, the following query below will NOT be invalidated const todoListQuery = useQuery(['todos', { version: 5 }], fetchTodoList) ``` -If you prefer that the promise returned from `mutate()` only resolves **after** the `onSuccess` callback, you can return a promise in the `onSuccess` callback: +## Using Mutations to Invalidate Queries + +Invalidating queries is only half the battle. Knowing **when** to invalidate them is the other half. Usually when a mutation in your app succeeds, it's VERY likely that there are related queries in your application that need to be invalidated and possibly refetched to account for the new changes from your mutation. + +For example, assume we have a mutation to post a new todo: + +```js +const [mutate] = useMutation(postTodo) +``` + +When a successful `postTodo` mutation happens, we likely want all `todos` queries to get invalidated and possibly refetched to show the new todo item. To do this, you can use `useMutation`'s `onSuccess` options and the `queryCache`'s `invalidateQueries` function: ```js +import { useMutation, queryCache } from 'react-query' + +// When this mutation succeeds, invalidate any queries with the `todos` or `reminders` query key const [mutate] = useMutation(addTodo, { - onSuccess: () => - // return a promise! - queryCache.refetchQueries( - query => query.queryKey[0] === 'todos' && query.queryKey[1]?.version >= 10 - ), + onSuccess: () => { + queryCache.invalidateQueries('todos') + queryCache.invalidateQueries('reminders') + }, }) - -const run = async () => { - try { - await mutate(todo) - console.log('I will only log after onSuccess is done!') - } catch {} -} ``` -If you would like to refetch queries on error or even regardless of a mutation's success or error, you can use the `onError` or `onSettled` callbacks: +You can wire up your invalidations to happen using any of the following side-effect callbacks: ```js const [mutate] = useMutation(addTodo, { - onError: error => { - // Refetch queries or more... + onError: () => { + // An error happened! }, - onSettled: (data, error) => { - // Refetch queries or more... + onSuccess: () => { + // Boom baby! + }, + onSettled: () => { + // Error or success... doesn't matter! }, }) +``` + +The promise returned by `mutate()` can be helpful as well for performing more granualar control flow in your app, and if you prefer that that promise only resolves **after** the `onSuccess` or `onSettled` callbacks, you can return a promise in either!: + +```js +const [mutate] = useMutation(addTodo, { + onSuccess: async () => { + console.log("I'm first!") + }), + onSettled: async () => { + console.log("I'm second!") + }) +}) -mutate(todo) +const run = async () => { + try { + await mutate(todo) + console.log("I'm third!") + } catch {} +} ``` -You might find that you want to **add on** to some of the `useMutation`'s options at the time of calling `mutate`. To do that, you can provide any of the same options to the `mutate` function after your mutation variable. Supported option overrides include: +You might find that you want to **add additional side-effects** to some of the `useMutation` lifecycle at the time of calling `mutate`. To do that, you can provide any of the same callback options to the `mutate` function after your mutation variable. Supported option overrides include: -- `onSuccess` - Will be fired before the `useMutation`-level `onSuccess` handler -- `onError` - Will be fired before the `useMutation`-level `onError` handler -- `onSettled` - Will be fired before the `useMutation`-level `onSettled` handler +- `onSuccess` - Will be fired after the `useMutation`-level `onSuccess` handler +- `onError` - Will be fired after the `useMutation`-level `onError` handler +- `onSettled` - Will be fired after the `useMutation`-level `onSettled` handler - `throwOnError` ```js const [mutate] = useMutation(addTodo, { onSuccess: (data, mutationVariables) => { - // I will fire second + // I will fire first }, onSettled: (data, error, mutationVariables) => { - // I will fire second + // I will fire first }, onError: (error, mutationVariables) => { - // I will fire second + // I will fire first }, }) mutate(todo, { onSuccess: (data, mutationVariables) => { - // I will fire first! + // I will fire second! }, onSettled: (data, error, mutationVariables) => { - // I will fire first! + // I will fire second! }, onError: (error, mutationVariables) => { - // I will fire first! + // I will fire second! }, throwOnError: true, }) @@ -1392,7 +1424,7 @@ useMutation(updateTodo, { onError: (err, newTodo, rollback) => rollback(), // Always refetch after error or success: onSettled: () => { - queryCache.refetchQueries('todos') + queryCache.invalidateQueries('todos') }, }) ``` @@ -1419,7 +1451,7 @@ useMutation(updateTodo, { onError: (err, newTodo, rollback) => rollback(), // Always refetch after error or success: onSettled: () => { - queryCache.refetchQueries(['todos', newTodo.id]) + queryCache.invalidateQueries(['todos', newTodo.id]) }, }) ``` @@ -1484,10 +1516,10 @@ function GlobalLoadingIndicator() { # Window-Focus Refetching -If a user leaves your application and returns to stale data, you may want to trigger an update in the background to update any stale queries. Thankfully, **React Query does this automatically for you**, but if you choose to disable it, you can use the `ReactQueryConfigProvider`'s `refetchAllOnWindowFocus` option to disable it: +If a user leaves your application and returns to stale data, you may want to trigger an update in the background to update any stale queries. Thankfully, **React Query does this automatically for you**, but if you choose to disable it, you can use the `ReactQueryConfigProvider`'s `refetchOnWindowFocus` option to disable it: ```js -const queryConfig = { refetchAllOnWindowFocus: false } +const queryConfig = { queries: { refetchOnWindowFocus: false } } function App() { return ( @@ -1529,9 +1561,9 @@ import onWindowFocus from './onWindowFocus' // The gist above setFocusHandler(onWindowFocus) // Boom! ``` -# Custom Query Key Serializers (Experimental) +# Custom Query Key Serializers (Super-duper Advanced) -> **WARNING:** This is an advanced and experimental feature. There be dragons here. Do not change the Query Key Serializer unless you know what you are doing and are fine with encountering edge cases in React Query's API +> **WARNING:** This is a very advanced feature. There be dragons here. Do not change the Query Key Serializer unless you know what you are doing and are fine with encountering edge cases in React Query's API
Show Me The Dragons! @@ -1754,27 +1786,32 @@ To see a demo, [check out the Sandbox example!](https://codesandbox.io/s/github/ ```js const { status, + isIdle, + isLoading, + isSuccess, + isError, data, error, isFetching, failureCount, refetch, -} = useQuery(queryKey, [, queryVariables], queryFn, { - manual, +} = useQuery(queryKey, queryFn, { + suspense, + queryKeySerializerFn, + enabled, retry, retryDelay, - staleTime + staleTime, cacheTime, - refetchInterval, - refetchIntervalInBackground, refetchOnWindowFocus, - onSuccess, + refetchInterval, + queryFnParamsFilter, + refetchOnMount, + isDataEqual, onError, + onSuccess, onSettled, - suspense, - initialData, - refetchOnMount, - queryFnParamsFilter + useErrorBoundary, }) // or using the object syntax @@ -1782,35 +1819,26 @@ const { const queryInfo = useQuery({ queryKey, queryFn, - variables, - config + config, }) ``` ### Options -- `queryKey: String | [String, Variables: Object] | falsy | Function => queryKey` +- `queryKey: String | [String, ...any] | falsy` - **Required** - The query key to use for this query. - If a string is passed, it will be used as the query key. - - If a `[String, Object]` tuple is passed, they will be serialized into a stable query key. See [Query Keys](#query-keys) for more information. - - If a falsy value is passed, the query will be disabled and not run automatically. - - If a function is passed, it should resolve to any other valid query key type. If the function throws, the query will be disabled and not run automatically. - - The query will automatically update when this key changes (if the key is not falsy and if `manual` is not set to `true`). - - `Variables: Object` - - If a tuple with variables is passed, this object should be **serializable**. - - Nested arrays and objects are supported. - - The order of object keys is sorted to be stable before being serialized into the query key. + - If a `[String, ...any]` array is passed, each item will be serialized into a stable query key. See [Query Keys](#query-keys) for more information. + - The query will automatically update when this key changes (as long as `enabled` is not set to `false`). - `queryFn: Function(variables) => Promise(data/error)` - **Required** - The function that the query will use to request data. - Receives the following variables in the order that they are provided: - Query Key Variables - - Optional Query Variables passed after the key and before the query function - Must return a promise that will either resolves data or throws an error. -- `manual: Boolean` - - Set this to `true` to disable automatic refetching when the query mounts or changes query keys. - - To refetch the query, use the `refetch` method returned from the `useQuery` instance. +- `enabled: Boolean` + - Set this to `false` to disable this query from automatically running. - `retry: Boolean | Int | Function(failureCount, error) => shouldRetry | Boolean` - If `false`, failed queries will not retry by default. - If `true`, failed queries will retry infinitely. @@ -1833,8 +1861,8 @@ const queryInfo = useQuery({ - If set to `true`, queries that are set to continuously refetch with a `refetchInterval` will continue to refetch while their tab/window is in the background - `refetchOnWindowFocus: Boolean` - Optional - - Set this to `false` to disable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `true`). - - Set this to `true` to enable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `false`. + - Set this to `false` to disable automatic refetching on window focus (useful, when `refetchOnWindowFocus` is set to `true`). + - Set this to `true` to enable automatic refetching on window focus (useful, when `refetchOnWindowFocus` is set to `false`. - `onSuccess: Function(data) => data` - Optional - This function will fire any time the query successfully fetches new data. @@ -1866,9 +1894,18 @@ const queryInfo = useQuery({ - `status: String` - Will be: - - `loading` if the query is in an initial loading state. This means there is no cached data and the query is currently fetching, eg `isFetching === true`) + - `idle` if the query is idle. This only happens if a query is initialized with `enabled: false` and no inital data is available. + - `loading` if the query is in a "hard" loading state. This means there is no cached data and the query is currently fetching, eg `isFetching === true` - `error` if the query attempt resulted in an error. The corresponding `error` property has the error received from the attempted fetch - `success` if the query has received a response with no errors and is ready to display its data. The corresponding `data` property on the query is the data received from the successful fetch or if the query is in `manual` mode and has not been fetched yet `data` is the first `initialData` supplied to the query on initialization. +- `isIdle: Boolean` + - A derived boolean from the `status` variable above, provided for convenience. +- `isLoading: Boolean` + - A derived boolean from the `status` variable above, provided for convenience. +- `isSuccess: Boolean` + - A derived boolean from the `status` variable above, provided for convenience. +- `isError: Boolean` + - A derived boolean from the `status` variable above, provided for convenience. - `data: Any` - Defaults to `undefined`. - The last successfully resolved data for the query. @@ -1891,107 +1928,23 @@ const queryInfo = useQuery({ ```js const { - status, + data = undefined, resolvedData, latestData, - error, - isFetching, - failureCount, - refetch, -} = usePaginatedQuery(queryKey, [, queryVariables], queryFn, { - manual, - retry, - retryDelay, - staleTime - cacheTime, - refetchInterval, - refetchIntervalInBackground, - refetchOnWindowFocus, - onSuccess, - onError, - suspense, - initialData, - refetchOnMount -}) + ...queryInfo +} = usePaginatedQuery(queryKey, queryFn, options) ``` ### Options -- `queryKey: String | [String, Variables: Object] | falsy | Function => queryKey` - - **Required** - - The query key to use for this query. - - If a string is passed, it will be used as the query key. - - If a `[String, Object]` tuple is passed, they will be serialized into a stable query key. See [Query Keys](#query-keys) for more information. - - If a falsy value is passed, the query will be disabled and not run automatically. - - If a function is passed, it should resolve to any other valid query key type. If the function throws, the query will be disabled and not run automatically. - - The query will automatically update when this key changes (if the key is not falsy and if `manual` is not set to `true`). - - `Variables: Object` - - If a tuple with variables is passed, this object should be **serializable**. - - Nested arrays and objects are supported. - - The order of object keys is sorted to be stable before being serialized into the query key. -- `queryFn: Function(variables) => Promise(data/error)` - - **Required** - - The function that the query will use to request data. - - Receives the following variables in the order that they are provided: - - Query Key Variables - - Optional Query Variables passed after the key and before the query function - - Must return a promise that will either resolves data or throws an error. -- `manual: Boolean` - - Set this to `true` to disable automatic refetching when the query mounts or changes query keys. - - To refetch the query, use the `refetch` method returned from the `useQuery` instance. -- `retry: Boolean | Int | Function(failureCount, error) => shouldRetry | Boolean` - - If `false`, failed queries will not retry by default. - - If `true`, failed queries will retry infinitely. - - If set to an `Int`, e.g. `3`, failed queries will retry until the failed query count meets that number. -- `retryDelay: Function(retryAttempt: Int) => Int` - - This function receives a `retryAttempt` integer and returns the delay to apply before the next attempt in milliseconds. - - A function like `attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000)` applies exponential backoff. - - A function like `attempt => attempt * 1000` applies linear backoff. -- `staleTime: Int | Infinity` - - The time in milliseconds that cache data remains fresh. After a successful cache update, that cache data will become stale after this duration. - - If set to `Infinity`, query will never go stale -- `cacheTime: Int | Infinity` - - The time in milliseconds that unused/inactive cache data remains in memory. When a query's cache becomes unused or inactive, that cache data will be garbage collected after this duration. - - If set to `Infinity`, will disable garbage collection -- `refetchInterval: false | Integer` - - Optional - - If set to a number, all queries will continuously refetch at this frequency in milliseconds -- `refetchIntervalInBackground: Boolean` - - Optional - - If set to `true`, queries that are set to continuously refetch with a `refetchInterval` will continue to refetch while their tab/window is in the background -- `refetchOnWindowFocus: Boolean` - - Optional - - Set this to `false` to disable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `true`). - - Set this to `true` to enable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `false`. -- `onSuccess: Function(data) => data` - - Optional - - This function will fire any time the query successfully fetches new data and will be passed the new data as a parameter -- `onError: Function(error) => void` - - Optional - - This function will fire if the query encounters an error and will be passed the error. -- `onSettled: Function(data, error) => data` - - Optional - - This function will fire any time the query is either successfully fetched or errors and be passed either the data or error -- `suspense: Boolean` - - Optional - - Set this to `true` to enable suspense mode. - - When `true`, `useQuery` will suspend when `status === 'loading'` - - When `true`, `useQuery` will throw runtime errors when `status === 'error'` -- `initialData: any` - - Optional - - If set, this value will be used as the initial data for the query cache (as long as the query hasn't been created or cached yet) -- `refetchOnMount: Boolean` - - Optional - - Defaults to `true` - - If set to `false`, will disable additional instances of a query to trigger background refetches +The options for `usePaginatedQuery` are identical to the [`useQuery` hook](#options) ### Returns -- `status: String` - - Will be: - - `loading` if the query is in an initial loading state. This means there is no cached data and the query is currently fetching, eg `isFetching === true`) - - `error` if the query attempt resulted in an error. The corresponding `error` property has the error received from the attempted fetch - - `success` if the query has received a response with no errors and is ready to display its data. The corresponding `data` property on the query is the data received from the successful fetch or if the query is in `manual` mode and has not been fetched yet `data` is the first `initialData` supplied to the query on initialization. +The returned properties for `usePaginatedQuery` are identical to the [`useQuery` hook](#options), with the addition of the following: + +- `data: undefined` + - The standard `data` property is not used for paginated queries and is replaced by the `resolvedData` and `latestData` options below. - `resolvedData: Any` - Defaults to `undefined`. - The last successfully resolved data for the query. @@ -2000,154 +1953,38 @@ const { - Defaults to `undefined`. - The actual data object for this query and its specific query key - When fetching an uncached query, this value will be `undefined` -- `error: null | Error` - - Defaults to `null` - - The error object for the query, if an error was thrown. -- `isFetching: Boolean` - - Defaults to `true` so long as `manual` is set to `false` - - Will be `true` if the query is currently fetching, including background fetching. -- `failureCount: Integer` - - The failure count for the query. - - Incremented every time the query fails. - - Reset to `0` when the query succeeds. -- `refetch: Function({ force, throwOnError }) => void` - - A function to manually refetch the query if it is stale. - - To bypass the stale check, you can pass the `force: true` option and refetch it regardless of it's freshness - - If the query errors, the error will only be logged. If you want an error to be thrown, pass the `throwOnError: true` option ## `useInfiniteQuery` ```js -const queryFn = (...queryKey, fetchMoreVariable) => Promise +const queryFn = (...queryKey, fetchMoreVariable) // => Promise const { - status, - data, - error, - isFetching, - failureCount, - refetch, + isFetchingMore, fetchMore, canFetchMore, -} = useInfiniteQuery(queryKey, [, queryVariables], queryFn, { + ...queryInfo +} = useInfiniteQuery(queryKey, queryFn, { + ...queryOptions, getFetchMore: (lastPage, allPages) => fetchMoreVariable - manual, - retry, - retryDelay, - staleTime - cacheTime, - refetchInterval, - refetchIntervalInBackground, - refetchOnWindowFocus, - onSuccess, - onError, - suspense, - initialData, - refetchOnMount }) ``` ### Options -- `queryKey: String | [String, Variables: Object] | falsy | Function => queryKey` - - **Required** - - The query key to use for this query. - - If a string is passed, it will be used as the query key. - - If a `[String, Object]` tuple is passed, they will be serialized into a stable query key. See [Query Keys](#query-keys) for more information. - - If a falsy value is passed, the query will be disabled and not run automatically. - - If a function is passed, it should resolve to any other valid query key type. If the function throws, the query will be disabled and not run automatically. - - The query will automatically update when this key changes (if the key is not falsy and if `manual` is not set to `true`). - - `Variables: Object` - - If a tuple with variables is passed, this object should be **serializable**. - - Nested arrays and objects are supported. - - The order of object keys is sorted to be stable before being serialized into the query key. -- `queryFn: Function(variables) => Promise(data/error)` - - **Required** - - The function that the query will use to request data. - - Receives the following variables in the order that they are provided: - - Query Key Variables - - Optional Query Variables passed after the key and before the query function - - Optionally, the single variable returned from the `getFetchMore` function, used to fetch the next page - - Must return a promise that will either resolves data or throws an error. +The options for `usePaginatedQuery` are identical to the [`useQuery` hook](#options) with the addition of the following: + - `getFetchMore: Function(lastPage, allPages) => fetchMoreVariable | Boolean` - When new data is received for this query, this function receives both the last page of the infinite list of data and the full array of all pages. - It should return a **single variable** that will be passed as the last optional parameter to your query function -- `manual: Boolean` - - Set this to `true` to disable automatic refetching when the query mounts or changes query keys. - - To refetch the query, use the `refetch` method returned from the `useQuery` instance. -- `retry: Boolean | Int | Function(failureCount, error) => shouldRetry | Boolean` - - If `false`, failed queries will not retry by default. - - If `true`, failed queries will retry infinitely. - - If set to an `Int`, e.g. `3`, failed queries will retry until the failed query count meets that number. -- `retryDelay: Function(retryAttempt: Int) => Int` - - This function receives a `retryAttempt` integer and returns the delay to apply before the next attempt in milliseconds. - - A function like `attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000)` applies exponential backoff. - - A function like `attempt => attempt * 1000` applies linear backoff. -- `staleTime: Int | Infinity` - - The time in milliseconds that cache data remains fresh. After a successful cache update, that cache data will become stale after this duration. - - If set to `Infinity`, query will never go stale -- `cacheTime: Int | Infinity` - - The time in milliseconds that unused/inactive cache data remains in memory. When a query's cache becomes unused or inactive, that cache data will be garbage collected after this duration. - - If set to `Infinity`, will disable garbage collection -- `refetchInterval: false | Integer` - - Optional - - If set to a number, all queries will continuously refetch at this frequency in milliseconds -- `refetchIntervalInBackground: Boolean` - - Optional - - If set to `true`, queries that are set to continuously refetch with a `refetchInterval` will continue to refetch while their tab/window is in the background -- `refetchOnWindowFocus: Boolean` - - Optional - - Set this to `false` to disable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `true`). - - Set this to `true` to enable automatic refetching on window focus (useful, when `refetchAllOnWindowFocus` is set to `false`. -- `onSuccess: Function(data) => data` - - Optional - - This function will fire any time the query successfully fetches new data. -- `onError: Function(err) => void` - - Optional - - This function will fire if the query encounters an error and will be passed the error. -- `onSettled: Function(data, error) => data` - - Optional - - This function will fire any time the query is either successfully fetched or errors and be passed either the data or error -- `suspense: Boolean` - - Optional - - Set this to `true` to enable suspense mode. - - When `true`, `useQuery` will suspend when `status === 'loading'` - - When `true`, `useQuery` will throw runtime errors when `status === 'error'` -- `initialData: any` - - Optional - - If set, this value will be used as the initial data for the query cache (as long as the query hasn't been created or cached yet) -- `refetchOnMount: Boolean` - - Optional - - Defaults to `true` - - If set to `false`, will disable additional instances of a query to trigger background refetches ### Returns -- `status: String` - - Will be: - - `loading` if the query is in an initial loading state. This means there is no cached data and the query is currently fetching, eg `isFetching === true`) - - `error` if the query attempt resulted in an error. The corresponding `error` property has the error received from the attempted fetch - - `success` if the query has received a response with no errors and is ready to display its data. The corresponding `data` property on the query is the data received from the successful fetch or if the query is in `manual` mode and has not been fetched yet `data` is the first `initialData` supplied to the query on initialization. -- `data: Any` - - Defaults to `[]`. - - This array contains each "page" of data that has been requested -- `error: null | Error` - - Defaults to `null` - - The error object for the query, if an error was thrown. -- `isFetching: Boolean` - - Defaults to `true` so long as `manual` is set to `false` - - Will be `true` if the query is currently fetching, including background fetching. +The returned properties for `usePaginatedQuery` are identical to the [`useQuery` hook](#options), with the addition of the following: + - `isFetchingMore: Boolean` - If using `paginated` mode, this will be `true` when fetching more results using the `fetchMore` function. -- `failureCount: Integer` - - The failure count for the query. - - Incremented every time the query fails. - - Reset to `0` when the query succeeds. -- `refetch: Function({ force, throwOnError }) => void` - - A function to manually refetch the query if it is stale. - - To bypass the stale check, you can pass the `force: true` option and refetch it regardless of it's freshness - - If the query errors, the error will only be logged. If you want an error to be thrown, pass the `throwOnError: true` option - `fetchMore: Function(fetchMoreVariableOverride) => Promise` - This function allows you to fetch the next "page" of results. - `fetchMoreVariableOverride` allows you to optionally override the fetch more variable returned from your `getCanFetchMore` option to your query function to retrieve the next page of results. @@ -2157,14 +1994,16 @@ const { ## `useMutation` ```js -const [mutate, { status, data, error, reset }] = useMutation(mutationFn, { - onMutate +const [ + mutate, + { status, isIdle, isLoading, isSuccess, isError, data, error, reset }, +] = useMutation(mutationFn, { + onMutate, onSuccess, onError, onSettled, throwOnError, useErrorBoundary, - { ...selectedUseQueryOptions }, }) const promise = mutate(variables, { @@ -2207,8 +2046,6 @@ const promise = mutate(variables, { - `useErrorBoundary` - Defaults to the global query config's `useErrorBoundary` value, which is `false` - Set this to true if you want mutation errors to be thrown in the render phase and propagate to the nearest error boundary -- `selectedUseQueryOptions` - - _Selected_ options of `useQuery` are also applicable here. E.g. `retry` and `retryDelay` can be used as described in the [`useQuery` section](#usequery). _Documentation of these options will be improved in the future._ ### Returns @@ -2218,7 +2055,7 @@ const promise = mutate(variables, { - Optional - The variables object to pass to the `mutationFn`. - Remaining options extend the same options described above in the `useMutation` hook. - - Lifecycle callbacks defined here will fire **before** those of the same type defined in the `useMutation`-level options. + - Lifecycle callbacks defined here will fire **after** those of the same type defined in the `useMutation`-level options. - `status: String` - Will be: - `idle` initial status prior to the mutation function executing. @@ -2240,7 +2077,7 @@ The `queryCache` instance is the backbone of React Query that manages all of the - [`prefetchQuery`](#querycacheprefetchquery) - [`getQueryData`](#querycachegetquerydata) - [`setQueryData`](#querycachesetquerydata) -- [`refetchQueries`](#querycacherefetchqueries) +- [`invalidateQueries`](#querycacherefetchqueries) - [`cancelQueries`](#querycachecancelqueries) - [`removeQueries`](#querycacheremovequeries) - [`getQueries`](#querycachegetqueries) @@ -2251,38 +2088,43 @@ The `queryCache` instance is the backbone of React Query that manages all of the ## `queryCache.prefetchQuery` -`prefetchQuery` is an asynchronous function that can be used to fetch and cache a query response before it is needed or fetched with `useQuery`. +`prefetchQuery` is an asynchronous function that can be used to fetch and cache a query response before it is needed or rendered with `useQuery` and friends. -- If the query already exists and is fresh (not stale), the call will resolve immediately and no action will be taken. - - If you want to force the query to prefetch again, you can pass the `force: true` option in the query config -- If the query does not exist, it will be created and immediately be marked as stale. **If this created query is not utilized by a query hook in the `cacheTime` (defaults to 5 minutes), the query will be garbage collected**. +- If either: + - The query does not exist or + - The query exists but the data is stale + - The queryFn will be called, the data resolved, the cache populated and the data returned via promise. +- If you want to force the query to prefetch regardless of the data being stale, you can pass the `force: true` option in the options object +- If the query exists, and the data is NOT stale, the existing data in the cache will be returned via promise > The difference between using `prefetchQuery` and `setQueryData` is that `prefetchQuery` is async and will ensure that duplicate requests for this query are not created with `useQuery` instances for the same query are rendered while the data is fetching. ```js -import { queryCache } from 'react-query' - const data = await queryCache.prefetchQuery(queryKey, queryFn) ``` For convenience in syntax, you can also pass optional query variables to `prefetchQuery` just like you can `useQuery`: ```js -import { queryCache } from 'react-query' +const data = await queryCache.prefetchQuery(queryKey, queryFn, config) +``` -const data = await queryCache.prefetchQuery( - queryKey, - queryVariables, - queryFn, - config -) +To pass options like `force` or `throwOnError`, use the fourth options object: + +```js +const data = await queryCache.prefetchQuery(queryKey, queryFn, config, { + force: true, + throwOnError: true, +}) ``` ### Options -The options for `prefetchQuery` are exactly the same as those of [`useQuery`](#usequery) with the exception of: +The options for `prefetchQuery` are exactly the same as those of [`useQuery`](#usequery) with the exception of the last options object: -- `config.throwOnError: Boolean` +- `force: Boolean` + - Set this `true` if you want `prefetchQuery` to fetch the data even if the data exists and is NOT stale. +- `throwOnError: Boolean` - Set this `true` if you want `prefetchQuery` to throw an error when it encounters errors. ### Returns @@ -2319,7 +2161,7 @@ const data = queryCache.getQueryData(queryKey) ```js import { queryCache } from 'react-query' -queryCache.setQueryData(queryKey, updater) +queryCache.setQueryData(queryKey, updater, config) ``` ### Options @@ -2329,6 +2171,8 @@ queryCache.setQueryData(queryKey, updater) - `updater: Any | Function(oldData) => newData` - If non-function is passed, the data will be updated to this value - If a function is passed, it will receive the old data value and be expected to return a new one. +- `config: object` + - The standard query config object use in [`useQuery`](#usequery) ### Using an updater value @@ -2344,17 +2188,17 @@ For convenience in syntax, you can also pass an updater function which receives setQueryData(queryKey, oldData => newData) ``` -## `queryCache.refetchQueries` +## `queryCache.invalidateQueries` -The `refetchQueries` method can be used to refetch single or multiple queries in the cache based on their query keys or any other functionally accessible property/state of the query. By default, queries that are fresh (not stale) will not be refetched, but you can override this by passing the `force: true` option. +The `invalidateQueries` method can be used to invalidate and refetch single or multiple queries in the cache based on their query keys or any other functionally accessible property/state of the query. By default, all matching queries are immediately marked as stale and active queries are refetched in the background. If you don't want active queries to refetch, and simply be marked as stale, you can use the `refetchActive: false` option. ```js import { queryCache } from 'react-query' -const queries = queryCache.refetchQueries(inclusiveQueryKeyOrPredicateFn, { +const queries = queryCache.invalidateQueries(inclusiveQueryKeyOrPredicateFn, { exact, throwOnError, - force, + refetchActive, }) ``` @@ -2370,8 +2214,9 @@ const queries = queryCache.refetchQueries(inclusiveQueryKeyOrPredicateFn, { - If you don't want to search queries inclusively by query key, you can pass the `exact: true` option to return only the query with the exact query key you have passed. Remember to destructure it out of the array! - `throwOnError: Boolean` - When set to `true`, this function will throw if any of the query refetch tasks fail. -- `force: Boolean` - - When set to `true`, queries that match the refetch predicate will be refetched regardless if they are stale. +- `refetchActive: Boolean` + - Defaults to `true` + - When set to `false`, queries that match the refetch predicate and are actively being rendered via `useQuery` and friends will NOT be refetched in the background, and only marked as stale. ### Returns @@ -2563,26 +2408,36 @@ const isFetching = useIsFetching() import { ReactQueryConfigProvider } from 'react-query' const queryConfig = { - // Global - suspense: false, - useErrorBoundary: undefined, // Defaults to the value of `suspense` if not defined otherwise - throwOnError: false, - refetchAllOnWindowFocus: true, - queryKeySerializerFn: queryKey => [queryHash, queryFnArgs], - onMutate: () => {}, - onSuccess: () => {}, - onError: () => {}, - onSettled: () => {}, - - // useQuery - retry: 3, - retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), - staleTime: 0, - cacheTime: 5 * 60 * 1000, - refetchInterval: false, - queryFnParamsFilter: args => filteredArgs, - refetchOnMount: true, - isDataEqual: (previous, next) => true, // or false + shared: { + suspense: false, + queryKeySerializerFn: defaultQueryKeySerializerFn, + }, + queries: { + ...shared, + enabled: true, + retry: 3, + retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), + staleTime: 0, + cacheTime: 5 * 60 * 1000, + refetchOnWindowFocus: true, + refetchInterval: false, + queryFnParamsFilter: identity, + refetchOnMount: true, + isDataEqual: deepEqual, + onError: noop, + onSuccess: noop, + onSettled: noop, + useErrorBoundary: false, // falls back to suspense + }, + mutations: { + ...shared, + throwOnError: false, + onMutate: noop, + onError: noop, + onSuccess: noop, + onSettled: noop, + useErrorBoundary: false, // falls back to suspense + }, } function App() { @@ -2668,4 +2523,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! - + diff --git a/examples/auto-refetching/pages/api/data.js b/examples/auto-refetching/pages/api/data.js index 52c38f3485..1d05eedc93 100755 --- a/examples/auto-refetching/pages/api/data.js +++ b/examples/auto-refetching/pages/api/data.js @@ -1,7 +1,7 @@ // an simple endpoint for getting current list let list = ['Item 1', 'Item 2', 'Item 3'] -export default (req, res) => { +export default async (req, res) => { if (req.query.add) { if (!list.includes(req.query.add)) { list.push(req.query.add) @@ -9,5 +9,8 @@ export default (req, res) => { } else if (req.query.clear) { list = [] } + + await new Promise(r => setTimeout(r, 100)) + res.json(list) } diff --git a/examples/auto-refetching/pages/index.js b/examples/auto-refetching/pages/index.js index de272ab31f..6ef3797669 100755 --- a/examples/auto-refetching/pages/index.js +++ b/examples/auto-refetching/pages/index.js @@ -5,10 +5,11 @@ import axios from 'axios' import { useQuery, useMutation, queryCache } from 'react-query' -export default () => { +function App() { + const [intervalMs, setIntervalMs] = React.useState(1000) const [value, setValue] = React.useState('') - const { status, data, error } = useQuery( + const { status, data, error, isFetching } = useQuery( 'todos', async () => { const { data } = await axios.get('/api/data') @@ -16,19 +17,19 @@ export default () => { }, { // Refetch the data every second - refetchInterval: 1000, + refetchInterval: intervalMs, } ) const [mutateAddTodo] = useMutation( value => fetch(`/api/data?add=${value}`), { - onSuccess: () => queryCache.refetchQueries('todos'), + onSuccess: () => queryCache.invalidateQueries('todos'), } ) const [mutateClear] = useMutation(value => fetch(`/api/data?clear=1`), { - onSuccess: () => queryCache.refetchQueries('todos'), + onSuccess: () => queryCache.invalidateQueries('todos'), }) if (status === 'loading') return

Loading...

@@ -42,6 +43,27 @@ export default () => { multiple tabs to the same localhost server and see your changes propagate between the two.

+

Todo List

{ @@ -69,3 +91,10 @@ export default () => { ) } + +export default () => ( + <> + + + +) diff --git a/examples/basic/src/index.js b/examples/basic/src/index.js index b3e1745c67..ad0d08ee01 100644 --- a/examples/basic/src/index.js +++ b/examples/basic/src/index.js @@ -2,21 +2,7 @@ import React from "react"; import ReactDOM from "react-dom"; import axios from "axios"; -import { useQuery } from "react-query"; - -const getPosts = async () => { - const { data } = await axios.get( - "https://jsonplaceholder.typicode.com/posts" - ); - return data; -}; - -const getPostById = async (key, id) => { - const { data } = await axios.get( - `https://jsonplaceholder.typicode.com/posts/${id}` - ); - return data; -}; +import { useQuery, queryCache } from "react-query"; function App() { const [postId, setPostId] = React.useState(-1); @@ -42,8 +28,22 @@ function App() { ); } +// This function is not inline to show how query keys are passed to the query function +// Normally, you can inline them if you want. +const getPostById = async (key, id) => { + const { data } = await axios.get( + `https://jsonplaceholder.typicode.com/posts/${id}` + ); + return data; +}; + function Posts({ setPostId }) { - const { status, data, error, isFetching } = useQuery("posts", getPosts); + const { status, data, error, isFetching } = useQuery("posts", async () => { + const { data } = await axios.get( + "https://jsonplaceholder.typicode.com/posts" + ); + return data; + }); return (
@@ -58,7 +58,20 @@ function Posts({ setPostId }) {
{data.map(post => (

- setPostId(post.id)} href="#"> + setPostId(post.id)} + href="#" + style={ + // We can use the queryCache here to show bold links for + // ones that are cached + queryCache.getQueryData(["post", post.id]) + ? { + fontWeight: "bold", + color: "green" + } + : {} + } + > {post.title}

@@ -74,8 +87,11 @@ function Posts({ setPostId }) { function Post({ postId, setPostId }) { const { status, data, error, isFetching } = useQuery( - postId && ["post", postId], - getPostById + ["post", postId], + getPostById, + { + enabled: postId + } ); return ( diff --git a/examples/custom-hooks/src/index.js b/examples/custom-hooks/src/index.js index 4dcf7f6334..73296a5336 100644 --- a/examples/custom-hooks/src/index.js +++ b/examples/custom-hooks/src/index.js @@ -1,6 +1,7 @@ /* eslint-disable jsx-a11y/anchor-is-valid */ import React from "react"; import ReactDOM from "react-dom"; +import { queryCache } from "react-query"; import usePosts from "./hooks/usePosts"; import usePost from "./hooks/usePost"; @@ -41,7 +42,20 @@ function Posts({ setPostId }) {
{data.map(post => (

- setPostId(post.id)} href="#"> + setPostId(post.id)} + href="#" + style={ + // We can use the queryCache here to show bold links for + // ones that are cached + queryCache.getQueryData(["post", post.id]) + ? { + fontWeight: "bold", + color: "green" + } + : {} + } + > {post.title}

diff --git a/examples/focus-refetching/pages/index.js b/examples/focus-refetching/pages/index.js index 1cff2e2928..51b96ef810 100755 --- a/examples/focus-refetching/pages/index.js +++ b/examples/focus-refetching/pages/index.js @@ -10,11 +10,11 @@ export default () => { }) const [logoutMutation] = useMutation(logout, { - onSuccess: () => queryCache.refetchQueries('user'), + onSuccess: () => queryCache.invalidateQueries('user'), }) const [loginMutation] = useMutation(login, { - onSuccess: () => queryCache.refetchQueries('user'), + onSuccess: () => queryCache.invalidateQueries('user'), }) return ( diff --git a/examples/load-more-infinite-scroll/pages/api/projects.js b/examples/load-more-infinite-scroll/pages/api/projects.js index 6c78c3d3c4..6a578064c9 100755 --- a/examples/load-more-infinite-scroll/pages/api/projects.js +++ b/examples/load-more-infinite-scroll/pages/api/projects.js @@ -2,7 +2,7 @@ export default (req, res) => { const cursor = parseInt(req.query.cursor) || 0 - const data = Array(3) + const data = Array(5) .fill(0) .map((_, i) => { return { @@ -11,7 +11,7 @@ export default (req, res) => { } }) - const nextId = cursor < 9 ? data[data.length - 1].id + 1 : null + const nextId = cursor < 10 ? data[data.length - 1].id + 1 : null setTimeout(() => res.json({ data, nextId }), 1000) } diff --git a/examples/load-more-infinite-scroll/pages/index.js b/examples/load-more-infinite-scroll/pages/index.js index 68f01ecb1e..1538f3ed3e 100755 --- a/examples/load-more-infinite-scroll/pages/index.js +++ b/examples/load-more-infinite-scroll/pages/index.js @@ -51,7 +51,7 @@ export default () => { style={{ border: '1px solid gray', borderRadius: '5px', - padding: '5rem 1rem', + padding: '10rem 1rem', }} key={project.id} > diff --git a/examples/optimistic-updates/pages/index.js b/examples/optimistic-updates/pages/index.js index 5ddb88c52c..e5be38e43d 100755 --- a/examples/optimistic-updates/pages/index.js +++ b/examples/optimistic-updates/pages/index.js @@ -17,6 +17,7 @@ export default () => { // the old value and return it so that it's accessible in case of // an error onMutate: text => { + setText('') queryCache.cancelQueries('todos') const previousValue = queryCache.getQueryData('todos') @@ -31,11 +32,10 @@ export default () => { // On failure, roll back to the previous value onError: (err, variables, previousValue) => queryCache.setQueryData('todos', previousValue), - onSuccess: () => { - setText('') - }, // After success or failure, refetch the todos query - onSettled: () => queryCache.refetchQueries('todos'), + onSettled: () => { + queryCache.invalidateQueries('todos') + }, } ) diff --git a/examples/pagination/pages/index.js b/examples/pagination/pages/index.js index 632e92b65f..2618978329 100644 --- a/examples/pagination/pages/index.js +++ b/examples/pagination/pages/index.js @@ -1,29 +1,29 @@ -import React from "react"; -import axios from "axios"; -import { usePaginatedQuery, queryCache } from "react-query"; +import React from 'react' +import axios from 'axios' +import { usePaginatedQuery, queryCache } from 'react-query' function Todos() { - const [page, setPage] = React.useState(0); + const [page, setPage] = React.useState(0) const fetchProjects = React.useCallback(async (key, page = 0) => { - const { data } = await axios.get("/api/projects?page=" + page); - return data; - }, []); + const { data } = await axios.get('/api/projects?page=' + page) + return data + }, []) const { status, resolvedData, latestData, error, - isFetching - } = usePaginatedQuery(["projects", page], fetchProjects, {}); + isFetching, + } = usePaginatedQuery(['projects', page], fetchProjects, {}) // Prefetch the next page! React.useEffect(() => { if (latestData?.hasMore) { - queryCache.prefetchQuery(["projects", page + 1], fetchProjects); + queryCache.prefetchQuery(['projects', page + 1], fetchProjects) } - }, [latestData, fetchProjects, page]); + }, [latestData, fetchProjects, page]) return (
@@ -35,9 +35,9 @@ function Todos() { instantaneously while they are also refetched invisibly in the background.

- {status === "loading" ? ( + {status === 'loading' ? (
Loading...
- ) : status === "error" ? ( + ) : status === 'error' ? (
Error: {error.message}
) : ( // `resolvedData` will either resolve to the latest page's data @@ -54,7 +54,7 @@ function Todos() { disabled={page === 0} > Previous Page - {" "} + {' '}
- ); + ) } -export default Todos; +export default Todos diff --git a/examples/playground/src/index.js b/examples/playground/src/index.js index 93f1428c55..4a552e5ec1 100644 --- a/examples/playground/src/index.js +++ b/examples/playground/src/index.js @@ -45,8 +45,10 @@ function Root() { const queryConfig = React.useMemo( () => ({ - staleTime, - cacheTime + queries: { + staleTime, + cacheTime + } }), [cacheTime, staleTime] ); @@ -131,7 +133,7 @@ function App() { return (
-
@@ -193,7 +195,7 @@ function Todos({ initialFilter = "", setEditingIndex }) { Error: {error.message}
- +
) : ( <> @@ -227,8 +229,11 @@ function Todos({ initialFilter = "", setEditingIndex }) { function EditTodo({ editingIndex, setEditingIndex }) { // Don't attempt to query until editingIndex is truthy const { status, data, isFetching, error, failureCount, refetch } = useQuery( - editingIndex !== null && ["todo", { id: editingIndex }], - fetchTodoById + ["todo", { id: editingIndex }], + fetchTodoById, + { + enabled: editingIndex !== null + } ); const [todo, setTodo] = React.useState(data || {}); @@ -244,7 +249,7 @@ function EditTodo({ editingIndex, setEditingIndex }) { const [mutate, mutationState] = useMutation(patchTodo, { onSuccess: data => { // Update `todos` and the individual todo queries when this mutation succeeds - queryCache.refetchQueries("todos"); + queryCache.invalidateQueries("todos"); queryCache.setQueryData(["todo", { id: editingIndex }], data); } }); @@ -269,8 +274,7 @@ function EditTodo({ editingIndex, setEditingIndex }) { Loading... (Attempt: {failureCount + 1}) ) : error ? ( - Error!{" "} - + Error! ) : ( <> @@ -328,7 +332,7 @@ function AddTodo() { const [mutate, { status, error }] = useMutation(postTodo, { onSuccess: () => { - queryCache.refetchQueries("todos"); + queryCache.invalidateQueries("todos"); } }); diff --git a/examples/prefetching/pages/index.js b/examples/prefetching/pages/index.js index 284b9d4d8d..69dcfcba05 100755 --- a/examples/prefetching/pages/index.js +++ b/examples/prefetching/pages/index.js @@ -18,6 +18,7 @@ const getCharacter = async (key, selectedChar) => { } export default function App() { + const rerender = React.useReducer(d => d + 1)[1] const [selectedChar, setSelectedChar] = React.useState(1) const { data } = useQuery('characters', getCharacters) @@ -28,13 +29,16 @@ export default function App() { ) const prefetchNext = async id => { - queryCache.prefetchQuery(['character', id + 1], getCharacter, { - staleTime: 5 * 60 * 1000, - }) + await Promise.all([ + queryCache.prefetchQuery(['character', id + 1], getCharacter, { + staleTime: 5 * 60 * 1000, + }), + queryCache.prefetchQuery(['character', id - 1], getCharacter, { + staleTime: 5 * 60 * 1000, + }), + ]) - queryCache.prefetchQuery(['character', id - 1], getCharacter, { - staleTime: 5 * 60 * 1000, - }) + rerender() } return ( @@ -55,7 +59,15 @@ export default function App() { prefetchNext(char.id) }} > -
+
{char.id} - {char.name}
diff --git a/examples/rick-morty/package.json b/examples/rick-morty/package.json index eea407f4d8..476b15cde2 100644 --- a/examples/rick-morty/package.json +++ b/examples/rick-morty/package.json @@ -21,7 +21,7 @@ "@rescripts/cli": "^0.0.11", "@rescripts/rescript-use-babel-config": "^0.0.8", "@rescripts/rescript-use-eslint-config": "^0.0.9", - "babel-eslint": "10.0.1" + "babel-plugin-styled-components": "^1.10.7" }, "browserslist": { "production": [ diff --git a/examples/rick-morty/yarn.lock b/examples/rick-morty/yarn.lock index 4e2308daba..2167a4f61c 100644 --- a/examples/rick-morty/yarn.lock +++ b/examples/rick-morty/yarn.lock @@ -16,19 +16,19 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1", "@babel/code-frame@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.10.1" -"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" - integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== +"@babel/compat-data@^7.10.1", "@babel/compat-data@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" + integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== dependencies: - browserslist "^4.9.1" + browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" @@ -52,7 +52,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.4.5": +"@babel/core@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== @@ -74,247 +74,269 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" - integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== +"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.4.5": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" + integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.2" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.2" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.1", "@babel/generator@^7.10.2", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" + integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== dependencies: - "@babel/types" "^7.9.5" + "@babel/types" "^7.10.2" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" + integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" + integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-explode-assignable-expression" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-builder-react-jsx-experimental@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" - integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== +"@babel/helper-builder-react-jsx-experimental@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.1.tgz#9a7d58ad184d3ac3bafb1a452cec2bad7e4a0bc8" + integrity sha512-irQJ8kpQUV3JasXPSFQ+LCCtJSc5ceZrPFVj6TElR6XCHssi3jV8ch3odIrNtjJFRZZVbrOEfJMI79TPU/h1pQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-module-imports" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-builder-react-jsx@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" - integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== +"@babel/helper-builder-react-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.1.tgz#a327f0cf983af5554701b1215de54a019f09b532" + integrity sha512-KXzzpyWhXgzjXIlJU1ZjIXzUPdej1suE6vzqgImZ/cpAsR/CC8gUcX4EWRmDfWz/cs6HOCPMBIJ3nKoXt3BFuw== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/types" "^7.9.0" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-compilation-targets@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" - integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== +"@babel/helper-compilation-targets@^7.10.2", "@babel/helper-compilation-targets@^7.8.7": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" + integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== dependencies: - "@babel/compat-data" "^7.8.6" - browserslist "^4.9.1" + "@babel/compat-data" "^7.10.1" + browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz#79753d44017806b481017f24b02fd4113c7106ea" - integrity sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA== - dependencies: - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" +"@babel/helper-create-class-features-plugin@^7.10.1", "@babel/helper-create-class-features-plugin@^7.8.3": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" + integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + +"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" + integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-regex" "^7.10.1" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@babel/helper-define-map@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" + integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@babel/helper-explode-assignable-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" + integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/helper-hoist-variables@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" + integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-member-expression-to-functions@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" + integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" + integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== +"@babel/helper-module-transforms@^7.10.1", "@babel/helper-module-transforms@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helper-optimise-call-expression@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" + integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" + integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== +"@babel/helper-regex@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" + integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" - integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== - -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.4.3", "@babel/helpers@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" - integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - -"@babel/highlight@^7.0.0", "@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" +"@babel/helper-remap-async-to-generator@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" + integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-wrap-function" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + +"@babel/helper-wrap-function@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" + integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== + dependencies: + "@babel/helper-function-name" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helpers@^7.10.1", "@babel/helpers@^7.4.3", "@babel/helpers@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== + dependencies: + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.4.3", "@babel/parser@^7.9.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-proposal-async-generator-functions@^7.10.1", "@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" + integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-class-properties@7.8.3": @@ -325,6 +347,14 @@ "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-proposal-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" + integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-decorators@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" @@ -334,23 +364,23 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-decorators" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-dynamic-import@^7.10.1", "@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" + integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-json-strings@^7.10.1", "@babel/plugin-proposal-json-strings@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" + integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-nullish-coalescing-operator@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== @@ -358,7 +388,15 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@7.8.3", "@babel/plugin-proposal-numeric-separator@^7.8.3": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" + integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== @@ -366,24 +404,32 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.9.0", "@babel/plugin-proposal-object-rest-spread@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" - integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== +"@babel/plugin-proposal-numeric-separator@^7.10.1", "@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" + integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" + +"@babel/plugin-proposal-object-rest-spread@^7.10.1", "@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" + integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-parameters" "^7.10.1" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-optional-catch-binding@^7.10.1", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" + integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@7.9.0", "@babel/plugin-proposal-optional-chaining@^7.9.0": +"@babel/plugin-proposal-optional-chaining@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== @@ -391,13 +437,29 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== +"@babel/plugin-proposal-optional-chaining@^7.10.1", "@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" + integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" + integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" + integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" @@ -406,12 +468,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-decorators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" - integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz#16b869c4beafc9a442565147bda7ce0967bd4f13" + integrity sha512-a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -421,11 +490,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-flow@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" - integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.1.tgz#cd4bbca62fb402babacb174f64f8734310d742f0" + integrity sha512-b3pWVncLBYoPP60UOTc7NMlbtsHQ6ITim78KQejNHK6WJ2mzV5kCcg4mIWpasAfJEgwVTibwo2e+FU7UEIKQUg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" @@ -434,12 +503,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== +"@babel/plugin-syntax-jsx@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz#0ae371134a42b91d5418feb3c8c8d43e1565d2da" + integrity sha512-+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" @@ -448,12 +517,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== +"@babel/plugin-syntax-numeric-separator@^7.10.1", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" @@ -476,101 +545,101 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.10.1", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" + integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-syntax-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" - integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== +"@babel/plugin-syntax-typescript@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.1.tgz#5e82bc27bb4202b93b949b029e699db536733810" + integrity sha512-X/d8glkrAtra7CaQGMiGs/OGa6XgUzqPcBXCIGFCpCqnfGlT0Wfbzo/B89xHhnInTaItPK8LALblVXcUOEh95Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-transform-arrow-functions@^7.10.1", "@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" + integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-async-to-generator@^7.10.1", "@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" + integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-remap-async-to-generator" "^7.10.1" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-block-scoped-functions@^7.10.1", "@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" + integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoping@^7.10.1", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" + integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.9.0", "@babel/plugin-transform-classes@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" +"@babel/plugin-transform-classes@^7.10.1", "@babel/plugin-transform-classes@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" + integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-define-map" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.10.1", "@babel/plugin-transform-computed-properties@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" + integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-destructuring@^7.8.3", "@babel/plugin-transform-destructuring@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" - integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== +"@babel/plugin-transform-destructuring@^7.10.1", "@babel/plugin-transform-destructuring@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" + integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== +"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" + integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.10.1", "@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" + integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.10.1", "@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" + integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-flow-strip-types@7.9.0": version "7.9.0" @@ -580,71 +649,71 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== +"@babel/plugin-transform-for-of@^7.10.1", "@babel/plugin-transform-for-of@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" + integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-function-name@^7.10.1", "@babel/plugin-transform-function-name@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" + integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-literals@^7.10.1", "@babel/plugin-transform-literals@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" + integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-member-expression-literals@^7.10.1", "@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" + integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-modules-amd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" - integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== +"@babel/plugin-transform-modules-amd@^7.10.1", "@babel/plugin-transform-modules-amd@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" + integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" - integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== +"@babel/plugin-transform-modules-commonjs@^7.10.1", "@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" + integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" - integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== +"@babel/plugin-transform-modules-systemjs@^7.10.1", "@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" + integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== +"@babel/plugin-transform-modules-umd@^7.10.1", "@babel/plugin-transform-modules-umd@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" + integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" @@ -653,98 +722,113 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-new-target@^7.10.1", "@babel/plugin-transform-new-target@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" + integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-object-super@^7.10.1", "@babel/plugin-transform-object-super@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" + integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" -"@babel/plugin-transform-parameters@^7.8.7", "@babel/plugin-transform-parameters@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" - integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== +"@babel/plugin-transform-parameters@^7.10.1", "@babel/plugin-transform-parameters@^7.8.7": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" + integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-property-literals@^7.10.1", "@babel/plugin-transform-property-literals@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" + integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-react-constant-elements@^7.0.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.9.0.tgz#a75abc936a3819edec42d3386d9f1c93f28d9d9e" - integrity sha512-wXMXsToAUOxJuBBEHajqKLFWcCkOSLshTI2ChCFFj1zDd7od4IOxiwLCOObNUvOpkxLpjIuaIdBMmNt6ocCPAw== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.1.tgz#c7f117a54657cba3f9d32012e050fc89982df9e1" + integrity sha512-V4os6bkWt/jbrzfyVcZn2ZpuHZkvj3vyBU0U/dtS8SZuMS7Rfx5oknTrtfyXJ2/QZk8gX7Yls5Z921ItNpE30Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-react-display-name@7.8.3", "@babel/plugin-transform-react-display-name@^7.8.3": +"@babel/plugin-transform-react-display-name@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" - integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== +"@babel/plugin-transform-react-display-name@^7.10.1", "@babel/plugin-transform-react-display-name@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.1.tgz#e6a33f6d48dfb213dda5e007d0c7ff82b6a3d8ef" + integrity sha512-rBjKcVwjk26H3VX8pavMxGf33LNlbocMHdSeldIEswtQ/hrjyTG8fKKILW1cSkODyRovckN/uZlGb2+sAV9JUQ== dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" - integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== +"@babel/plugin-transform-react-jsx-development@^7.10.1", "@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.1.tgz#1ac6300d8b28ef381ee48e6fec430cc38047b7f3" + integrity sha512-XwDy/FFoCfw9wGFtdn5Z+dHh6HXKHkC6DwKNWpN74VWinUagZfDcEJc3Y8Dn5B3WMVnAllX8Kviaw7MtC5Epwg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" - integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== +"@babel/plugin-transform-react-jsx-self@^7.10.1", "@babel/plugin-transform-react-jsx-self@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.1.tgz#22143e14388d72eb88649606bb9e46f421bc3821" + integrity sha512-4p+RBw9d1qV4S749J42ZooeQaBomFPrSxa9JONLHJ1TxCBo3TzJ79vtmG2S2erUT8PDDrPdw4ZbXGr2/1+dILA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-react-jsx@^7.9.1", "@babel/plugin-transform-react-jsx@^7.9.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" - integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== +"@babel/plugin-transform-react-jsx-source@^7.10.1", "@babel/plugin-transform-react-jsx-source@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.1.tgz#30db3d4ee3cdebbb26a82a9703673714777a4273" + integrity sha512-neAbaKkoiL+LXYbGDvh6PjPG+YeA67OsZlE78u50xbWh2L1/C81uHiNP5d1fw+uqUIoiNdCC8ZB+G4Zh3hShJA== dependencies: - "@babel/helper-builder-react-jsx" "^7.9.0" - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== +"@babel/plugin-transform-react-jsx@^7.10.1", "@babel/plugin-transform-react-jsx@^7.9.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.1.tgz#91f544248ba131486decb5d9806da6a6e19a2896" + integrity sha512-MBVworWiSRBap3Vs39eHt+6pJuLUAaK4oxGc8g+wY+vuSJvLiEQjW1LSTqKb8OUPtDvHCkdPhk7d6sjC19xyFw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.1" + "@babel/helper-builder-react-jsx-experimental" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-jsx" "^7.10.1" + +"@babel/plugin-transform-react-pure-annotations@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.1.tgz#f5e7c755d3e7614d4c926e144f501648a5277b70" + integrity sha512-mfhoiai083AkeewsBHUpaS/FM1dmUENHBMpS/tugSJ7VXqXO5dCN1Gkint2YvM1Cdv1uhmAKt1ZOuAjceKmlLA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-regenerator@^7.10.1", "@babel/plugin-transform-regenerator@^7.8.7": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" + integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== +"@babel/plugin-transform-reserved-words@^7.10.1", "@babel/plugin-transform-reserved-words@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" + integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-runtime@7.9.0": version "7.9.0" @@ -756,59 +840,66 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== +"@babel/plugin-transform-shorthand-properties@^7.10.1", "@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" + integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== +"@babel/plugin-transform-spread@^7.10.1", "@babel/plugin-transform-spread@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" + integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== +"@babel/plugin-transform-sticky-regex@^7.10.1", "@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" + integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-regex" "^7.10.1" -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== +"@babel/plugin-transform-template-literals@^7.10.1", "@babel/plugin-transform-template-literals@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" + integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== +"@babel/plugin-transform-typeof-symbol@^7.10.1", "@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" + integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-typescript@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359" - integrity sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w== + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.1.tgz#2c54daea231f602468686d9faa76f182a94507a6" + integrity sha512-v+QWKlmCnsaimLeqq9vyCsVRMViZG1k2SZTlcZvB+TqyH570Zsij8nvVUZzOASCRiQFUxkLrn9Wg/kH0zgy5OQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-typescript" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-typescript" "^7.10.1" -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== +"@babel/plugin-transform-unicode-escapes@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" + integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.1" + +"@babel/plugin-transform-unicode-regex@^7.10.1", "@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" + integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" "@babel/preset-env@7.9.0": version "7.9.0" @@ -877,66 +968,70 @@ semver "^5.5.0" "@babel/preset-env@^7.1.6": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.5.tgz#8ddc76039bc45b774b19e2fc548f6807d8a8919f" - integrity sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ== - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" + integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== + dependencies: + "@babel/compat-data" "^7.10.1" + "@babel/helper-compilation-targets" "^7.10.2" + "@babel/helper-module-imports" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/plugin-proposal-class-properties" "^7.10.1" + "@babel/plugin-proposal-dynamic-import" "^7.10.1" + "@babel/plugin-proposal-json-strings" "^7.10.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-numeric-separator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.10.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.1" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-syntax-top-level-await" "^7.10.1" + "@babel/plugin-transform-arrow-functions" "^7.10.1" + "@babel/plugin-transform-async-to-generator" "^7.10.1" + "@babel/plugin-transform-block-scoped-functions" "^7.10.1" + "@babel/plugin-transform-block-scoping" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.1" + "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-destructuring" "^7.10.1" + "@babel/plugin-transform-dotall-regex" "^7.10.1" + "@babel/plugin-transform-duplicate-keys" "^7.10.1" + "@babel/plugin-transform-exponentiation-operator" "^7.10.1" + "@babel/plugin-transform-for-of" "^7.10.1" + "@babel/plugin-transform-function-name" "^7.10.1" + "@babel/plugin-transform-literals" "^7.10.1" + "@babel/plugin-transform-member-expression-literals" "^7.10.1" + "@babel/plugin-transform-modules-amd" "^7.10.1" + "@babel/plugin-transform-modules-commonjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-umd" "^7.10.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.10.1" + "@babel/plugin-transform-object-super" "^7.10.1" + "@babel/plugin-transform-parameters" "^7.10.1" + "@babel/plugin-transform-property-literals" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-reserved-words" "^7.10.1" + "@babel/plugin-transform-shorthand-properties" "^7.10.1" + "@babel/plugin-transform-spread" "^7.10.1" + "@babel/plugin-transform-sticky-regex" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-typeof-symbol" "^7.10.1" + "@babel/plugin-transform-unicode-escapes" "^7.10.1" + "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.5" - browserslist "^4.9.1" + "@babel/types" "^7.10.2" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" @@ -966,16 +1061,17 @@ "@babel/plugin-transform-react-jsx-source" "^7.9.0" "@babel/preset-react@^7.0.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" - integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.4" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.1.tgz#e2ab8ae9a363ec307b936589f07ed753192de041" + integrity sha512-Rw0SxQ7VKhObmFjD/cUcKhPTtzpeviEFX1E6PgP+cYOhQ98icNqtINNFANlsdbQHrmeWnqdxA4Tmnl1jy5tp3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-transform-react-display-name" "^7.10.1" + "@babel/plugin-transform-react-jsx" "^7.10.1" + "@babel/plugin-transform-react-jsx-development" "^7.10.1" + "@babel/plugin-transform-react-jsx-self" "^7.10.1" + "@babel/plugin-transform-react-jsx-source" "^7.10.1" + "@babel/plugin-transform-react-pure-annotations" "^7.10.1" "@babel/preset-typescript@7.9.0": version "7.9.0" @@ -992,43 +1088,43 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" + integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" - integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.5" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.5" +"@babel/template@^7.10.1", "@babel/template@^7.4.0", "@babel/template@^7.8.6": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.4.3", "@babel/traverse@^7.9.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" - integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== +"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.9.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== dependencies: - "@babel/helper-validator-identifier" "^7.9.5" + "@babel/helper-validator-identifier" "^7.10.1" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -1055,23 +1151,6 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@^0.8.1": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" - integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== - dependencies: - "@emotion/memoize" "0.7.4" - -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" - integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== - -"@emotion/unitless@^0.7.0": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - "@hapi/address@2.x.x": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -1253,33 +1332,33 @@ "@types/yargs" "^13.0.0" "@material-ui/core@^4.9.7": - version "4.9.10" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.9.10.tgz#53f1d18bd274c258698b6cfdab3c4bee0edf7892" - integrity sha512-CQuZU9Y10RkwSdxjn785kw2EPcXhv5GKauuVQufR9LlD37kjfn21Im1yvr6wsUzn81oLhEvVPz727UWC0gbqxg== + version "4.10.2" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.10.2.tgz#0ef78572132fcef1a25f6969bce0d34652d42e31" + integrity sha512-Uf4iDLi9sW6HKbVQDyDZDr1nMR4RUAE7w/RIIJZGNVZResC0xwmpLRZMtaUdSO43N0R0yJehfxTi4Z461Cd49A== dependencies: "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.9.10" - "@material-ui/system" "^4.9.10" - "@material-ui/types" "^5.0.1" - "@material-ui/utils" "^4.9.6" + "@material-ui/styles" "^4.10.0" + "@material-ui/system" "^4.9.14" + "@material-ui/types" "^5.1.0" + "@material-ui/utils" "^4.10.2" "@types/react-transition-group" "^4.2.0" clsx "^1.0.4" hoist-non-react-statics "^3.3.2" - popper.js "^1.16.1-lts" + popper.js "1.16.1-lts" prop-types "^15.7.2" react-is "^16.8.0" - react-transition-group "^4.3.0" + react-transition-group "^4.4.0" -"@material-ui/styles@^4.9.10": - version "4.9.10" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.9.10.tgz#182ccdd0bc8525a459486499bbaebcd92b0db3ab" - integrity sha512-EXIXlqVyFDnjXF6tj72y6ZxiSy+mHtrsCo3Srkm3XUeu3Z01aftDBy7ZSr3TQ02gXHTvDSBvegp3Le6p/tl7eA== +"@material-ui/styles@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071" + integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q== dependencies: "@babel/runtime" "^7.4.4" "@emotion/hash" "^0.8.0" - "@material-ui/types" "^5.0.1" + "@material-ui/types" "^5.1.0" "@material-ui/utils" "^4.9.6" - clsx "^1.0.2" + clsx "^1.0.4" csstype "^2.5.2" hoist-non-react-statics "^3.3.2" jss "^10.0.3" @@ -1292,24 +1371,25 @@ jss-plugin-vendor-prefixer "^10.0.3" prop-types "^15.7.2" -"@material-ui/system@^4.9.10": - version "4.9.10" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.10.tgz#5de6ec7bea0f222b10b45e5bd5bb8b9a7b938926" - integrity sha512-E+t0baX2TBZk6ALm8twG6objpsxLdMM4MDm1++LMt2m7CetCAEc3aIAfDaprk4+tm5hFT1Cah5dRWk8EeIFQYw== +"@material-ui/system@^4.9.14": + version "4.9.14" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f" + integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w== dependencies: "@babel/runtime" "^7.4.4" "@material-ui/utils" "^4.9.6" + csstype "^2.5.2" prop-types "^15.7.2" -"@material-ui/types@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.0.1.tgz#c4954063cdc196eb327ee62c041368b1aebb6d61" - integrity sha512-wURPSY7/3+MAtng3i26g+WKwwNE3HEeqa/trDBR5+zWKmcjO+u9t7Npu/J1r+3dmIa/OeziN9D/18IrBKvKffw== +"@material-ui/types@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== -"@material-ui/utils@^4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.9.6.tgz#5f1f9f6e4df9c8b6a263293b68c94834248ff157" - integrity sha512-gqlBn0JPPTUZeAktn1rgMcy9Iczrr74ecx31tyZLVGdBGGzsxzM6PP6zeS7FuoLS6vG4hoZP7hWnOoHtkR0Kvw== +"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.9.6": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321" + integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw== dependencies: "@babel/runtime" "^7.4.4" prop-types "^15.7.2" @@ -1462,9 +1542,9 @@ loader-utils "^1.1.0" "@types/babel__core@^7.1.0": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" - integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.8.tgz#057f725aca3641f49fc11c7a87a9de5ec588a5d7" + integrity sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1488,16 +1568,16 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.10" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.10.tgz#d9a99f017317d9b3d1abc2ced45d3bca68df0daf" - integrity sha512-74fNdUGrWsgIB/V9kTO5FGHPWYY6Eqn+3Z7L6Hc4e/BxjYV7puvBqp5HwsVYYfLm6iURYBNCx4Ut37OF9yitCw== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.12.tgz#22f49a028e69465390f87bb103ebd61bd086b8f5" + integrity sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA== dependencies: "@babel/types" "^7.3.0" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + 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== "@types/istanbul-lib-report@*": version "3.0.0" @@ -1507,9 +1587,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" @@ -1525,21 +1605,21 @@ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== "@types/react-transition-group@^4.2.0": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" - integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== + version "4.4.0" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" + integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== dependencies: "@types/react" "*" "@types/react@*": - version "16.9.34" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349" - integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow== + version "16.9.36" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.36.tgz#ade589ff51e2a903e34ee4669e05dbfa0c1ce849" + integrity sha512-mGgUb/Rk/vGx4NCvquRuSH0GHBQKb1OqpGS9cT9lFxlTLHZgkksgI60TuIxubmn7JuCb+sENHhQciqa0npm0AQ== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -1555,9 +1635,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== + version "13.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.9.tgz#44028e974343c7afcf3960f1a2b1099c39a7b5e1" + integrity sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg== dependencies: "@types/yargs-parser" "*" @@ -1749,11 +1829,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -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" @@ -1816,9 +1891,9 @@ ajv-keywords@^3.1.0: integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1880,19 +1955,19 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3, aproba@^1.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== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1943,7 +2018,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3: +array-includes@^3.0.3, array-includes@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== @@ -2061,17 +2136,17 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.4.9: - version "9.7.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.6.tgz#63ac5bbc0ce7934e6997207d5bb00d68fa8293a4" - integrity sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ== + version "9.8.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" + integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== dependencies: - browserslist "^4.11.1" - caniuse-lite "^1.0.30001039" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001061" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.27" - postcss-value-parser "^4.0.3" + postcss "^7.0.30" + postcss-value-parser "^4.1.0" aws-sign2@~0.7.0: version "0.7.0" @@ -2079,16 +2154,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - -axios@0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== axobject-query@^2.0.2: version "2.1.2" @@ -2146,10 +2214,10 @@ babel-loader@8.0.5: mkdirp "^0.5.1" util.promisify "^1.0.0" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" @@ -2184,7 +2252,7 @@ babel-plugin-named-asset-import@^0.3.2: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz#c9750a1b38d85112c9e166bf3ef7c5dbc605f4be" integrity sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA== -"babel-plugin-styled-components@>= 1": +babel-plugin-styled-components@^1.10.7: version "1.10.7" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz#3494e77914e9989b33cc2d7b3b29527a949d635c" integrity sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg== @@ -2304,6 +2372,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2316,10 +2389,15 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== body-parser@1.19.0: version "1.19.0" @@ -2378,6 +2456,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -2426,7 +2511,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -2435,17 +2520,19 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -2472,13 +2559,13 @@ browserslist@4.7.0: electron-to-chromium "^1.3.247" node-releases "^1.1.29" -browserslist@^4.0.0, browserslist@^4.1.1, browserslist@^4.11.1, browserslist@^4.4.2, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" - integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== +browserslist@^4.0.0, browserslist@^4.1.1, browserslist@^4.12.0, browserslist@^4.4.2, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.12.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== dependencies: - caniuse-lite "^1.0.30001038" - electron-to-chromium "^1.3.390" + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" node-releases "^1.1.53" pkg-up "^2.0.0" @@ -2631,11 +2718,6 @@ camelcase@^5.0.0, camelcase@^5.2.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2646,10 +2728,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039: - version "1.0.30001041" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" - integrity sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061: + version "1.0.30001083" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442" + integrity sha512-CnYJ27awX4h7yj5glfK7r1TOI13LBytpLzEgfj0s4mY75/F8pnQcYjL+oVpmS38FB59+vU0gscQ9D8tc+lIXvA== capture-exit@^2.0.0: version "2.0.0" @@ -2712,6 +2794,21 @@ chokidar@^2.0.0, chokidar@^2.0.4, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2762,9 +2859,9 @@ cli-cursor@^2.1.0: restore-cursor "^2.0.0" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cliui@^4.0.0: version "4.1.0" @@ -2805,10 +2902,10 @@ clone-deep@^2.0.1: kind-of "^6.0.0" shallow-clone "^1.0.0" -clsx@^1.0.2, clsx@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" - integrity sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA== +clsx@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== co@^4.6.0: version "4.6.0" @@ -2957,11 +3054,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3070,7 +3162,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -3081,7 +3173,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -3128,11 +3220,6 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= - css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3203,15 +3290,6 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" -css-to-react-native@^2.2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" - integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^3.3.0" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -3228,7 +3306,7 @@ css-tree@1.0.0-alpha.39: mdn-data "2.0.6" source-map "^0.6.1" -css-vendor@^2.0.7: +css-vendor@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== @@ -3242,9 +3320,9 @@ css-what@2.1: integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== cssdb@^4.3.0: version "4.4.0" @@ -3386,14 +3464,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: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.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== @@ -3436,11 +3507,6 @@ 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" @@ -3500,11 +3566,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -3523,11 +3584,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -3723,12 +3779,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.390: - version "1.3.403" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" - integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== +electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.413: + version "1.3.473" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8" + integrity sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A== -elliptic@^6.0.0: +elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== @@ -3783,9 +3839,9 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== errno@^0.1.3, errno@~0.1.7: version "0.1.7" @@ -3838,9 +3894,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0, escodegen@^1.9.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + version "1.14.2" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.2.tgz#14ab71bf5026c2aa08173afba22c6f3173284a84" + integrity sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -3962,9 +4018,9 @@ eslint-utils@^1.3.1: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== eslint@^5.16.0: version "5.16.0" @@ -4023,11 +4079,11 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.1.tgz#105239e215c5aa480369c7794d74b8b5914c19d4" - integrity sha512-/IcAXa9GWOX9BUIb/Tz2QrrAWFWzWGrFIeLeMRwtiuwg9qTFhSYemsi9DixwrFFqVbhBZ47vGcxEnu5mbPqbig== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -4041,10 +4097,10 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== esutils@^2.0.2: version "2.0.3" @@ -4057,9 +4113,9 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== events@^3.0.0: version "3.1.0" @@ -4219,9 +4275,9 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^2.0.2: version "2.2.7" @@ -4313,6 +4369,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -4393,13 +4456,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - follow-redirects@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" @@ -4502,13 +4558,6 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -4530,13 +4579,18 @@ fsevents@2.0.6: integrity sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A== fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" - integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4547,20 +4601,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -4608,6 +4648,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -4671,20 +4718,15 @@ globby@^6.1.0: pinkie-promise "^2.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - gzip-size@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -4741,11 +4783,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -4785,12 +4822,13 @@ has@^1.0.0, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -4959,25 +4997,25 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== http-proxy-middleware@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + version "0.19.2" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee" + integrity sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ== dependencies: - http-proxy "^1.17.0" + http-proxy "^1.18.1" is-glob "^4.0.0" lodash "^4.17.11" micromatch "^3.1.10" -http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" @@ -5002,7 +5040,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5038,13 +5076,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5121,7 +5152,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5136,7 +5167,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== @@ -5274,15 +5305,22 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== is-ci@^2.0.0: version "2.0.0" @@ -5386,7 +5424,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5405,6 +5443,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -5441,17 +5484,12 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - is-regex@^1.0.4, is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-regexp@^1.0.0: version "1.0.0" @@ -5502,11 +5540,6 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-what@^3.3.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.8.0.tgz#610bc46a524355f2424eb85eedc6ebbbf7e1ff8c" - integrity sha512-UKeBoQfV8bjlM4pmx1FLDHdxslW/1mTksEs8ReVsilPmUv5cORd4+2/wFcviI3cUjrLybxCjzc8DnodAzJ/Wrg== - is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5991,9 +6024,9 @@ js-tokens@^3.0.2: integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.13.0, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -6151,68 +6184,69 @@ jsprim@^1.2.2: verror "1.10.0" jss-plugin-camel-case@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.1.1.tgz#8e73ecc4f1d0f8dfe4dd31f6f9f2782588970e78" - integrity sha512-MDIaw8FeD5uFz1seQBKz4pnvDLnj5vIKV5hXSVdMaAVq13xR6SVTVWkIV/keyTs5txxTvzGJ9hXoxgd1WTUlBw== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.3.0.tgz#ae4da53b39a6e3ea94b70a20fc41c11f0b87386a" + integrity sha512-tadWRi/SLWqLK3EUZEdDNJL71F3ST93Zrl9JYMjV0QDqKPAl0Liue81q7m/nFUpnSTXczbKDy4wq8rI8o7WFqA== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.1.1" + jss "^10.3.0" jss-plugin-default-unit@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.1.1.tgz#2df86016dfe73085eead843f5794e3890e9c5c47" - integrity sha512-UkeVCA/b3QEA4k0nIKS4uWXDCNmV73WLHdh2oDGZZc3GsQtlOCuiH3EkB/qI60v2MiCq356/SYWsDXt21yjwdg== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.3.0.tgz#cd74cf5088542620a82591f76c62c6b43a7e50a6" + integrity sha512-tT5KkIXAsZOSS9WDSe8m8lEHIjoEOj4Pr0WrG0WZZsMXZ1mVLFCSsD2jdWarQWDaRNyMj/I4d7czRRObhOxSuw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.1.1" + jss "^10.3.0" jss-plugin-global@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.1.1.tgz#36b0d6d9facb74dfd99590643708a89260747d14" - integrity sha512-VBG3wRyi3Z8S4kMhm8rZV6caYBegsk+QnQZSVmrWw6GVOT/Z4FA7eyMu5SdkorDlG/HVpHh91oFN56O4R9m2VA== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.3.0.tgz#6b883e74900bb71f65ac2b19bea78f7d1e85af3f" + integrity sha512-etYTG/y3qIR/vxZnKY+J3wXwObyBDNhBiB3l/EW9/pE3WHE//BZdK8LFvQcrCO48sZW1Z6paHo6klxUPP7WbzA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.1.1" + jss "^10.3.0" jss-plugin-nested@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.1.1.tgz#5c3de2b8bda344de1ebcef3a4fd30870a29a8a8c" - integrity sha512-ozEu7ZBSVrMYxSDplPX3H82XHNQk2DQEJ9TEyo7OVTPJ1hEieqjDFiOQOxXEj9z3PMqkylnUbvWIZRDKCFYw5Q== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.3.0.tgz#ae8aceac95e09c3d40c991ea32403fb647d9e0a8" + integrity sha512-qWiEkoXNEkkZ+FZrWmUGpf+zBsnEOmKXhkjNX85/ZfWhH9dfGxUCKuJFuOWFM+rjQfxV4csfesq4hY0jk8Qt0w== dependencies: "@babel/runtime" "^7.3.1" - jss "10.1.1" + jss "^10.3.0" tiny-warning "^1.0.2" jss-plugin-props-sort@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.1.1.tgz#34bddcbfaf9430ec8ccdf92729f03bb10caf1785" - integrity sha512-g/joK3eTDZB4pkqpZB38257yD4LXB0X15jxtZAGbUzcKAVUHPl9Jb47Y7lYmiGsShiV4YmQRqG1p2DHMYoK91g== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.3.0.tgz#5b0625f87b6431a7969c56b0d8c696525969bfe4" + integrity sha512-boetORqL/lfd7BWeFD3K+IyPqyIC+l3CRrdZr+NPq7Noqp+xyg/0MR7QisgzpxCEulk+j2CRcEUoZsvgPC4nTg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.1.1" + jss "^10.3.0" jss-plugin-rule-value-function@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.1.1.tgz#be00dac6fc394aaddbcef5860b9eca6224d96382" - integrity sha512-ClV1lvJ3laU9la1CUzaDugEcwnpjPTuJ0yGy2YtcU+gG/w9HMInD5vEv7xKAz53Bk4WiJm5uLOElSEshHyhKNw== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.3.0.tgz#498b0e2bae16cb316a6bdb73fd783cf9604ba747" + integrity sha512-7WiMrKIHH3rwxTuJki9+7nY11r1UXqaUZRhHvqTD4/ZE+SVhvtD5Tx21ivNxotwUSleucA/8boX+NF21oXzr5Q== dependencies: "@babel/runtime" "^7.3.1" - jss "10.1.1" + jss "^10.3.0" + tiny-warning "^1.0.2" jss-plugin-vendor-prefixer@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.1.1.tgz#8348b20749f790beebab3b6a8f7075b07c2cfcfd" - integrity sha512-09MZpQ6onQrhaVSF6GHC4iYifQ7+4YC/tAP6D4ZWeZotvCMq1mHLqNKRIaqQ2lkgANjlEot2JnVi1ktu4+L4pw== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.3.0.tgz#b09c13a4d05a055429d8a24e19cc01ce049f0ed4" + integrity sha512-sZQbrcZyP5V0ADjCLwUA1spVWoaZvM7XZ+2fSeieZFBj31cRsnV7X70FFDerMHeiHAXKWzYek+67nMDjhrZAVQ== dependencies: "@babel/runtime" "^7.3.1" - css-vendor "^2.0.7" - jss "10.1.1" + css-vendor "^2.0.8" + jss "^10.3.0" -jss@10.1.1, jss@^10.0.3: - version "10.1.1" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.1.1.tgz#450b27d53761af3e500b43130a54cdbe157ea332" - integrity sha512-Xz3qgRUFlxbWk1czCZibUJqhVPObrZHxY3FPsjCXhDld4NOj1BgM14Ir5hVm+Qr6OLqVljjGvoMcCdXNOAbdkQ== +jss@^10.0.3, jss@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.3.0.tgz#2cf7be265f72b59c1764d816fdabff1c5dd18326" + integrity sha512-B5sTRW9B6uHaUVzSo9YiMEOEp3UX8lWevU0Fsv+xtRnsShmgCfIYX44bTH8bPJe6LQKqEXku3ulKuHLbxBS97Q== dependencies: "@babel/runtime" "^7.3.1" csstype "^2.6.5" @@ -6220,11 +6254,11 @@ jss@10.1.1, jss@^10.0.3: tiny-warning "^1.0.2" jsx-ast-utils@^2.0.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" - integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.1" object.assign "^4.1.0" killable@^1.0.0: @@ -6441,9 +6475,9 @@ lodash.uniq@^4.5.0: integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== loglevel@^1.4.1: - version "1.6.7" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" - integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -6503,6 +6537,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +match-sorter@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-4.1.0.tgz#8ba63f4aaf438d7a844829f1a75aa3ab1b2587ba" + integrity sha512-DCzT9JVO2FWVOTfsKqIqVhu/skFa3bK0lQom70j6Co9yKX9bPn2gRtn9BFD9ykkM8F/USjTQeId+nlFfTVvz+w== + dependencies: + "@babel/runtime" "^7.9.2" + remove-accents "0.4.2" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6536,11 +6578,6 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memoize-one@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== - memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -6557,13 +6594,6 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -merge-anything@^2.2.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.4.tgz#6226b2ac3d3d3fc5fb9e8d23aa400df25f98fdf0" - integrity sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ== - dependencies: - is-what "^3.3.1" - merge-deep@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" @@ -6584,9 +6614,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" @@ -6625,17 +6655,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" @@ -6643,9 +6673,9 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.0.3, mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== mimic-fn@^1.0.0: version "1.2.0" @@ -6657,14 +6687,13 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-create-react-context@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" - integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== +mini-create-react-context@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" + integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== dependencies: - "@babel/runtime" "^7.4.0" - gud "^1.0.0" - tiny-warning "^1.0.2" + "@babel/runtime" "^7.5.5" + tiny-warning "^1.0.3" mini-css-extract-plugin@0.5.0: version "0.5.0" @@ -6697,21 +6726,6 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -6744,7 +6758,7 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -6797,9 +6811,9 @@ mute-stream@0.0.7: integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" @@ -6823,15 +6837,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" - integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6909,34 +6914,10 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.29, node-releases@^1.1.3, node-releases@^1.1.53: - version "1.1.53" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" - integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== - -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" + version "1.1.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" + integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== normalize-package-data@^2.3.2: version "2.5.0" @@ -6955,7 +6936,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -6970,27 +6951,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== -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - 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" @@ -6998,16 +6958,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7035,7 +6985,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7060,9 +7010,12 @@ object-inspect@^1.7.0: integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -7205,11 +7158,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7219,19 +7167,11 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7330,7 +7270,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: +parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== @@ -7461,9 +7401,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7476,6 +7416,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -7550,15 +7495,15 @@ pnp-webpack-plugin@1.2.1: dependencies: ts-pnp "^1.0.0" -popper.js@^1.16.1-lts: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== +popper.js@1.16.1-lts: + version "1.16.1-lts" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== portfinder@^1.0.9: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== dependencies: async "^2.6.2" debug "^3.1.1" @@ -8196,10 +8141,10 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" - integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: version "2.0.1" @@ -8210,10 +8155,10 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: indexes-of "^1.0.1" uniq "^1.0.1" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" - integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -8287,7 +8232,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -prop-types@^15.5.4, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -8408,7 +8353,7 @@ ramda@^0.26.0: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -8438,16 +8383,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - 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.1: version "1.0.6" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" @@ -8547,9 +8482,11 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-query-devtools@^1.0.13: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-query-devtools/-/react-query-devtools-1.1.0.tgz#95d4ebea3669e727e0529eb5ebc097f6aed81bed" - integrity sha512-ONcJYmrZiwQX/q3iCXJW0xrqeRBT6Bf+tMa1JtQ3MmlKLN9N7H57c4FEprm9qaEta5buTv6K9pNFbEUvcbhmvQ== + version "1.1.17" + resolved "https://registry.yarnpkg.com/react-query-devtools/-/react-query-devtools-1.1.17.tgz#ea9b51579a5bdbd34518e22efdfb4cb0e0a11eb6" + integrity sha512-KlXECp/rs7D3qS8aBSFFbu/ditsOOfbg9d73aSkkOQ488x7UjuK30QoD4dAR9kmz/ke+Hia73b+nkw65nbGtQg== + dependencies: + match-sorter "^4.1.0" react-query@1.0.12: version "1.0.12" @@ -8557,28 +8494,28 @@ react-query@1.0.12: integrity sha512-ETLjgJ9E9HhyGNK+NCp0OEfcpf1Y/XRkd+LWX4qmwk9ky1IDbKjsww/VfLDZVwsA14Iq71VPa5moRzJPheqNYg== react-router-dom@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" - integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.1.2" + react-router "5.2.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.1.2, react-router@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" - integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== +react-router@5.2.0, react-router@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.3.0" + mini-create-react-context "^0.4.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" @@ -8645,10 +8582,10 @@ react-scripts@3.0.1: optionalDependencies: fsevents "2.0.6" -react-transition-group@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" - integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== +react-transition-group@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" @@ -8698,7 +8635,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, 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: +"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" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8711,7 +8648,7 @@ read-pkg@^3.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8729,6 +8666,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -8751,9 +8695,9 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== regenerator-runtime@^0.11.0: version "0.11.1" @@ -8807,9 +8751,9 @@ regexpu-core@^4.7.0: unicode-match-property-value-ecmascript "^1.2.0" regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: version "0.6.4" @@ -8823,6 +8767,11 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -8956,9 +8905,9 @@ resolve@1.10.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -9013,11 +8962,9 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -9038,10 +8985,10 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -9123,7 +9070,7 @@ selfsigned@^1.9.1: dependencies: node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"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== @@ -9172,10 +9119,12 @@ serialize-javascript@^1.4.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" serve-index@^1.7.2: version "1.9.1" @@ -9200,7 +9149,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -9404,9 +9353,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9427,22 +9376,22 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -9593,7 +9542,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -9713,7 +9662,7 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +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= @@ -9726,25 +9675,6 @@ style-loader@0.23.1: loader-utils "^1.1.0" schema-utils "^1.0.0" -styled-components@^4.3.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.1.tgz#e0631e889f01db67df4de576fedaca463f05c2f2" - integrity sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@emotion/is-prop-valid" "^0.8.1" - "@emotion/unitless" "^0.7.0" - babel-plugin-styled-components ">= 1" - css-to-react-native "^2.2.2" - memoize-one "^5.0.0" - merge-anything "^2.2.4" - prop-types "^15.5.4" - react-is "^16.6.0" - stylis "^3.5.0" - stylis-rule-sheet "^0.0.10" - supports-color "^5.5.0" - stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -9754,22 +9684,12 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylis-rule-sheet@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" - integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== - -stylis@^3.5.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" - integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -9827,19 +9747,6 @@ tapable@^1.0.0, tapable@^1.1.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" @@ -9855,15 +9762,15 @@ terser-webpack-plugin@1.2.3: worker-farm "^1.5.2" terser-webpack-plugin@^1.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^3.1.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -9879,9 +9786,9 @@ terser@^3.16.1: source-map-support "~0.5.10" terser@^4.1.2: - version "4.6.11" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f" - integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA== + version "4.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" + integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -9942,7 +9849,7 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== -tiny-warning@^1.0.0, tiny-warning@^1.0.2: +tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== @@ -9984,6 +9891,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -10025,9 +9939,9 @@ ts-pnp@^1.0.0: integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== tslib@^1.8.1, tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tsutils@^3.7.0: version "3.17.1" @@ -10325,14 +10239,23 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack@^1.5.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" - integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA== +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== dependencies: chokidar "^2.1.8" + +watchpack@^1.5.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== + dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -10449,18 +10372,18 @@ webpack@4.29.6: webpack-sources "^1.3.0" websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" @@ -10509,13 +10432,6 @@ which@^1.2.9, which@^1.3.0, which@^1.3.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -10747,17 +10663,15 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^1.7.2: - version "1.8.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a" - integrity sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw== - dependencies: - "@babel/runtime" "^7.8.7" + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== yargs-parser@^10.1.0: version "10.1.0" diff --git a/examples/suspense/src/index.js b/examples/suspense/src/index.js index 9c37687d4d..7c1731e74b 100755 --- a/examples/suspense/src/index.js +++ b/examples/suspense/src/index.js @@ -13,7 +13,9 @@ const Projects = lazy(() => import("./components/Projects")); const Project = lazy(() => import("./components/Project")); const queryConfig = { - suspense: true + shared: { + suspense: true + } }; function App() { diff --git a/media/logo-square.png b/media/logo-square.png new file mode 100644 index 0000000000..e921d39b8c Binary files /dev/null and b/media/logo-square.png differ diff --git a/package.json b/package.json index e8d3f894ac..8c2140065b 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,15 @@ "postinstall": "node ./scripts/postinstall.js || exit 0", "dtslint": "dtslint types" }, + "release": { + "branches": [ + "master", + { + "name": "next", + "prerelease": true + } + ] + }, "files": [ "dist", "types", @@ -84,6 +93,5 @@ "rollup-plugin-size": "^0.2.2", "rollup-plugin-terser": "^6.1.0", "rollup-plugin-visualizer": "^4.0.4" - }, - "release": {} + } } diff --git a/src/config.js b/src/config.js index f00bfe25b8..b0b1b13c22 100644 --- a/src/config.js +++ b/src/config.js @@ -4,23 +4,34 @@ import { noop, stableStringify, identity, deepEqual } from './utils' export const configContext = React.createContext() const DEFAULTS = { - retry: 3, - retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), - staleTime: 0, - cacheTime: 5 * 60 * 1000, - refetchAllOnWindowFocus: true, - refetchInterval: false, - suspense: false, - queryKeySerializerFn: defaultQueryKeySerializerFn, - queryFnParamsFilter: identity, - throwOnError: false, - useErrorBoundary: undefined, // this will default to the suspense value - onMutate: noop, - onSuccess: noop, - onError: noop, - onSettled: noop, - refetchOnMount: true, - isDataEqual: deepEqual, + shared: { + suspense: false, + queryKeySerializerFn: defaultQueryKeySerializerFn, + }, + queries: { + enabled: true, + retry: 3, + retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), + staleTime: 0, + cacheTime: 5 * 60 * 1000, + refetchOnWindowFocus: true, + refetchInterval: false, + queryFnParamsFilter: identity, + refetchOnMount: true, + isDataEqual: deepEqual, + onError: noop, + onSuccess: noop, + onSettled: noop, + useErrorBoundary: false, + }, + mutations: { + throwOnError: false, + onMutate: noop, + onError: noop, + onSuccess: noop, + onSettled: noop, + useErrorBoundary: false, + }, } export const defaultConfigRef = { @@ -32,32 +43,35 @@ export function useConfigContext() { } export function ReactQueryConfigProvider({ config, children }) { - let configContextValue = React.useContext(configContext) + let configContextValue = useConfigContext() const newConfig = React.useMemo(() => { - const newConfig = { - ...(configContextValue || defaultConfigRef.current), - ...config, + const { shared = {}, queries = {}, mutations = {} } = config + const { + shared: contextShared = {}, + queries: contextQueries = {}, + mutations: contextMutations = {}, + } = configContextValue + return { + shared: { + ...contextShared, + ...shared, + }, + queries: { + ...contextQueries, + ...queries, + }, + mutations: { + ...contextMutations, + ...mutations, + }, } - - // Default useErrorBoundary to the suspense value - if (typeof newConfig.useErrorBoundary === 'undefined') { - newConfig.useErrorBoundary = newConfig.suspense - } - - return newConfig }, [config, configContextValue]) React.useEffect(() => { // restore previous config on unmount return () => { defaultConfigRef.current = { ...(configContextValue || DEFAULTS) } - - // Default useErrorBoundary to the suspense value - if (typeof defaultConfigRef.current.useErrorBoundary === 'undefined') { - defaultConfigRef.current.useErrorBoundary = - defaultConfigRef.current.suspense - } } }, [configContextValue]) @@ -72,25 +86,29 @@ export function ReactQueryConfigProvider({ config, children }) { ) } +function invalidQueryKey() { + throw new Error('A valid query key is required!') +} + export function defaultQueryKeySerializerFn(queryKey) { if (!queryKey) { - return [] + invalidQueryKey() } - if (typeof queryKey === 'function') { - try { - return defaultQueryKeySerializerFn(queryKey()) - } catch { - return [] - } + if (!Array.isArray(queryKey)) { + queryKey = [queryKey] } - if (typeof queryKey === 'string') { - queryKey = [queryKey] + if (queryKey.some(d => typeof d === 'function')) { + invalidQueryKey() } const queryHash = stableStringify(queryKey) queryKey = JSON.parse(queryHash) + if (!queryHash) { + invalidQueryKey() + } + return [queryHash, queryKey] } diff --git a/src/index.js b/src/index.js index 2178e3707e..7b6c91091b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ export { queryCache, + queryCaches, makeQueryCache, ReactQueryCacheProvider, useQueryCache, diff --git a/src/queryCache.js b/src/queryCache.js index 47902339d0..272d1fa4ec 100644 --- a/src/queryCache.js +++ b/src/queryCache.js @@ -10,6 +10,9 @@ import { getQueryArgs, deepIncludes, noop, + uid, + statusIdle, + Console, } from './utils' import { defaultConfigRef } from './config' @@ -19,132 +22,128 @@ export const queryCacheContext = React.createContext(queryCache) export const queryCaches = [queryCache] -export function useQueryCache() { - return React.useContext(queryCacheContext) -} +export const useQueryCache = () => React.useContext(queryCacheContext) export function ReactQueryCacheProvider({ queryCache, children }) { - const cache = React.useMemo(() => queryCache || makeQueryCache(), [ - queryCache, - ]) + const resolvedQueryCache = React.useMemo( + () => queryCache || makeQueryCache(), + [queryCache] + ) React.useEffect(() => { - queryCaches.push(cache) + queryCaches.push(resolvedQueryCache) return () => { // remove the cache from the active list - const i = queryCaches.indexOf(cache) - if (i >= 0) { + const i = queryCaches.indexOf(resolvedQueryCache) + if (i > -1) { queryCaches.splice(i, 1) } - // if the cache was created by us, we need to tear it down + // if the resolvedQueryCache was created by us, we need to tear it down if (queryCache == null) { - cache.clear() + resolvedQueryCache.clear() } } - }, [cache, queryCache]) + }, [resolvedQueryCache, queryCache]) return ( - + {children} ) } -const actionInit = {} -const actionFailed = {} -const actionMarkStale = {} -const actionMarkGC = {} -const actionFetch = {} -const actionSuccess = {} -const actionError = {} -const actionSetState = {} +const actionInit = 'Init' +const actionFailed = 'Failed' +const actionMarkStale = 'MarkStale' +const actionMarkGC = 'MarkGC' +const actionFetch = 'Fetch' +const actionSuccess = 'Success' +const actionError = 'Error' +const actionSetState = 'SetState' -export function makeQueryCache() { - const listeners = [] +export function makeQueryCache({ frozen = isServer, defaultConfig } = {}) { + // A frozen cache does not add new queries to the cache + const globalListeners = [] - const cache = { + const configRef = defaultConfig + ? { current: defaultConfig } + : defaultConfigRef + + const queryCache = { queries: {}, isFetching: 0, } const notifyGlobalListeners = () => { - cache.isFetching = Object.values(cache.queries).reduce( + queryCache.isFetching = Object.values(queryCache.queries).reduce( (acc, query) => (query.state.isFetching ? acc + 1 : acc), 0 ) - listeners.forEach(d => d(cache)) + + globalListeners.forEach(d => d(queryCache)) } - cache.subscribe = cb => { - listeners.push(cb) + queryCache.subscribe = cb => { + globalListeners.push(cb) return () => { - listeners.splice(listeners.indexOf(cb), 1) + globalListeners.splice(globalListeners.indexOf(cb), 1) } } - cache.clear = () => { - Object.values(cache.queries).forEach(query => query.clear()) - cache.queries = {} - notifyGlobalListeners() + queryCache.clear = ({ notify = true } = {}) => { + Object.values(queryCache.queries).forEach(query => query.clear()) + queryCache.queries = {} + if (notify) { + notifyGlobalListeners() + } } - const findQueries = (predicate, { exact } = {}) => { + queryCache.getQueries = (predicate, { exact } = {}) => { + if (predicate === true) { + return Object.values(queryCache.queries) + } + if (typeof predicate !== 'function') { const [ queryHash, queryKey, - ] = defaultConfigRef.current.queryKeySerializerFn(predicate) + ] = configRef.current.shared.queryKeySerializerFn(predicate) + predicate = d => exact ? d.queryHash === queryHash : deepIncludes(d.queryKey, queryKey) } - return Object.values(cache.queries).filter(predicate) + return Object.values(queryCache.queries).filter(predicate) } - cache.getQueries = findQueries - - cache.getQuery = queryKey => findQueries(queryKey, { exact: true })[0] + queryCache.getQuery = queryKey => + queryCache.getQueries(queryKey, { exact: true })[0] - cache.getQueryData = queryKey => cache.getQuery(queryKey)?.state.data + queryCache.getQueryData = queryKey => + queryCache.getQuery(queryKey)?.state.data - cache.removeQueries = (predicate, { exact } = {}) => { - const foundQueries = findQueries(predicate, { exact }) - - foundQueries.forEach(query => { - clearTimeout(query.staleTimeout) - delete cache.queries[query.queryHash] - }) - - if (foundQueries.length) { - notifyGlobalListeners() - } + queryCache.removeQueries = (...args) => { + queryCache.getQueries(...args).forEach(query => query.clear()) } - cache.cancelQueries = (predicate, { exact } = {}) => { - const foundQueries = findQueries(predicate, { exact }) - - foundQueries.forEach(query => { - query.cancel() - }) - - if (foundQueries.length) { - notifyGlobalListeners() - } + queryCache.cancelQueries = (...args) => { + queryCache.getQueries(...args).forEach(query => query.cancel()) } - cache.refetchQueries = async ( + queryCache.invalidateQueries = async ( predicate, - { exact, throwOnError, force } = {} + { refetchActive = true, exact, throwOnError } = {} ) => { - const foundQueries = - predicate === true - ? Object.values(cache.queries) - : findQueries(predicate, { exact }) - try { return await Promise.all( - foundQueries.map(query => query.fetch({ force })) + queryCache.getQueries(predicate, { exact }).map(query => { + if (refetchActive && query.instances.length) { + return query.fetch() + } + + return query.invalidate() + }) ) } catch (err) { if (throwOnError) { @@ -153,20 +152,24 @@ export function makeQueryCache() { } } - cache._buildQuery = (userQueryKey, queryVariables, queryFn, config) => { + queryCache.buildQuery = (userQueryKey, queryFn, config = {}) => { + config = { + ...configRef.current.shared, + ...configRef.current.queries, + ...config, + } + let [queryHash, queryKey] = config.queryKeySerializerFn(userQueryKey) - let query = cache.queries[queryHash] + let query = queryCache.queries[queryHash] if (query) { - Object.assign(query, { queryVariables, queryFn }) - query.config = { ...query.config, ...config } + Object.assign(query, { queryFn, config }) } else { query = makeQuery({ - cache, + queryCache, queryKey, queryHash, - queryVariables, queryFn, config, }) @@ -183,9 +186,12 @@ export function makeQueryCache() { query.scheduleGarbageCollection() } - if (query.queryHash) { - if (!isServer) { - cache.queries[queryHash] = query + if (!frozen) { + queryCache.queries[queryHash] = query + + if (isServer) { + notifyGlobalListeners() + } else { // Here, we setTimeout so as to not trigger // any setState's in parent components in the // middle of the render phase. @@ -196,114 +202,113 @@ export function makeQueryCache() { } } + query.fallbackInstance = { + config: { + onSuccess: query.config.onSuccess, + onError: query.config.onError, + onSettled: query.config.onSettled, + }, + } + return query } - cache.prefetchQuery = async (...args) => { + queryCache.prefetchQuery = async (...args) => { let [ queryKey, - queryVariables, queryFn, - { force, ...config }, + config, + { force, throwOnError } = {}, ] = getQueryArgs(args) - config = { - ...defaultConfigRef.current, - ...config, - } - - const query = cache._buildQuery(queryKey, queryVariables, queryFn, config) - - // Don't prefetch queries that are fresh, unless force is passed - if (query.state.isStale || force) { - // Trigger a fetch and return the promise - try { - const res = await query.fetch({ force }) - query.wasPrefetched = true - return res - } catch (err) { - if (config.throwOnError) { - throw err - } + try { + const query = queryCache.buildQuery(queryKey, queryFn, config) + if (force || query.state.isStale) { + await query.fetch() + } + return query.state.data + } catch (err) { + if (throwOnError) { + throw err } } - - return query.state.data } - cache.setQueryData = (queryKey, updater, { exact, ...config } = {}) => { - let queries = findQueries(queryKey, { exact }) + queryCache.setQueryData = (queryKey, updater, config = {}) => { + let query = queryCache.getQuery(queryKey) - if (!queries.length && typeof queryKey !== 'function') { - queries = [ - cache._buildQuery(queryKey, undefined, () => new Promise(noop), { - ...defaultConfigRef.current, - ...config, - }), - ] + if (!query) { + query = queryCache.buildQuery(queryKey, () => new Promise(noop), config) } - queries.forEach(d => d.setData(updater)) + query.setData(updater) } - function makeQuery(options) { - const queryCache = options.cache - const reducer = options.config.queryReducer || defaultQueryReducer - - const noQueryHash = typeof options.queryHash === 'undefined' - + function makeQuery({ queryCache, queryKey, queryHash, queryFn, config }) { const initialData = - typeof options.config.initialData === 'function' - ? options.config.initialData() - : options.config.initialData + typeof config.initialData === 'function' + ? config.initialData() + : config.initialData const hasInitialData = typeof initialData !== 'undefined' - const isStale = noQueryHash ? true : !hasInitialData + const isStale = !config.enabled || !hasInitialData - const manual = options.config.manual + const initialStatus = hasInitialData + ? statusSuccess + : config.enabled + ? statusLoading + : statusIdle - const initialStatus = - noQueryHash || manual || hasInitialData ? statusSuccess : statusLoading - - const query = { - ...options, + let query = { + queryKey, + queryHash, + queryFn, + config, instances: [], - state: reducer(undefined, { + state: queryReducer(undefined, { type: actionInit, initialStatus, initialData, hasInitialData, isStale, - manual, }), } - const dispatch = action => { - query.state = reducer(query.state, action) + query.dispatch = action => { + query.state = queryReducer(query.state, action) query.instances.forEach(d => d.onStateUpdate(query.state)) notifyGlobalListeners() } query.scheduleStaleTimeout = () => { + if (isServer) return + clearTimeout(query.staleTimeout) + if (query.config.staleTime === Infinity) { return } + query.staleTimeout = setTimeout(() => { if (queryCache.getQuery(query.queryKey)) { - dispatch({ type: actionMarkStale }) + query.invalidate() } }, query.config.staleTime) } + query.invalidate = () => { + clearTimeout(query.staleTimeout) + query.dispatch({ type: actionMarkStale }) + } + query.scheduleGarbageCollection = () => { if (query.config.cacheTime === Infinity) { return } - dispatch({ type: actionMarkGC }) + query.dispatch({ type: actionMarkGC }) query.cacheTimeout = setTimeout( () => { - cache.removeQueries( + queryCache.removeQueries( d => d.state.markedForGarbageCollection && d.queryHash === query.queryHash @@ -332,41 +337,123 @@ export function makeQueryCache() { } delete query.promise + } - notifyGlobalListeners() + query.clearIntervals = () => { + query.instances.forEach(instance => { + instance.clearInterval() + }) } - query.updateInstance = instance => { - let found = query.instances.find(d => d.id === instance.id) + query.setState = updater => + query.dispatch({ type: actionSetState, updater }) - if (found) { - Object.assign(found, instance) - } else { - found = { - onStateUpdate: noop, - ...instance, - } - query.instances.push(instance) - } + query.setData = updater => { + // Set data and mark it as cached + query.dispatch({ type: actionSuccess, updater }) + + // Schedule a fresh invalidation! + query.scheduleStaleTimeout() } - query.subscribe = instanceId => { + query.clear = () => { + clearTimeout(query.staleTimeout) + clearTimeout(query.cacheTimeout) + query.clearIntervals() + query.cancel() + query.dispatch = noop + delete queryCache.queries[query.queryHash] + } + + query.subscribe = (onStateUpdate = noop) => { + const instance = { + id: uid(), + onStateUpdate, + } + + query.instances.push(instance) + query.heal() - // Return the unsubscribe function - return () => { - query.instances = query.instances.filter(d => d.id !== instanceId) + instance.clearInterval = () => { + clearInterval(instance.refetchIntervalId) + delete instance.refetchIntervalId + } + + instance.updateConfig = config => { + const oldConfig = instance.config + + // Update the config + instance.config = config + + if (!isServer) { + if (oldConfig?.refetchInterval === config.refetchInterval) { + return + } + + query.clearIntervals() + + const minInterval = Math.min( + ...query.instances.map(d => d.config.refetchInterval || Infinity) + ) + + if ( + !instance.refetchIntervalId && + minInterval > 0 && + minInterval < Infinity + ) { + instance.refetchIntervalId = setInterval(() => { + if ( + isDocumentVisible() || + query.instances.some( + instance => instance.config.refetchIntervalInBackground + ) + ) { + query.fetch() + } + }, minInterval) + } + } + } + + instance.run = async () => { + try { + // Perform the refetch for this query if necessary + if ( + query.config.enabled && // Don't auto refetch if disabled + // !query.wasPrefetched && // Don't double refetch for prefetched queries + !query.wasSuspended && // Don't double refetch for suspense + query.state.isStale && // Only refetch if stale + (query.config.refetchOnMount || query.instances.length === 1) + ) { + await query.fetch() + } + + query.wasPrefetched = false + query.wasSuspended = false + } catch (error) { + Console.error(error) + } + } + + instance.unsubscribe = () => { + query.instances = query.instances.filter(d => d.id !== instance.id) if (!query.instances.length) { + query.clearIntervals() query.cancel() - // Schedule garbage collection - query.scheduleGarbageCollection() + if (!isServer) { + // Schedule garbage collection + query.scheduleGarbageCollection() + } } } + + return instance } - // Set up the fetch function + // Set up the core fetcher function const tryFetchData = async (queryFn, ...args) => { try { // Perform the query @@ -386,7 +473,7 @@ export function makeQueryCache() { if (query.cancelled) throw query.cancelled // If we fail, increase the failureCount - dispatch({ type: actionFailed }) + query.dispatch({ type: actionFailed }) // Do we need to retry the request? if ( @@ -397,7 +484,7 @@ export function makeQueryCache() { ) { // Only retry if the document is visible if (!isDocumentVisible()) { - // set this flag to continue fetch retries on focus + // set this flag to continue retries on focus query.shouldContinueRetryOnFocus = true return new Promise(noop) } @@ -432,13 +519,7 @@ export function makeQueryCache() { } } - query.fetch = async ({ force, __queryFn = query.queryFn } = {}) => { - // Don't refetch fresh queries that don't have a queryHash - - if (!query.queryHash || (!query.state.isStale && !force)) { - return - } - + query.fetch = async ({ __queryFn = query.queryFn } = {}) => { // Create a new promise for the query cache if necessary if (!query.promise) { query.promise = (async () => { @@ -448,19 +529,15 @@ export function makeQueryCache() { const callbackInstances = [...query.instances] if (query.wasSuspended) { - callbackInstances.unshift(query.suspenseInstance) + callbackInstances.unshift(query.fallbackInstance) } try { // Set up the query refreshing state - dispatch({ type: actionFetch }) + query.dispatch({ type: actionFetch }) - // Try to fetch - let data = await tryFetchData( - __queryFn, - ...query.queryKey, - ...query.queryVariables - ) + // Try to get the data + let data = await tryFetchData(__queryFn, ...query.queryKey) query.setData(old => query.config.isDataEqual(old, data) ? old : data @@ -468,19 +545,21 @@ export function makeQueryCache() { callbackInstances.forEach( instance => - instance.onSuccess && instance.onSuccess(query.state.data) + instance.config.onSuccess && + instance.config.onSuccess(query.state.data) ) callbackInstances.forEach( instance => - instance.onSettled && instance.onSettled(query.state.data, null) + instance.config.onSettled && + instance.config.onSettled(query.state.data, null) ) delete query.promise return data } catch (error) { - dispatch({ + query.dispatch({ type: actionError, cancelled: error === query.cancelled, error, @@ -490,12 +569,14 @@ export function makeQueryCache() { if (error !== query.cancelled) { callbackInstances.forEach( - instance => instance.onError && instance.onError(error) + instance => + instance.config.onError && instance.config.onError(error) ) callbackInstances.forEach( instance => - instance.onSettled && instance.onSettled(undefined, error) + instance.config.onSettled && + instance.config.onSettled(undefined, error) ) throw error @@ -507,39 +588,33 @@ export function makeQueryCache() { return query.promise } - query.setState = updater => dispatch({ type: actionSetState, updater }) - - query.setData = updater => { - // Set data and mark it as cached - dispatch({ type: actionSuccess, updater }) + return query + } - // Schedule a fresh invalidation! - clearTimeout(query.staleTimeout) - query.scheduleStaleTimeout() - } + return queryCache +} - query.clear = () => { - clearTimeout(query.staleTimeout) - clearTimeout(query.cacheTimeout) - query.cancel() - } +export function queryReducer(state, action) { + const newState = switchActions(state, action) - return query - } + Object.assign(newState, { + isLoading: newState.status === statusLoading, + isSuccess: newState.status === statusSuccess, + isError: newState.status === statusError, + isIdle: newState.status === statusIdle, + }) - return cache + return newState } -export function defaultQueryReducer(state, action) { +function switchActions(state, action) { switch (action.type) { case actionInit: return { status: action.initialStatus, error: null, isFetching: - action.hasInitialData || action.manual - ? false - : action.initialStatus === 'loading', + !action.hasInitialData || action.initialStatus === 'loading', canFetchMore: false, failureCount: 0, isStale: action.isStale, @@ -566,7 +641,8 @@ export function defaultQueryReducer(state, action) { case actionFetch: return { ...state, - status: state.status === statusError ? statusLoading : state.status, + status: + typeof state.data !== 'undefined' ? statusSuccess : statusLoading, isFetching: true, failureCount: 0, } diff --git a/src/setFocusHandler.js b/src/setFocusHandler.js index 774adbfcb3..1e635fe9ca 100644 --- a/src/setFocusHandler.js +++ b/src/setFocusHandler.js @@ -1,36 +1,29 @@ import { isOnline, isDocumentVisible, Console, isServer } from './utils' -import { defaultConfigRef } from './config' import { queryCaches } from './queryCache' const visibilityChangeEvent = 'visibilitychange' const focusEvent = 'focus' const onWindowFocus = () => { - const { refetchAllOnWindowFocus } = defaultConfigRef.current - if (isDocumentVisible() && isOnline()) { queryCaches.forEach(queryCache => queryCache - .refetchQueries(query => { + .invalidateQueries(query => { if (!query.instances.length) { return false } - if (query.config.manual === true) { + if (!query.config.enabled) { return false } if (query.shouldContinueRetryOnFocus) { - // delete promise, so `fetch` will create new one + // delete promise, so refetching will create new one delete query.promise return true } - if (typeof query.config.refetchOnWindowFocus === 'undefined') { - return refetchAllOnWindowFocus - } else { - return query.config.refetchOnWindowFocus - } + return query.config.refetchOnWindowFocus }) .catch(Console.error) ) diff --git a/src/tests/ReactQueryCacheProvider.test.js b/src/tests/ReactQueryCacheProvider.test.js index cd16485ef7..6cb988c940 100644 --- a/src/tests/ReactQueryCacheProvider.test.js +++ b/src/tests/ReactQueryCacheProvider.test.js @@ -1,18 +1,18 @@ import React, { useEffect } from 'react' -import { render, cleanup, waitFor } from '@testing-library/react' +import { render, waitFor } from '@testing-library/react' import { ReactQueryCacheProvider, makeQueryCache, queryCache, useQuery, useQueryCache, + queryCaches, } from '../index' import { sleep } from './utils' describe('ReactQueryCacheProvider', () => { afterEach(() => { - cleanup() - queryCache.clear() + queryCaches.forEach(cache => cache.clear()) }) test('when not used, falls back to global cache', async () => { @@ -35,6 +35,7 @@ describe('ReactQueryCacheProvider', () => { expect(queryCache.getQuery('test')).toBeDefined() }) + test('sets a specific cache for all queries to use', async () => { const cache = makeQueryCache() @@ -61,7 +62,9 @@ describe('ReactQueryCacheProvider', () => { expect(queryCache.getQuery('test')).not.toBeDefined() expect(cache.getQuery('test')).toBeDefined() + cache.clear() }) + test('implicitly creates a new cache for all queries to use', async () => { function Page() { const { data } = useQuery('test', async () => { @@ -86,6 +89,7 @@ describe('ReactQueryCacheProvider', () => { expect(queryCache.getQuery('test')).not.toBeDefined() }) + test('allows multiple caches to be partitioned', async () => { const cache1 = makeQueryCache() const cache2 = makeQueryCache() @@ -133,7 +137,11 @@ describe('ReactQueryCacheProvider', () => { expect(cache1.getQuery('test2')).not.toBeDefined() expect(cache2.getQuery('test1')).not.toBeDefined() expect(cache2.getQuery('test2')).toBeDefined() + + cache1.clear() + cache2.clear() }) + test('when cache changes, previous cache is cleaned', () => { let caches = [] const customCache = makeQueryCache() @@ -173,5 +181,6 @@ describe('ReactQueryCacheProvider', () => { expect(caches).toHaveLength(2) expect(caches[0].clear).toHaveBeenCalled() + customCache.clear() }) }) diff --git a/src/tests/config.test.js b/src/tests/config.test.js index 9e038cebfb..1eeabf598c 100644 --- a/src/tests/config.test.js +++ b/src/tests/config.test.js @@ -1,31 +1,27 @@ import React, { useState } from 'react' -import { - act, - fireEvent, - render, - waitFor, - cleanup, -} from '@testing-library/react' +import { act, fireEvent, render, waitFor } from '@testing-library/react' import { ReactQueryConfigProvider, useQuery, queryCache, - ReactQueryCacheProvider, + queryCaches, } from '../index' import { sleep } from './utils' describe('config', () => { afterEach(() => { - queryCache.clear() + queryCaches.forEach(cache => cache.clear()) }) - // See https://github.com/tannerlinsley/react-query/issues/105 + // // See https://github.com/tannerlinsley/react-query/issues/105 it('should allow overriding the config with ReactQueryConfigProvider', async () => { const onSuccess = jest.fn() const config = { - onSuccess, + queries: { + onSuccess, + }, } function Page() { @@ -43,9 +39,7 @@ describe('config', () => { const rendered = render( - - - + ) @@ -54,14 +48,16 @@ describe('config', () => { expect(onSuccess).toHaveBeenCalledWith('data') }) + // TODO: Write a test that doesn't have overlapping act() calls it('should reset to defaults when all providers are unmounted', async () => { const onSuccess = jest.fn() const config = { - refetchAllOnWindowFocus: false, - refetchOnMount: false, - retry: false, - manual: true, + queries: { + refetchOnWindowFocus: false, + refetchOnMount: false, + retry: false, + }, } const queryFn = async () => { @@ -69,6 +65,23 @@ describe('config', () => { return 'data' } + function Container() { + const [mounted, setMounted] = React.useState(true) + + return ( + <> + + {mounted ? ( + + + + ) : ( + + )} + + ) + } + function Page() { const { data } = useQuery('test', queryFn) @@ -79,32 +92,25 @@ describe('config', () => { ) } - const rendered = render( - - - - ) + const rendered = render() - await rendered.findByText('Data: none') + await waitFor(() => rendered.findByText('Data: none')) - act(() => { - queryCache.prefetchQuery('test', queryFn, { force: true }) - }) + await act(() => queryCache.prefetchQuery('test', queryFn)) - await rendered.findByText('Data: data') + await waitFor(() => rendered.findByText('Data: data')) // tear down and unmount - cleanup() - - // wipe query cache/stored config - await act(() => queryCache.clear()) - onSuccess.mockClear() - - // rerender WITHOUT config provider, // so we are NOT passing the config above (refetchOnMount should be `true` by default) - const rerendered = render() + fireEvent.click(rendered.getByText('unmount')) - await rerendered.findByText('Data: data') + act(() => { + // wipe query cache/stored config + queryCache.clear() + onSuccess.mockClear() + }) + + await waitFor(() => rendered.findByText('Data: data')) }) it('should reset to previous config when nested provider is unmounted', async () => { @@ -112,15 +118,19 @@ describe('config', () => { const parentOnSuccess = jest.fn() const parentConfig = { - refetchOnMount: false, - onSuccess: parentOnSuccess, + queries: { + refetchOnMount: false, + onSuccess: parentOnSuccess, + }, } const childConfig = { - refetchOnMount: true, + queries: { + refetchOnMount: true, - // Override onSuccess of parent, making it a no-op - onSuccess: undefined, + // Override onSuccess of parent, making it a no-op + onSuccess: undefined, + }, } const queryFn = async () => { @@ -135,9 +145,7 @@ describe('config', () => { return (

Data: {data}

- +
) } @@ -153,11 +161,8 @@ describe('config', () => { )} {!childConfigEnabled && } -
) @@ -165,35 +170,33 @@ describe('config', () => { const rendered = render( - - - + ) - await rendered.findByText('Data: 1') + // await waitFor(() => rendered.getByText('Data: 1')) - expect(parentOnSuccess).not.toHaveBeenCalled() + // expect(parentOnSuccess).not.toHaveBeenCalled() - fireEvent.click(rendered.getByTestId('refetch')) + // fireEvent.click(rendered.getByText('refetch')) - await rendered.findByText('Data: 2') + // await waitFor(() => rendered.getByText('Data: 2')) - expect(parentOnSuccess).not.toHaveBeenCalled() + // expect(parentOnSuccess).not.toHaveBeenCalled() - parentOnSuccess.mockReset() + // parentOnSuccess.mockReset() - fireEvent.click(rendered.getByTestId('disableChildConfig')) + // fireEvent.click(rendered.getByText('disableChildConfig')) - await rendered.findByText('Data: 2') + // await waitFor(() => rendered.getByText('Data: 2')) - // it should not refetch on mount - expect(parentOnSuccess).not.toHaveBeenCalled() + // // it should not refetch on mount + // expect(parentOnSuccess).not.toHaveBeenCalled() - fireEvent.click(rendered.getByTestId('refetch')) + // fireEvent.click(rendered.getByText('refetch')) - await rendered.findByText('Data: 3') + // await waitFor(() => rendered.getByText('Data: 3')) - expect(parentOnSuccess).toHaveBeenCalledTimes(1) + // expect(parentOnSuccess).toHaveBeenCalledTimes(1) }) }) diff --git a/src/tests/queryCache.test.js b/src/tests/queryCache.test.js index 81b9de3233..c52ca53433 100644 --- a/src/tests/queryCache.test.js +++ b/src/tests/queryCache.test.js @@ -1,9 +1,12 @@ -import { makeQueryCache } from '../index' import { sleep } from './utils' +import { queryCache, queryCaches } from '../' describe('queryCache', () => { + afterEach(() => { + queryCaches.forEach(cache => cache.clear()) + }) + test('setQueryData does not crash if query could not be found', () => { - const queryCache = makeQueryCache() expect(() => queryCache.setQueryData(['USER', { userId: 1 }], prevUser => ({ ...prevUser, @@ -13,7 +16,6 @@ describe('queryCache', () => { }) test('setQueryData does not crash when variable is null', () => { - const queryCache = makeQueryCache() queryCache.setQueryData(['USER', { userId: null }], 'Old Data') expect(() => @@ -22,7 +24,6 @@ describe('queryCache', () => { }) test('prefetchQuery returns the cached data on cache hits', async () => { - const queryCache = makeQueryCache() const fetchFn = () => Promise.resolve('data') const first = await queryCache.prefetchQuery('key', fetchFn) const second = await queryCache.prefetchQuery('key', fetchFn) @@ -30,34 +31,38 @@ describe('queryCache', () => { expect(second).toBe(first) }) - test('prefetchQuery should force fetch', async () => { - const queryCache = makeQueryCache() - const fetchFn = () => Promise.resolve('fresh') - const first = await queryCache.prefetchQuery('key', fetchFn, { - initialData: 'initial', - force: true, - }) - - expect(first).toBe('fresh') + test('prefetchQuery should not force fetch', async () => { + queryCache.setQueryData('key', 'og') + const fetchFn = () => Promise.resolve('new') + const first = await queryCache.prefetchQuery( + 'key', + fetchFn, + { + initialData: 'initial', + }, + { + throwOnError: true, + } + ) + expect(first).toBe('og') }) test('prefetchQuery should throw error when throwOnError is true', async () => { - const queryCache = makeQueryCache() - const fetchFn = () => - new Promise(() => { - throw new Error('error') - }) - await expect( - queryCache.prefetchQuery('key', undefined, fetchFn, { - retry: false, - throwOnError: true, - }) - ).rejects.toThrow(new Error('error')) + queryCache.prefetchQuery( + 'key', + async () => { + throw new Error('error') + }, + { + retry: false, + }, + { throwOnError: true } + ) + ).rejects.toEqual(new Error('error')) }) test('should notify listeners when new query is added', () => { - const queryCache = makeQueryCache() const callback = jest.fn() queryCache.subscribe(callback) @@ -68,7 +73,6 @@ describe('queryCache', () => { }) test('should notify subsribers when new query with initialData is added', () => { - const queryCache = makeQueryCache() const callback = jest.fn() queryCache.subscribe(callback) @@ -79,21 +83,18 @@ describe('queryCache', () => { }) test('setQueryData creates a new query if query was not found, using exact', () => { - const queryCache = makeQueryCache() queryCache.setQueryData('foo', 'bar', { exact: true }) expect(queryCache.getQueryData('foo')).toBe('bar') }) test('setQueryData creates a new query if query was not found', () => { - const queryCache = makeQueryCache() queryCache.setQueryData('baz', 'qux') expect(queryCache.getQueryData('baz')).toBe('qux') }) test('removeQueries does not crash when exact is provided', async () => { - const queryCache = makeQueryCache() const fetchFn = () => Promise.resolve('data') // check the query was added to the cache @@ -108,7 +109,6 @@ describe('queryCache', () => { }) test('setQueryData schedules stale timeouts appropriately', async () => { - const queryCache = makeQueryCache() queryCache.setQueryData('key', 'test data', { staleTime: 100 }) expect(queryCache.getQuery('key').state.data).toEqual('test data') @@ -124,7 +124,6 @@ describe('queryCache', () => { }) test('setQueryData updater function works as expected', () => { - const queryCache = makeQueryCache() const updater = jest.fn(oldData => `new data + ${oldData}`) queryCache.setQueryData('updater', 'test data') @@ -137,7 +136,6 @@ describe('queryCache', () => { }) test('getQueries should return queries that partially match queryKey', async () => { - const queryCache = makeQueryCache() const fetchData1 = () => Promise.resolve('data1') const fetchData2 = () => Promise.resolve('data2') const fetchDifferentData = () => Promise.resolve('data3') @@ -150,7 +148,6 @@ describe('queryCache', () => { }) test('stale timeout dispatch is not called if query is no longer in the query cache', async () => { - const queryCache = makeQueryCache() const queryKey = 'key' const fetchData = () => Promise.resolve('data') await queryCache.prefetchQuery(queryKey, fetchData) @@ -162,32 +159,30 @@ describe('queryCache', () => { }) test('query is garbage collected when unsubscribed to', async () => { - const queryCache = makeQueryCache() const queryKey = 'key' const fetchData = () => Promise.resolve('data') await queryCache.prefetchQuery(queryKey, fetchData, { cacheTime: 0 }) const query = queryCache.getQuery(queryKey) expect(query.state.markedForGarbageCollection).toBe(false) - const unsubscribe = query.subscribe(1) - unsubscribe() + const instance = query.subscribe() + instance.unsubscribe() expect(query.state.markedForGarbageCollection).toBe(true) - await sleep(1) + await sleep(10) expect(queryCache.getQuery(queryKey)).toBeUndefined() }) test('query is not garbage collected unless markedForGarbageCollection is true', async () => { - const queryCache = makeQueryCache() const queryKey = 'key' const fetchData = () => Promise.resolve(undefined) await queryCache.prefetchQuery(queryKey, fetchData, { cacheTime: 0 }) const query = queryCache.getQuery(queryKey) expect(query.state.markedForGarbageCollection).toBe(false) - const unsubscribe = query.subscribe(1) - unsubscribe() + const instance = query.subscribe() + instance.unsubscribe() expect(query.state.markedForGarbageCollection).toBe(true) queryCache.clear() queryCache.setQueryData(queryKey, 'data') - await sleep(1) + await sleep(10) const newQuery = queryCache.getQuery(queryKey) expect(newQuery.state.markedForGarbageCollection).toBe(false) expect(newQuery.state.data).toBe('data') diff --git a/src/tests/ssr.test.js b/src/tests/ssr.test.js new file mode 100644 index 0000000000..7c60d28b79 --- /dev/null +++ b/src/tests/ssr.test.js @@ -0,0 +1,204 @@ +/** + * @jest-environment node + */ + +import React from 'react' +import { renderToString } from 'react-dom/server' +import { + usePaginatedQuery, + ReactQueryCacheProvider, + queryCache, + queryCaches, + makeQueryCache, + useQuery, +} from '../index' +import { sleep } from './utils' + +describe('Server Side Rendering', () => { + describe('global cache', () => { + afterEach(() => { + queryCaches.forEach(cache => cache.clear()) + }) + + it('should not trigger fetch', () => { + const queryFn = jest.fn() + + function Page() { + const query = useQuery('test', queryFn) + + const content = `status ${query.status}` + + return ( +
+
{content}
+
+ ) + } + + const markup = renderToString() + + expect(markup).toContain('status loading') + expect(queryFn).toHaveBeenCalledTimes(0) + }) + + // See https://github.com/tannerlinsley/react-query/issues/70 + it('should not add initialData to the cache', () => { + function Page() { + const [page, setPage] = React.useState(1) + const { resolvedData } = usePaginatedQuery( + ['data', page], + async (queryName, page) => { + return page + }, + { initialData: '1' } + ) + + return ( +
+

{resolvedData}

+ +
+ ) + } + + renderToString() + + expect(queryCache.queries).toEqual({}) + }) + + it('should not add prefetched data to the cache', async () => { + const fetchFn = () => Promise.resolve('data') + const data = await queryCache.prefetchQuery('key', fetchFn) + + expect(data).toBe('data') + expect(queryCache.getQuery('key')).toBeFalsy() + }) + }) + + describe('unfrozen cache', () => { + it('should not trigger fetch', () => { + const queryCache = makeQueryCache({ frozen: false }) + const queryFn = jest.fn() + + function Page() { + const query = useQuery('test', queryFn) + + const content = `status ${query.status}` + + return ( +
+
{content}
+
+ ) + } + + const markup = renderToString( + + + + ) + + expect(markup).toContain('status loading') + expect(queryFn).toHaveBeenCalledTimes(0) + }) + + it('should add prefetched data to cache', async () => { + const queryCache = makeQueryCache({ frozen: false }) + const fetchFn = () => Promise.resolve('data') + const data = await queryCache.prefetchQuery('key', fetchFn) + + expect(data).toBe('data') + expect(queryCache.getQuery('key').state.data).toBe('data') + }) + + it('should return existing data from the cache', async () => { + const queryCache = makeQueryCache({ frozen: false }) + const queryFn = jest.fn(() => sleep(10)) + + function Page() { + const query = useQuery('test', queryFn) + + const content = `status ${query.status}` + + return ( +
+
{content}
+
+ ) + } + + await queryCache.prefetchQuery('test', queryFn) + + const markup = renderToString( + + + + ) + + expect(markup).toContain('status success') + expect(queryFn).toHaveBeenCalledTimes(1) + }) + + it('should add initialData to the cache', () => { + const queryCache = makeQueryCache({ frozen: false }) + function Page() { + const [page, setPage] = React.useState(1) + const { resolvedData } = usePaginatedQuery( + ['data', page], + async (queryName, page) => { + return page + }, + { initialData: '1' } + ) + + return ( +
+

{resolvedData}

+ +
+ ) + } + + renderToString( + + + + ) + + expect(Object.keys(queryCache.queries)).toEqual(['["data",1]']) + }) + + it('should not call setTimeout', async () => { + jest.spyOn(global, 'setTimeout') + + const queryCache = makeQueryCache({ frozen: false }) + const queryFn = jest.fn(() => Promise.resolve()) + + function Page() { + const query = useQuery('test', queryFn) + + const content = `status ${query.status}` + + return ( +
+
{content}
+
+ ) + } + + await queryCache.prefetchQuery('test', queryFn) + + const markup = renderToString( + + + + ) + + expect(markup).toContain('status success') + expect(queryFn).toHaveBeenCalledTimes(1) + expect(global.setTimeout).toHaveBeenCalledTimes(0) + + global.setTimeout.mockRestore() + }) + }) +}) diff --git a/src/tests/suspense.test.js b/src/tests/suspense.test.js index 7128e3d4ec..81d405ad4f 100644 --- a/src/tests/suspense.test.js +++ b/src/tests/suspense.test.js @@ -1,17 +1,13 @@ -import { - render, - waitFor, - fireEvent, - cleanup, -} from '@testing-library/react' +import { render, waitFor, fireEvent, act } from '@testing-library/react' +import { ErrorBoundary } from 'react-error-boundary' import * as React from 'react' -import { useQuery, ReactQueryCacheProvider, queryCache } from '../index' +import { useQuery, queryCache, queryCaches } from '../index' import { sleep } from './utils' describe("useQuery's in Suspense mode", () => { afterEach(() => { - cleanup() + queryCaches.forEach(cache => cache.clear()) }) it('should not call the queryFn twice when used in Suspense mode', async () => { @@ -25,11 +21,9 @@ describe("useQuery's in Suspense mode", () => { } const rendered = render( - - - - - + + + ) await waitFor(() => rendered.getByText('rendered')) @@ -86,15 +80,75 @@ describe("useQuery's in Suspense mode", () => { } const rendered = render( - - - - - + + + ) await waitFor(() => rendered.getByText('rendered')) expect(successFn).toHaveBeenCalledTimes(1) }) + + // https://github.com/tannerlinsley/react-query/issues/468 + it('should reset error state if new component instances are mounted', async () => { + let succeed = false + jest.spyOn(console, 'error') + console.error.mockImplementation(() => {}) + + function Page() { + useQuery( + 'test', + async () => { + await sleep(10) + + if (!succeed) { + throw new Error('Suspense Error Bingo') + } else { + return 'data' + } + }, + { + retryDelay: 10, + suspense: true, + } + ) + + return
rendered
+ } + + const rendered = render( + ( +
+
error boundary
+ +
+ )} + > + + + +
+ ) + + await waitFor(() => rendered.getByText('Loading...')) + + await waitFor(() => rendered.getByText('error boundary')) + + await act(() => sleep(10)) + + fireEvent.click(rendered.getByText('retry')) + + console.error.mockRestore() + + await waitFor(() => rendered.getByText('rendered')) + }) }) diff --git a/src/tests/useInfiniteQuery.test.js b/src/tests/useInfiniteQuery.test.js index 81a68c6f1b..f5c49a9e5b 100644 --- a/src/tests/useInfiniteQuery.test.js +++ b/src/tests/useInfiniteQuery.test.js @@ -1,16 +1,7 @@ -import { - render, - waitFor, - fireEvent, - cleanup, -} from '@testing-library/react' +import { render, waitFor, fireEvent } from '@testing-library/react' import * as React from 'react' -import { - useInfiniteQuery, - ReactQueryCacheProvider, - useQueryCache, -} from '../index' +import { useInfiniteQuery, useQueryCache, queryCaches } from '../index' import { sleep } from './utils' const pageSize = 10 @@ -34,7 +25,7 @@ const fetchItems = async (page, ts) => { describe('useInfiniteQuery', () => { afterEach(() => { - cleanup() + queryCaches.forEach(cache => cache.clear()) }) it('should allow you to fetch more pages', async () => { @@ -103,11 +94,7 @@ describe('useInfiniteQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Loading...') @@ -116,7 +103,7 @@ describe('useInfiniteQuery', () => { rendered.getByText('Page 0: 0') }) - fireEvent.click(rendered.getByText('Load More')) + await fireEvent.click(rendered.getByText('Load More')) await waitFor(() => rendered.getByText('Loading more...')) @@ -203,11 +190,7 @@ describe('useInfiniteQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Item: 9') rendered.getByText('Page 0: 0') @@ -302,9 +285,9 @@ describe('useInfiniteQuery', () => { onClick={() => { // Imagine that this mutation happens somewhere else // makes an actual network request - // and calls refetchQueries in an onSuccess + // and calls invalidateQueries in an onSuccess items.splice(4, 1) - queryCache.refetchQueries('items') + queryCache.invalidateQueries('items') }} > Remove item @@ -317,39 +300,35 @@ describe('useInfiniteQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Loading...') - await rendered.findByText('Item: 2') - await rendered.findByText('Page 0: 0') + await waitFor(() => rendered.findByText('Item: 2')) + await waitFor(() => rendered.findByText('Page 0: 0')) fireEvent.click(rendered.getByText('Load More')) - await rendered.findByText('Loading more...') - await rendered.findByText('Item: 5') - await rendered.findByText('Page 0: 0') - await rendered.findByText('Page 1: 1') + await waitFor(() => rendered.findByText('Loading more...')) + await waitFor(() => rendered.findByText('Item: 5')) + await waitFor(() => rendered.findByText('Page 0: 0')) + await waitFor(() => rendered.findByText('Page 1: 1')) fireEvent.click(rendered.getByText('Load More')) - await rendered.findByText('Loading more...') - await rendered.findByText('Item: 8') - await rendered.findByText('Page 0: 0') - await rendered.findByText('Page 1: 1') - await rendered.findByText('Page 2: 2') + await waitFor(() => rendered.findByText('Loading more...')) + await waitFor(() => rendered.findByText('Item: 8')) + await waitFor(() => rendered.findByText('Page 0: 0')) + await waitFor(() => rendered.findByText('Page 1: 1')) + await waitFor(() => rendered.findByText('Page 2: 2')) fireEvent.click(rendered.getByText('Refetch')) - await rendered.findByText('Background Updating...') - await rendered.findByText('Item: 8') - await rendered.findByText('Page 0: 3') - await rendered.findByText('Page 1: 4') - await rendered.findByText('Page 2: 5') + await waitFor(() => rendered.findByText('Background Updating...')) + await waitFor(() => rendered.findByText('Item: 8')) + await waitFor(() => rendered.findByText('Page 0: 3')) + await waitFor(() => rendered.findByText('Page 1: 4')) + await waitFor(() => rendered.findByText('Page 2: 5')) // ensure that Item: 4 is rendered before removing it expect(rendered.queryAllByText('Item: 4')).toHaveLength(1) @@ -357,12 +336,12 @@ describe('useInfiniteQuery', () => { // remove Item: 4 fireEvent.click(rendered.getByText('Remove item')) - await rendered.findByText('Background Updating...') + await waitFor(() => rendered.findByText('Background Updating...')) // ensure that an additional item is rendered (it means that cursors were properly rebuilt) - await rendered.findByText('Item: 9') - await rendered.findByText('Page 0: 6') - await rendered.findByText('Page 1: 7') - await rendered.findByText('Page 2: 8') + await waitFor(() => rendered.findByText('Item: 9')) + await waitFor(() => rendered.findByText('Page 0: 6')) + await waitFor(() => rendered.findByText('Page 1: 7')) + await waitFor(() => rendered.findByText('Page 2: 8')) // ensure that Item: 4 is no longer rendered expect(rendered.queryAllByText('Item: 4')).toHaveLength(0) diff --git a/src/tests/useIsFetching.test.js b/src/tests/useIsFetching.test.js index 046e35d061..37833155d3 100644 --- a/src/tests/useIsFetching.test.js +++ b/src/tests/useIsFetching.test.js @@ -1,17 +1,13 @@ -import { - cleanup, - render, - fireEvent, - waitFor, -} from '@testing-library/react' +import { render, fireEvent, waitFor } from '@testing-library/react' import * as React from 'react' -import { useQuery, ReactQueryCacheProvider, useIsFetching } from '../index' +import { useQuery, useIsFetching, queryCaches } from '../index' import { sleep } from './utils' describe('useIsFetching', () => { afterEach(() => { - cleanup() + // We notify false because it causes act issue if we notify useIsFetching after it's unmounted + queryCaches.forEach(cache => cache.clear({ notify: false })) }) // See https://github.com/tannerlinsley/react-query/issues/105 @@ -21,26 +17,28 @@ describe('useIsFetching', () => { const isFetching = useIsFetching() - useQuery(ready && 'test', async () => { - await sleep(1000) - return 'test' - }) + useQuery( + 'test', + async () => { + await sleep(1000) + return 'test' + }, + { + enabled: ready, + } + ) return (
-
isFetching: {isFetching.toString()}
+
isFetching: {isFetching}
) } - const rendered = render( - - - - ) + const rendered = render() - rendered.getByText('isFetching: 0') + await waitFor(() => rendered.getByText('isFetching: 0')) fireEvent.click(rendered.getByText('setReady')) await waitFor(() => rendered.getByText('isFetching: 1')) await waitFor(() => rendered.getByText('isFetching: 0')) diff --git a/src/tests/useMutation.test.js b/src/tests/useMutation.test.js index 4e2ce2b8bb..46dc801c0d 100644 --- a/src/tests/useMutation.test.js +++ b/src/tests/useMutation.test.js @@ -1,15 +1,12 @@ -import { - cleanup, - render, - fireEvent, - waitFor, -} from '@testing-library/react' +import { render, fireEvent, waitFor } from '@testing-library/react' import * as React from 'react' -import { useMutation } from '../index' +import { useMutation, queryCaches } from '../index' describe('useMutation', () => { - afterEach(cleanup) + afterEach(() => { + queryCaches.forEach(cache => cache.clear()) + }) it('should be able to reset `data`', async () => { function Page() { diff --git a/src/tests/usePaginatedQuery.test.js b/src/tests/usePaginatedQuery.test.js index 96547f6d56..a725e41c4f 100644 --- a/src/tests/usePaginatedQuery.test.js +++ b/src/tests/usePaginatedQuery.test.js @@ -1,17 +1,12 @@ -import { - cleanup, - render, - fireEvent, - waitFor, -} from '@testing-library/react' +import { render, fireEvent, waitFor } from '@testing-library/react' import * as React from 'react' import { sleep } from './utils' -import { usePaginatedQuery, ReactQueryCacheProvider } from '../index' +import { usePaginatedQuery, queryCaches } from '../index' describe('usePaginatedQuery', () => { afterEach(() => { - cleanup() + queryCaches.forEach(cache => cache.clear()) }) it('should use previous page data while fetching the next page', async () => { @@ -20,7 +15,7 @@ describe('usePaginatedQuery', () => { const { resolvedData = 'undefined' } = usePaginatedQuery( ['data', page], async (queryName, page) => { - await sleep(1) + await sleep(10) return page } ) @@ -33,11 +28,7 @@ describe('usePaginatedQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Data undefined') await waitFor(() => rendered.getByText('Data 1')) @@ -58,7 +49,7 @@ describe('usePaginatedQuery', () => { const { resolvedData } = usePaginatedQuery( ['data', { page }], async (queryName, { page }) => { - await sleep(1) + await sleep(10) return page }, { initialData: 0 } @@ -72,11 +63,7 @@ describe('usePaginatedQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Data 0') @@ -101,7 +88,7 @@ describe('usePaginatedQuery', () => { const { resolvedData, status } = usePaginatedQuery( ['data', { page }], async (queryName, { page }) => { - await sleep(1) + await sleep(10) return page }, { initialData: 0 } @@ -116,11 +103,7 @@ describe('usePaginatedQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('Data 0') @@ -129,8 +112,8 @@ describe('usePaginatedQuery', () => { fireEvent.click(rendered.getByText('next')) await waitFor(() => rendered.getByTestId('status')) - expect(rendered.getByTestId('status').textContent).toBe('success') - expect(rendered.getByTestId('status').textContent).not.toBe('loading') + + rendered.getByText('success') }) it('should clear resolvedData data when query is falsy', async () => { @@ -138,10 +121,13 @@ describe('usePaginatedQuery', () => { const [searchTerm, setSearchTerm] = React.useState('') const [page, setPage] = React.useState(1) const { resolvedData = 'undefined' } = usePaginatedQuery( - searchTerm && ['data', searchTerm, page], + ['data', searchTerm, page], async (queryName, searchTerm, page) => { - await sleep(1) + await sleep(10) return `${searchTerm} ${page}` + }, + { + enabled: searchTerm, } ) @@ -200,7 +186,7 @@ describe('usePaginatedQuery', () => { const { resolvedData } = usePaginatedQuery( ['data', { page }], async (queryName, { page }) => { - await sleep(1) + await sleep(10) return page }, { @@ -218,11 +204,7 @@ describe('usePaginatedQuery', () => { } // render will throw if Page is suspended - const rendered = render( - - - - ) + const rendered = render() fireEvent.click(rendered.getByText('next')) await waitFor(() => rendered.getByText('Data 2')) diff --git a/src/tests/useQuery-SSR.test.js b/src/tests/useQuery-SSR.test.js deleted file mode 100644 index 346e92c87f..0000000000 --- a/src/tests/useQuery-SSR.test.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @jest-environment node - */ - -import React from 'react' -import { renderToString } from 'react-dom/server' -import { - usePaginatedQuery, - ReactQueryCacheProvider, - makeQueryCache, -} from '../index' - -describe('useQuery SSR', () => { - // See https://github.com/tannerlinsley/react-query/issues/70 - it('should not cache queries on server', async () => { - const queryCache = makeQueryCache() - function Page() { - const [page, setPage] = React.useState(1) - const { resolvedData } = usePaginatedQuery( - ['data', page], - async (queryName, page) => { - return page - }, - { initialData: '1' } - ) - - return ( -
-

{resolvedData}

- -
- ) - } - - renderToString( - - - - ) - - expect(queryCache.queries).toEqual({}) - }) -}) diff --git a/src/tests/useQuery.test.js b/src/tests/useQuery.test.js index cb6a0ee2f7..8569462f56 100644 --- a/src/tests/useQuery.test.js +++ b/src/tests/useQuery.test.js @@ -1,30 +1,20 @@ -import { - render, - act, - waitFor, - fireEvent, - cleanup, -} from '@testing-library/react' -import { ErrorBoundary } from 'react-error-boundary' +import { render, act, waitFor, fireEvent } from '@testing-library/react' import * as React from 'react' -import { - useQuery, - useQueryCache, - makeQueryCache, - ReactQueryCacheProvider, -} from '../index' +import { useQuery, queryCache, queryCaches } from '../index' import { sleep } from './utils' describe('useQuery', () => { afterEach(() => { - cleanup() + queryCaches.forEach(cache => cache.clear()) }) // See https://github.com/tannerlinsley/react-query/issues/105 it('should allow to set default data value', async () => { + const queryKey = Math.random() + function Page() { - const { data = 'default' } = useQuery('test', async () => { + const { data = 'default' } = useQuery(queryKey, async () => { await sleep(10) return 'test' }) @@ -36,24 +26,26 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('default') + await waitFor(() => rendered.getByText('test')) }) // See https://github.com/tannerlinsley/react-query/issues/137 it('should not override initial data in dependent queries', async () => { + const queryKey1 = Math.random() + const queryKey2 = Math.random() + function Page() { - const first = useQuery(false && 'first', () => 'data', { + const first = useQuery(queryKey1, () => 'data', { + enabled: false, initialData: 'init', }) - const second = useQuery(false && 'second', () => 'data', { + const second = useQuery(queryKey2, () => 'data', { + enabled: false, initialData: 'init', }) @@ -67,11 +59,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('First Data: init') rendered.getByText('Second Data: init') @@ -80,9 +68,11 @@ describe('useQuery', () => { }) // See https://github.com/tannerlinsley/react-query/issues/170 - it('should start with status success if falsey query key is supplied', async () => { + it('should start with status idle if enabled is false', async () => { function Page() { - const first = useQuery(false && 'first', () => 'data') + const first = useQuery('first', () => 'data', { + enabled: false, + }) const second = useQuery('second', () => 'data') return ( @@ -93,40 +83,11 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() // use "act" to wait for state update and prevent console warning - rendered.getByText('First Status: success') - await waitFor(() => rendered.getByText('Second Status: loading')) - await waitFor(() => rendered.getByText('Second Status: success')) - }) - - // See https://github.com/tannerlinsley/react-query/issues/217 - it('should start with status success if a null query key is supplied', async () => { - function Page() { - const first = useQuery(null && 'first', () => 'data') - const second = useQuery('second', () => 'data') - - return ( -
-
First Status: {first.status}
-
Second Status: {second.status}
-
- ) - } - - const rendered = render( - - - - ) - - rendered.getByText('First Status: success') + rendered.getByText('First Status: idle') await waitFor(() => rendered.getByText('Second Status: loading')) await waitFor(() => rendered.getByText('Second Status: success')) }) @@ -139,53 +100,12 @@ describe('useQuery', () => { return 'test' }) - return ( -
-

{status}

-
- ) + return
status: {status}
} - const { getByTestId } = render( - - - - ) + const rendered = render() - await waitFor(() => getByTestId('status')) - act(() => { - expect(getByTestId('status').textContent).toBe('loading') - }) - }) - - // See https://github.com/tannerlinsley/react-query/issues/144 - it('should be in "success" state by default in manual mode', async () => { - function Page() { - const { status } = useQuery( - 'test', - async () => { - await sleep(10) - return 'test' - }, - { - manual: true, - } - ) - - return ( -
-

{status}

-
- ) - } - - const { findByText } = render( - - - - ) - - await findByText('success') + rendered.getByText('status: loading') }) // See https://github.com/tannerlinsley/react-query/issues/147 @@ -201,21 +121,16 @@ describe('useQuery', () => { return null } - render( - - - - ) + render() expect(queryFn).toHaveBeenCalledWith('test', variables) }) - // See https://github.com/tannerlinsley/react-query/issues/161 - it('should not fetch query when `manual` is set to `true`', async () => { + it('should not refetch query on focus when `enabled` is set to `false`', async () => { const queryFn = jest.fn() function Page() { - const { data = 'default' } = useQuery('test', queryFn, { manual: true }) + const { data = 'default' } = useQuery('test', queryFn, { enabled: false }) return (
@@ -224,33 +139,8 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) - await waitFor(() => rendered.getByText('default')) - expect(queryFn).not.toHaveBeenCalled() - }) - - it('should not refetch query on focus when `manual` is set to `true`', async () => { - const queryFn = jest.fn() - - function Page() { - const { data = 'default' } = useQuery('test', queryFn, { manual: true }) - - return ( -
-

{data}

-
- ) - } + const rendered = render() - const rendered = render( - - - - ) await waitFor(() => rendered.getByText('default')) act(() => { @@ -261,11 +151,14 @@ describe('useQuery', () => { }) it('should set status to error if queryFn throws', async () => { + jest.spyOn(console, 'error') + console.error.mockImplementation(() => {}) + function Page() { const { status, error } = useQuery( 'test', () => { - return Promise.reject('Error test') + return Promise.reject('Error test jaylen') }, { retry: false } ) @@ -278,20 +171,21 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('error')) - await waitFor(() => rendered.getByText('Error test')) + await waitFor(() => rendered.getByText('Error test jaylen')) + + console.error.mockRestore() }) it('should retry specified number of times', async () => { + jest.spyOn(console, 'error') + console.error.mockImplementation(() => {}) + const queryFn = jest.fn() queryFn.mockImplementation(() => { - return Promise.reject('Error test') + return Promise.reject('Error test Barrett') }) function Page() { @@ -308,11 +202,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('loading')) await waitFor(() => rendered.getByText('error')) @@ -321,13 +211,17 @@ describe('useQuery', () => { await waitFor(() => rendered.getByText('Failed 2 times')) expect(queryFn).toHaveBeenCalledTimes(2) + console.error.mockRestore() }) it('should not retry if retry function `false`', async () => { + jest.spyOn(console, 'error') + console.error.mockImplementation(() => {}) + const queryFn = jest.fn() queryFn.mockImplementationOnce(() => { - return Promise.reject('Error test') + return Promise.reject('Error test Tanner') }) queryFn.mockImplementation(() => { @@ -349,11 +243,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('loading')) await waitFor(() => rendered.getByText('error')) @@ -362,10 +252,10 @@ describe('useQuery', () => { await waitFor(() => rendered.getByText('NoRetry')) expect(queryFn).toHaveBeenCalledTimes(2) + console.error.mockRestore() }) it('should garbage collect queries without data immediately', async () => { - const queryCache = makeQueryCache() function Page() { const [filter, setFilter] = React.useState('') const { data } = useQuery( @@ -384,11 +274,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('update')) @@ -432,11 +318,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('failureCount 1')) await waitFor(() => rendered.getByText('status loading')) @@ -452,34 +334,65 @@ describe('useQuery', () => { }) // See https://github.com/tannerlinsley/react-query/issues/195 - it('should not refetch immediately after a prefetch', async () => { - const queryCache = makeQueryCache() + it('should refetch if stale after a prefetch', async () => { const queryFn = jest.fn() - queryFn.mockImplementation(() => sleep(10)) + queryFn.mockImplementation(() => sleep(10).then(() => 'data')) const prefetchQueryFn = jest.fn() - prefetchQueryFn.mockImplementation(() => sleep(10)) + prefetchQueryFn.mockImplementation(() => sleep(16).then(() => 'not yet...')) + + await act(() => + queryCache.prefetchQuery('test', prefetchQueryFn, { + staleTime: 10, + }) + ) + + await act(() => sleep(20)) function Page() { const query = useQuery('test', queryFn) return (
-
status {query.status}
+
{query.data}
) } - await queryCache.prefetchQuery('test', prefetchQueryFn) - await queryCache.prefetchQuery('test', prefetchQueryFn) + const rendered = render() - const rendered = render( - - - + await waitFor(() => rendered.getByText('data')) + + expect(prefetchQueryFn).toHaveBeenCalledTimes(1) + expect(queryFn).toHaveBeenCalledTimes(1) + }) + + it('should not refetch if not stale after a prefetch', async () => { + const queryFn = jest.fn() + queryFn.mockImplementation(() => sleep(10).then(() => 'data')) + + const prefetchQueryFn = jest.fn() + prefetchQueryFn.mockImplementation(() => sleep(16).then(() => 'not yet...')) + + await act(() => + queryCache.prefetchQuery('test', prefetchQueryFn, { + staleTime: 10, + }) ) - await waitFor(() => rendered.getByText('status success')) + function Page() { + const query = useQuery('test', queryFn) + + return ( +
+
{query.data}
+
+ ) + } + + const rendered = render() + + await waitFor(() => rendered.getByText('data')) expect(prefetchQueryFn).toHaveBeenCalledTimes(1) expect(queryFn).toHaveBeenCalledTimes(0) @@ -487,19 +400,23 @@ describe('useQuery', () => { // See https://github.com/tannerlinsley/react-query/issues/190 it('should reset failureCount on successful fetch', async () => { + jest.spyOn(console, 'error') + console.error.mockImplementation(() => {}) + function Page() { let counter = 0 + const query = useQuery( 'test', async () => { - if (counter === 0) { + if (counter < 2) { counter++ throw new Error('error') } else { return 'data' } }, - { retryDelay: 50 } + { retryDelay: 10 } ) return ( @@ -509,24 +426,23 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() - await waitFor(() => rendered.getByText('failureCount 1')) + await waitFor(() => rendered.getByText('failureCount 2')) await waitFor(() => rendered.getByText('failureCount 0')) + + console.error.mockRestore() }) // See https://github.com/tannerlinsley/react-query/issues/199 it('should use prefetched data for dependent query', async () => { function Page() { - const queryCache = useQueryCache() - const [key, setKey] = React.useState(false) + const [enabled, setEnabled] = React.useState(false) const [isPrefetched, setPrefetched] = React.useState(false) - const query = useQuery(key, () => {}) + const query = useQuery('key', () => {}, { + enabled, + }) React.useEffect(() => { async function prefetch() { @@ -536,102 +452,31 @@ describe('useQuery', () => { setPrefetched(true) } prefetch() - }, [queryCache]) + }, []) return (
{isPrefetched &&
isPrefetched
} - +
{query.data}
) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('isPrefetched')) fireEvent.click(rendered.getByText('setKey')) await waitFor(() => rendered.getByText('prefetched data')) }) - it('should support a function that resolves a query key', async () => { - function Page() { - const { status, data, query } = useQuery( - () => 'key', - () => 'data' - ) - - return ( -
-
Status: {status}
-
Data: {data}
-
Key: {query.queryKey}
-
- ) - } - - const rendered = render( - - - - ) - - rendered.getByText('Status: loading') - await waitFor(() => rendered.getByText('Status: success')) - rendered.getByText('Data: data') - rendered.getByText('Key: key') - }) - - it('should support dependent query keys via returng falsy in a query key function', async () => { - function Page() { - const [shouldFetch, setShouldFetch] = React.useState(false) - - const query = useQuery( - () => shouldFetch && 'key', - () => 'data' - ) - - return ( -
-
Status: {query.status}
-

Data: {query.data || 'no data'}

- {query.isStale ? ( - - ) : null} -
- ) - } - - const rendered = render( - - - - ) - - rendered.getByText('Status: success') - rendered.getByText('Data: no data') - - fireEvent.click(rendered.getByText('fetch')) - - await waitFor(() => rendered.getByText('Status: loading')) - await waitFor(() => [ - rendered.getByText('Status: success'), - rendered.getByText('Data: data'), - ]) - }) - - it('should support dependent query keys via throwing in a query key function', async () => { + it('should support dependent queries via the enable config option', async () => { function Page() { const [shouldFetch, setShouldFetch] = React.useState() - const query = useQuery( - () => shouldFetch.on && 'key', - () => 'data' - ) + const query = useQuery('key', () => 'data', { + enabled: shouldFetch?.on, + }) return (
@@ -644,13 +489,9 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() - rendered.getByText('Status: success') + rendered.getByText('Status: idle') rendered.getByText('Data: no data') fireEvent.click(rendered.getByText('fetch')) @@ -674,11 +515,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('data') expect(rendered.getByTestId('isFetching').textContent).toBe('false') @@ -697,24 +534,21 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() rendered.getByText('0') expect(rendered.getByTestId('isFetching').textContent).toBe('false') expect(rendered.getByTestId('status').textContent).toBe('success') }) - // See https://github.com/tannerlinsley/react-query/issues/214 - it('should not cause infinite loop after query key is changed to falsy', async () => { + // // See https://github.com/tannerlinsley/react-query/issues/214 + it('data should persist when enabled is changed to false', async () => { const callback = jest.fn() function Page() { const [shouldFetch, setShouldFetch] = React.useState(true) - const query = useQuery(shouldFetch && 'key', () => 'fetched data', { + const query = useQuery('key', () => 'fetched data', { + enabled: shouldFetch, initialData: shouldFetch ? 'initial' : 'initial falsy', }) @@ -734,41 +568,37 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('initial')) fireEvent.click(rendered.getByText('setShouldFetch(false)')) - rendered.getByText('initial falsy') - // wait for infinite loop to call mock function a bit - await sleep(200) + rendered.getByText('initial') expect(callback.mock.calls.length).toBeLessThan(5) }) - it('it should support falsy queryKey in query object syntax', async () => { + + it('it should support enabled:false in query object syntax', async () => { const queryFn = jest.fn() queryFn.mockImplementation(() => 'data') - const queryCache = makeQueryCache() function Page() { - useQuery({ - queryKey: false && 'key', + const { status } = useQuery({ + queryKey: 'key', queryFn, + config: { + enabled: false, + }, }) - return null + return
status: {status}
} - render( - - - - ) + + const rendered = render() const cachedQueries = Object.keys(queryCache.queries).length expect(queryFn).not.toHaveBeenCalled() - expect(cachedQueries).toEqual(0) + expect(cachedQueries).toEqual(1) + rendered.getByText('status: idle') }) + it('it should throw when using query syntax and missing required keys', async () => { // mock console.error to avoid the wall of red text, // you could also do this on beforeEach/afterEach @@ -779,13 +609,7 @@ describe('useQuery', () => { useQuery({}) return null } - expect(() => - render( - - - - ) - ).toThrowError(/queryKey|queryFn/) + expect(() => render()).toThrowError(/queryKey|queryFn/) console.error.mockRestore() }) @@ -803,11 +627,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('fetched data')) await waitFor(() => { @@ -833,11 +653,7 @@ describe('useQuery', () => { ) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('fetched data')) expect(rendered.getByTestId('isStale').textContent).toBe('false') @@ -845,24 +661,22 @@ describe('useQuery', () => { }) // See https://github.com/tannerlinsley/react-query/issues/360 - test('should not init to `isFetching === true` when falsey query key is supplied', async () => { + test('should init to status:idle when enabled is falsey', async () => { function Page() { - const query = useQuery(false, () => {}) + const query = useQuery('key', () => {}, { + enabled: false, + }) return (
-
isFetching === {query.isFetching.toString()}
+
status: {query.status}
) } - const rendered = render( - - - - ) + const rendered = render() - await waitFor(() => rendered.getByText('isFetching === false')) + await waitFor(() => rendered.getByText('status: idle')) }) test('should not schedule garbage collection, if cacheTimeout is set to `Infinity`', async () => { @@ -873,13 +687,7 @@ describe('useQuery', () => { return
{query.data}
} - const queryCache = makeQueryCache() - - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('fetched data')) @@ -892,130 +700,47 @@ describe('useQuery', () => { it('should not cause memo churn when data does not change', async () => { const queryFn = jest.fn() const memoFn = jest.fn() - const originalVisibilityState = document.visibilityState - - function mockVisibilityState(value) { - Object.defineProperty(document, 'visibilityState', { - value, - configurable: true, - }) - } - - // make page unfocused - mockVisibilityState('hidden') function Page() { - const query = useQuery( - 'test', - () => + const queryInfo = useQuery('test', async () => { + await sleep(10) + return ( queryFn() || { data: { nested: true, }, } - ) + ) + }) React.useMemo(() => { memoFn() - return query.data - }, [query.data]) + return queryInfo.data + }, [queryInfo.data]) return (
-
status {query.status}
-
isFetching {query.isFetching ? 'true' : 'false'}
+
status {queryInfo.status}
+
isFetching {queryInfo.isFetching ? 'true' : 'false'}
+
) } - const rendered = render( - - - - ) + const rendered = render() await waitFor(() => rendered.getByText('status loading')) await waitFor(() => rendered.getByText('status success')) - - act(() => { - // reset visibilityState to original value - mockVisibilityState(originalVisibilityState) - window.dispatchEvent(new FocusEvent('focus')) - }) - + fireEvent.click(rendered.getByText('refetch')) await waitFor(() => rendered.getByText('isFetching true')) await waitFor(() => rendered.getByText('isFetching false')) expect(queryFn).toHaveBeenCalledTimes(2) expect(memoFn).toHaveBeenCalledTimes(2) }) - // https://github.com/tannerlinsley/react-query/issues/468 - it('should reset error state if new component instances are mounted', async () => { - let succeed = false - jest.spyOn(console, 'error') - console.error.mockImplementation(() => {}) - - function Page() { - useQuery( - 'test', - async () => { - await sleep(10) - - if (!succeed) { - throw new Error() - } else { - return 'data' - } - }, - { - retryDelay: 10, - suspense: true, - } - ) - - return
rendered
- } - - const rendered = render( - ( -
-
error boundary
- -
- )} - > - - - -
- ) - - await waitFor(() => rendered.getByText('error boundary')) - - console.error.mockRestore() - - fireEvent.click(rendered.getByText('retry')) - - // Workaround for bug with jsdom re-rendering twice before timeout fires: utils.js > handleSuspense > setTimeout - // Timeout behavior works fine in browser but shouldn't be relied upon - await sleep(25) - if (rendered.queryByText("retry")) { - fireEvent.click(rendered.getByText('retry')) - } - - await waitFor(() => rendered.getByText('rendered')) - }) - it('should update data upon interval changes', async () => { let count = 0 + function Page() { const [int, setInt] = React.useState(200) const { data } = useQuery('/api', () => count++, { @@ -1027,43 +752,20 @@ describe('useQuery', () => {
) } - const { container } = render() - expect(container.firstChild.textContent).toEqual('count: ') - await waitFor(() => { - expect(container.firstChild.textContent).toEqual('count: 0') - }) - await sleep(210); - expect(container.firstChild.textContent).toEqual('count: 1') - await sleep(50); - expect(container.firstChild.textContent).toEqual('count: 1') - await sleep(150); - expect(container.firstChild.textContent).toEqual('count: 2') - act(() => { - fireEvent.click(container.firstElementChild) - // it will clear 200ms timer and setup a new 300ms timer - }) - await sleep(200); - expect(container.firstChild.textContent).toEqual('count: 2') - await sleep(110); - expect(container.firstChild.textContent).toEqual('count: 3') - // wait for new 300ms timer - await sleep(310); - expect(container.firstChild.textContent).toEqual('count: 4') - act(() => { - fireEvent.click(container.firstElementChild) - // it will clear 300ms timer and setup a new 400ms timer - }) - await sleep(300); - expect(container.firstChild.textContent).toEqual('count: 4') - await sleep(110); - expect(container.firstChild.textContent).toEqual('count: 5') - act(() => { - fireEvent.click(container.firstElementChild) - // it will clear 400ms timer and stop - }) - await sleep(110); - expect(container.firstChild.textContent).toEqual('count: 5') - await sleep(110); - expect(container.firstChild.textContent).toEqual('count: 5') + + const rendered = render() + + rendered.getByText('count:') + + // mount + await waitFor(() => rendered.getByText('count: 0')) + await waitFor(() => rendered.getByText('count: 1')) + await waitFor(() => rendered.getByText('count: 1')) + await waitFor(() => rendered.getByText('count: 2')) + await waitFor(() => rendered.getByText('count: 2')) + await waitFor(() => rendered.getByText('count: 3')) + await waitFor(() => rendered.getByText('count: 4')) + await waitFor(() => rendered.getByText('count: 5')) + await waitFor(() => rendered.getByText('count: 5')) }) }) diff --git a/src/tests/utils.test.js b/src/tests/utils.test.js index ae3f781a45..feb13862b9 100644 --- a/src/tests/utils.test.js +++ b/src/tests/utils.test.js @@ -1,16 +1,13 @@ -import { - cleanup, - render, - fireEvent, - waitFor, -} from '@testing-library/react' +import { render, fireEvent, waitFor } from '@testing-library/react' import * as React from 'react' -import { setConsole, useMutation } from '../index' +import { setConsole, useMutation, queryCaches } from '../index' import { deepEqual } from '../utils' describe('setConsole', () => { - afterEach(cleanup) + afterEach(() => { + queryCaches.forEach(cache => cache.clear()) + }) it('should override Console object', async () => { const mockConsole = { diff --git a/src/useBaseQuery.js b/src/useBaseQuery.js index 7f58847d5e..3f8128de09 100644 --- a/src/useBaseQuery.js +++ b/src/useBaseQuery.js @@ -4,129 +4,62 @@ import React from 'react' import { useQueryCache } from './queryCache' import { useConfigContext } from './config' -import { - useUid, - isDocumentVisible, - Console, - useGetLatest, - useMountedCallback, -} from './utils' +import { useMountedCallback, Console } from './utils' -export function useBaseQuery(queryKey, queryVariables, queryFn, config = {}) { - const instanceId = useUid() +export function useBaseQuery(queryKey, queryFn, config = {}) { + // Make a rerender function + const rerender = useMountedCallback(React.useState()[1]) + + // Build the final config + const configContext = useConfigContext() config = { - ...useConfigContext(), + ...configContext.shared, + ...configContext.queries, ...config, } + // Get the query cache const queryCache = useQueryCache() - const queryRef = React.useRef() - - const newQuery = queryCache._buildQuery( - queryKey, - queryVariables, - queryFn, - config - ) - - const useCachedQuery = - queryRef.current && - typeof queryRef.current.queryHash === 'undefined' && - typeof newQuery.queryHash === 'undefined' - - // Do not use new query with undefined queryHash, if previous query also had undefined queryHash. - // Otherwise this will cause infinite loop. - if (!useCachedQuery) { - queryRef.current = newQuery - } - - const query = queryRef.current - - const [, unsafeRerender] = React.useState() - - const rerender = useMountedCallback(unsafeRerender) + // Build the query for use + const query = queryCache.buildQuery(queryKey, queryFn, config) - const getLatestConfig = useGetLatest(config) - const refetch = React.useCallback( - async ({ throwOnError, ...rest } = {}) => { - try { - return await query.fetch(rest) - } catch (err) { - if (throwOnError) { - throw err - } - } - }, - [query] - ) + // Create a query instance ref + const instanceRef = React.useRef() - query.suspenseInstance = { - onSuccess: data => getLatestConfig().onSuccess(data), - onError: err => getLatestConfig().onError(err), - onSettled: (data, err) => getLatestConfig().onSettled(data, err), - } - - // After mount, subscribe to the query + // Subscribe to the query when the subscribe function changes React.useEffect(() => { - // Update the instance to the query again, but not as a placeholder - query.updateInstance({ - id: instanceId, - onStateUpdate: () => rerender({}), - onSuccess: data => getLatestConfig().onSuccess(data), - onError: err => getLatestConfig().onError(err), - onSettled: (data, err) => getLatestConfig().onSettled(data, err), - }) + instanceRef.current = query.subscribe(() => rerender({})) - return query.subscribe(instanceId) - }, [getLatestConfig, instanceId, query, rerender]) + // Unsubscribe when things change + return instanceRef.current.unsubscribe + }, [query, rerender]) + // Always update the config React.useEffect(() => { - // Perform the initial fetch for this query if necessary - if ( - !getLatestConfig().manual && // Don't auto fetch if config is set to manual query - !query.wasPrefetched && // Don't double fetch for prefetched queries - !query.wasSuspended && // Don't double fetch for suspense - query.state.isStale && // Only refetch if stale - (getLatestConfig().refetchOnMount || query.instances.length === 1) - ) { - refetch().catch(Console.error) - } - - query.wasPrefetched = false - query.wasSuspended = false - }, [getLatestConfig, query, refetch]) + instanceRef.current.updateConfig(config) + }) - // Handle refetch interval + // Run the instance when the query or enabled change React.useEffect(() => { - const query = queryRef.current - if ( - config.refetchInterval && - (!query.currentRefetchInterval || - // shorter interval should override previous one - config.refetchInterval < query.currentRefetchInterval) - ) { - query.currentRefetchInterval = config.refetchInterval - clearInterval(query.refetchIntervalId) - query.refetchIntervalId = setInterval(() => { - if (isDocumentVisible() || config.refetchIntervalInBackground) { - refetch().catch(Console.error) - } - }, config.refetchInterval) - - return () => { - clearInterval(query.refetchIntervalId) - delete query.refetchIntervalId - delete query.currentRefetchInterval - } + if (config.enabled && query) { + // Just for change detection + } + instanceRef.current.run() + }, [config.enabled, query]) + + const refetch = React.useCallback(async () => { + try { + await query.fetch() + } catch (error) { + Console.error(error) } - }, [config.refetchInterval, config.refetchIntervalInBackground, refetch]) + }, [query]) return { - ...query.state, - config, query, refetch, + ...query.state, } } diff --git a/src/useInfiniteQuery.js b/src/useInfiniteQuery.js index a007beb69d..c58ba06a7e 100644 --- a/src/useInfiniteQuery.js +++ b/src/useInfiniteQuery.js @@ -7,7 +7,7 @@ import { getQueryArgs, useGetLatest, handleSuspense } from './utils' export function useInfiniteQuery(...args) { const queryInfoRef = React.useRef() - let [queryKey, queryVariables, queryFn, config = {}] = getQueryArgs(args) + let [queryKey, queryFn, config = {}] = getQueryArgs(args) const { getFetchMore } = config const getGetFetchMore = useGetLatest(getFetchMore) @@ -58,7 +58,7 @@ export function useInfiniteQuery(...args) { return data } - const queryInfo = useBaseQuery(queryKey, queryVariables, queryFn, config) + const queryInfo = useBaseQuery(queryKey, queryFn, config) if ( typeof queryInfo.query.canFetchMore === 'undefined' && @@ -73,40 +73,44 @@ export function useInfiniteQuery(...args) { queryInfoRef.current = queryInfo let { - refetch, data = [], query: { canFetchMore }, } = queryInfo // Here we seed the pageVariabes for the query if (!queryInfo.query.pageVariables) { - queryInfo.query.pageVariables = [ - [...queryInfo.query.queryKey, ...queryInfo.query.queryVariables], - ] + queryInfo.query.pageVariables = [[...queryInfo.query.queryKey]] } const fetchMore = React.useCallback( - (fetchMoreInfo = queryInfoRef.current.query.canFetchMore) => + ( + fetchMoreInfo = queryInfoRef.current.query.canFetchMore, + { previous = false } = {} + ) => queryInfoRef.current.query.canFetchMore - ? refetch({ - force: true, + ? queryInfoRef.current.query.fetch({ __queryFn: async (...args) => { try { queryInfoRef.current.query.setState(old => ({ ...old, - isFetchingMore: true, + isFetchingMore: previous ? 'previous' : 'next', })) - const newArgs = [...args, fetchMoreInfo] - queryInfoRef.current.query.pageVariables.push(newArgs) + const newArgs = previous + ? [fetchMoreInfo, ...args] + : [...args, fetchMoreInfo] + queryInfoRef.current.query.pageVariables[ + previous ? 'unshift' : 'push' + ](newArgs) - const data = [ - ...queryInfoRef.current.data, - await originalQueryFn(...newArgs), - ] + const newData = await originalQueryFn(...newArgs) + + const data = previous + ? [newData, ...queryInfoRef.current.data] + : [...queryInfoRef.current.data, newData] queryInfoRef.current.query.canFetchMore = getGetFetchMore()( - data[data.length - 1], + newData, data ) @@ -120,7 +124,7 @@ export function useInfiniteQuery(...args) { }, }) : void 0, - [getGetFetchMore, originalQueryFn, refetch] + [getGetFetchMore, originalQueryFn] ) handleSuspense(queryInfo) diff --git a/src/useIsFetching.js b/src/useIsFetching.js index 3c7a45d933..020b6df1e6 100644 --- a/src/useIsFetching.js +++ b/src/useIsFetching.js @@ -1,14 +1,17 @@ import React from 'react' +import { useMountedCallback } from './utils' import { useQueryCache } from './queryCache' export function useIsFetching() { const queryCache = useQueryCache() - const [state, setState] = React.useState({}) + const [state, unsafeRerender] = React.useReducer(d => d + 1, 1) + const rerender = useMountedCallback(unsafeRerender) - React.useEffect(() => { - return queryCache.subscribe(() => setState({})) - }, []) + React.useEffect(() => queryCache.subscribe(rerender), [queryCache, rerender]) - return React.useMemo(() => state && queryCache.isFetching, [state]) + return React.useMemo(() => state && queryCache.isFetching, [ + queryCache.isFetching, + state, + ]) } diff --git a/src/useMutation.js b/src/useMutation.js index c6aa7007fa..bcfaa45d36 100644 --- a/src/useMutation.js +++ b/src/useMutation.js @@ -62,7 +62,8 @@ export function useMutation(mutationFn, config = {}) { const getMutationFn = useGetLatest(mutationFn) const getConfig = useGetLatest({ - ...useConfigContext(), + ...useConfigContext().shared, + ...useConfigContext().mutations, ...config, }) @@ -94,7 +95,7 @@ export function useMutation(mutationFn, config = {}) { } if (isLatest()) { - await onSuccess(data, variables) + dispatch({ type: actionResolve, data }) } if (isLatest()) { @@ -102,7 +103,7 @@ export function useMutation(mutationFn, config = {}) { } if (isLatest()) { - await onSettled(data, null, variables) + await onSuccess(data, variables) } if (isLatest()) { @@ -110,26 +111,26 @@ export function useMutation(mutationFn, config = {}) { } if (isLatest()) { - dispatch({ type: actionResolve, data }) + await onSettled(data, null, variables) } return data } catch (error) { if (isLatest()) { Console.error(error) - await onError(error, variables, snapshotValue) + await config.onError(error, variables, snapshotValue) } if (isLatest()) { - await config.onError(error, variables, snapshotValue) + await onError(error, variables, snapshotValue) } if (isLatest()) { - await onSettled(undefined, error, variables, snapshotValue) + await config.onSettled(undefined, error, variables, snapshotValue) } if (isLatest()) { - await config.onSettled(undefined, error, variables, snapshotValue) + await onSettled(undefined, error, variables, snapshotValue) } if (isLatest()) { @@ -149,10 +150,22 @@ export function useMutation(mutationFn, config = {}) { ]) React.useEffect(() => { - if (getConfig().useErrorBoundary && state.error) { + const { suspense, useErrorBoundary } = getConfig() + + if ((useErrorBoundary ?? suspense) && state.error) { throw state.error } }, [getConfig, state.error]) - return [mutate, { ...state, reset }] + return [ + mutate, + { + ...state, + reset, + isIdle: state.status === statusIdle, + isLoading: state.status === statusLoading, + isSuccess: state.status === statusSuccess, + isError: state.status === statusError, + }, + ] } diff --git a/src/usePaginatedQuery.js b/src/usePaginatedQuery.js index 6dccecb54b..c15c73c55f 100644 --- a/src/usePaginatedQuery.js +++ b/src/usePaginatedQuery.js @@ -6,22 +6,22 @@ import { useBaseQuery } from './useBaseQuery' import { getQueryArgs, handleSuspense } from './utils' export function usePaginatedQuery(...args) { - let [queryKey, queryVariables, queryFn, config = {}] = getQueryArgs(args) + let [queryKey, queryFn, config = {}] = getQueryArgs(args) const lastDataRef = React.useRef() - if (!queryKey) { - lastDataRef.current = undefined - } - // If latestData is set, don't use initialData if (typeof lastDataRef.current !== 'undefined') { delete config.initialData } - const query = useBaseQuery(queryKey, queryVariables, queryFn, config) + const queryInfo = useBaseQuery(queryKey, queryFn, config) + + if (!queryInfo.query.config.enabled) { + lastDataRef.current = undefined + } - let { data: latestData, status } = query + let { data: latestData, status } = queryInfo React.useEffect(() => { if (status === 'success' && typeof latestData !== 'undefined') { @@ -36,17 +36,24 @@ export function usePaginatedQuery(...args) { } if (typeof resolvedData !== 'undefined') { - status = 'success' + const overrides = { + status: 'success', + isError: false, + isLoading: false, + isSuccess: true, + } + + Object.assign(queryInfo.query.state, overrides) + Object.assign(queryInfo, overrides) } - const paginatedQuery = { - ...query, + const paginatedQueryInfo = { + ...queryInfo, resolvedData, latestData, - status, } - handleSuspense(paginatedQuery) + handleSuspense(paginatedQueryInfo) - return paginatedQuery + return paginatedQueryInfo } diff --git a/src/utils.js b/src/utils.js index df9e24c2dc..16d74b4c4d 100644 --- a/src/utils.js +++ b/src/utils.js @@ -97,29 +97,26 @@ export function getQueryArgs(args) { args[0].hasOwnProperty('queryKey') && args[0].hasOwnProperty('queryFn') ) { - const { queryKey, variables = [], queryFn, config = {} } = args[0] - return [queryKey, variables, queryFn, config] + const { queryKey, queryFn, config = {} } = args[0] + return [queryKey, queryFn, config, ...args.slice(1)] } else { throw new Error('queryKey and queryFn keys are required.') } } - if (typeof args[2] === 'function') { - const [queryKey, variables = [], queryFn, config = {}] = args - return [queryKey, variables, queryFn, config] - } - - const [queryKey, queryFn, config = {}] = args + const [queryKey, queryFn, config = {}, ...rest] = args - return [queryKey, [], queryFn, config] + return [queryKey, queryFn, config, ...rest] } export function useMountedCallback(callback) { const mounted = React.useRef(false) + React[isServer ? 'useEffect' : 'useLayoutEffect'](() => { mounted.current = true return () => (mounted.current = false) }, []) + return React.useCallback( (...args) => (mounted.current ? callback(...args) : void 0), [callback] @@ -127,19 +124,27 @@ export function useMountedCallback(callback) { } export function handleSuspense(queryInfo) { - if (queryInfo.config.suspense || queryInfo.config.useErrorBoundary) { - if (queryInfo.status === statusError) { - setTimeout(() => { - queryInfo.query.state.status = 'loading' - }) - throw queryInfo.error + if ( + queryInfo.query.config.suspense || + queryInfo.query.config.useErrorBoundary + ) { + if (queryInfo.query.state.status === statusError) { + if (!queryInfo.query.suspenseErrorHandled) { + queryInfo.query.suspenseErrorHandled = true + + setTimeout(() => { + queryInfo.query.state.status = statusLoading + }, 0) + + throw queryInfo.error + } } - } - if (queryInfo.config.suspense) { - if (queryInfo.status === statusLoading) { + queryInfo.query.suspenseErrorHandled = false + + if (queryInfo.query.config.suspense && queryInfo.status === statusLoading) { queryInfo.query.wasSuspended = true - throw queryInfo.refetch() + throw queryInfo.query.fetch() } } } diff --git a/types/index.d.ts b/types/index.d.ts index ad65fc9018..25480a9c62 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -8,36 +8,18 @@ import * as React from 'react' import * as _ from 'ts-toolbelt' // overloaded useQuery function -export function useQuery< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables = [], - TError = Error ->({ +export function useQuery({ queryKey, - variables, queryFn, config, }: { - queryKey: - | TKey - | false - | null - | undefined - | (() => TKey | false | null | undefined) - variables?: TVariables - queryFn: QueryFunctionWithVariables + queryKey: TKey + queryFn: QueryFunction config?: QueryOptions }): QueryResult -export function useQuery< - TResult, - TSingleKey extends string, - TVariables extends AnyVariables = [], - TError = Error ->({ +export function useQuery({ queryKey, - variables, queryFn, config, }: { @@ -47,8 +29,7 @@ export function useQuery< | null | undefined | (() => TSingleKey | false | null | undefined) - variables?: TVariables - queryFn: QueryFunctionWithVariables + queryFn: QueryFunction config?: QueryOptions }): QueryResult @@ -74,37 +55,25 @@ export function useQuery( config?: QueryOptions ): QueryResult -export function useQuery< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables, - TError = Error ->( +export function useQuery( queryKey: | TKey | false | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: QueryOptions ): QueryResult -export function useQuery< - TResult, - TKey extends string, - TVariables extends AnyVariables, - TError = Error ->( +export function useQuery( queryKey: | TKey | false | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: QueryOptions ): QueryResult @@ -112,11 +81,9 @@ export function useQuery< export function usePaginatedQuery< TResult, TKey extends AnyQueryKey, - TVariables extends AnyVariables = [], - TError = Error + TError = Error >({ queryKey, - variables, queryFn, config, }: { @@ -126,19 +93,16 @@ export function usePaginatedQuery< | null | undefined | (() => TKey | false | null | undefined) - variables?: TVariables - queryFn: QueryFunctionWithVariables + queryFn: QueryFunction config?: QueryOptions }): PaginatedQueryResult export function usePaginatedQuery< TResult, TSingleKey extends string, - TVariables extends AnyVariables = [], -TError = Error + TError = Error >({ queryKey, - variables, queryFn, config, }: { @@ -148,12 +112,15 @@ TError = Error | null | undefined | (() => TSingleKey | false | null | undefined) - variables?: TVariables - queryFn: QueryFunctionWithVariables + queryFn: QueryFunction config?: QueryOptions }): PaginatedQueryResult -export function usePaginatedQuery( +export function usePaginatedQuery< + TResult, + TKey extends AnyQueryKey, + TError = Error +>( queryKey: | TKey | false @@ -164,7 +131,7 @@ export function usePaginatedQuery ): PaginatedQueryResult -export function usePaginatedQuery( +export function usePaginatedQuery( queryKey: | TKey | false @@ -178,8 +145,7 @@ export function usePaginatedQuery export function usePaginatedQuery< TResult, TKey extends AnyQueryKey, - TVariables extends AnyVariables, -TError = Error + TError = Error >( queryKey: | TKey @@ -187,25 +153,18 @@ TError = Error | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: QueryOptions ): PaginatedQueryResult -export function usePaginatedQuery< - TResult, - TKey extends string, - TVariables extends AnyVariables, - TError = Error ->( +export function usePaginatedQuery( queryKey: | TKey | false | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: QueryOptions ): PaginatedQueryResult @@ -214,11 +173,9 @@ export function useInfiniteQuery< TResult, TKey extends AnyQueryKey, TMoreVariable, - TVariables extends AnyVariables = [], - TError = Error + TError = Error >({ queryKey, - variables, queryFn, config, }: { @@ -228,13 +185,7 @@ export function useInfiniteQuery< | null | undefined | (() => TKey | false | null | undefined) - variables?: TVariables - queryFn: InfiniteQueryFunctionWithVariables< - TResult, - TKey, - TVariables, - TMoreVariable - > + queryFn: InfiniteQueryFunction config?: InfiniteQueryOptions }): InfiniteQueryResult @@ -242,11 +193,9 @@ export function useInfiniteQuery< TResult, TSingleKey extends string, TMoreVariable, - TVariables extends AnyVariables = [], - TError = Error + TError = Error >({ queryKey, - variables, queryFn, config, }: { @@ -256,13 +205,7 @@ export function useInfiniteQuery< | null | undefined | (() => TSingleKey | false | null | undefined) - variables?: TVariables - queryFn: InfiniteQueryFunctionWithVariables< - TResult, - [TSingleKey], - TVariables, - TMoreVariable - > + queryFn: InfiniteQueryFunction config?: InfiniteQueryOptions }): InfiniteQueryResult @@ -270,7 +213,7 @@ export function useInfiniteQuery< TResult, TKey extends AnyQueryKey, TMoreVariable, - TError = Error + TError = Error >( queryKey: | TKey @@ -282,7 +225,12 @@ export function useInfiniteQuery< config?: InfiniteQueryOptions ): InfiniteQueryResult -export function useInfiniteQuery( +export function useInfiniteQuery< + TResult, + TKey extends string, + TMoreVariable, + TError = Error +>( queryKey: | TKey | false @@ -296,9 +244,8 @@ export function useInfiniteQuery( queryKey: | TKey @@ -306,22 +253,15 @@ export function useInfiniteQuery< | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: InfiniteQueryFunctionWithVariables< - TResult, - TKey, - TVariables, - TMoreVariable - >, + queryFn: InfiniteQueryFunction, config?: InfiniteQueryOptions ): InfiniteQueryResult export function useInfiniteQuery< TResult, TKey extends string, - TVariables extends AnyVariables, TMoreVariable, - TError = Error + TError = Error >( queryKey: | TKey @@ -329,13 +269,7 @@ export function useInfiniteQuery< | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: InfiniteQueryFunctionWithVariables< - TResult, - [TKey], - TVariables, - TMoreVariable - >, + queryFn: InfiniteQueryFunction, config?: InfiniteQueryOptions ): InfiniteQueryResult @@ -357,18 +291,10 @@ export type QueryKeyPart = export type AnyQueryKey = readonly [DefinedQueryKeyPart, ...QueryKeyPart[]] // this forces the key to be inferred as a tuple -export type AnyVariables = readonly [] | readonly [any, ...any[]] // this forces the variables to be inferred as a tuple - export type QueryFunction = ( ...key: TKey ) => Promise -export type QueryFunctionWithVariables< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables -> = (...key: _.List.Concat) => Promise - export type InfiniteQueryFunction< TResult, TKey extends AnyQueryKey, @@ -377,16 +303,17 @@ export type InfiniteQueryFunction< ...keysAndMore: _.List.Append | TKey ) => Promise -export type InfiniteQueryFunctionWithVariables< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables, - TMoreVariable -> = ( - ...keysAndVariablesAndMore: - | _.List.Append<_.List.Concat, TMoreVariable> - | _.List.Concat -) => Promise +export interface BaseSharedOptions { + suspense: boolean + queryKeySerializerFn?: ( + queryKey: + | QueryKeyPart[] + | string + | false + | undefined + | (() => QueryKeyPart[] | string | false | undefined) + ) => [string, QueryKeyPart[]] | [] +} export interface BaseQueryOptions { /** @@ -394,6 +321,7 @@ export interface BaseQueryOptions { * To refetch the query, use the `refetch` method returned from the `useQuery` instance. */ manual?: boolean + enabled?: boolean /** * If `false`, failed queries will not retry by default. * If `true`, failed queries will retry infinitely., failureCount: num @@ -408,18 +336,23 @@ export interface BaseQueryOptions { refetchIntervalInBackground?: boolean refetchOnWindowFocus?: boolean refetchOnMount?: boolean + onSuccess?: (data: any) => void onError?: (err: TError) => void - suspense?: boolean + onSettled?: (data: any | undefined, error: TError | null) => void isDataEqual?: (oldData: unknown, newData: unknown) => boolean + useErrorBoundary?: boolean } -export interface QueryOptions extends BaseQueryOptions { +export interface QueryOptions + extends BaseQueryOptions { + suspense?: boolean onSuccess?: (data: TResult) => void onSettled?: (data: TResult | undefined, error: TError | null) => void initialData?: TResult | (() => TResult | undefined) } -export interface PrefetchQueryOptions extends QueryOptions { +export interface PrefetchQueryOptions + extends QueryOptions { force?: boolean throwOnError?: boolean } @@ -436,35 +369,45 @@ export interface InfiniteQueryOptions ) => TMoreVariable | false } +export type QueryStatus = 'idle' | 'loading' | 'error' | 'success' + export interface QueryResultBase { - status: 'loading' | 'error' | 'success' + status: QueryStatus error: null | TError + isLoading: boolean + isSuccess: boolean + isError: boolean isFetching: boolean isStale: boolean failureCount: number - refetch: ({ - force, - throwOnError, - }?: { - force?: boolean - throwOnError?: boolean - }) => Promise + refetch: ({ throwOnError }?: { throwOnError?: boolean }) => Promise } -export interface QueryLoadingResult extends QueryResultBase { +export interface QueryLoadingResult + extends QueryResultBase { status: 'loading' + isLoading: true + isSuccess: false + isError: false data: TResult | undefined // even when error, data can have stale data error: TError | null // it still can be error } -export interface QueryErrorResult extends QueryResultBase { +export interface QueryErrorResult + extends QueryResultBase { status: 'error' + isError: true + isLoading: false + isSuccess: false data: TResult | undefined // even when error, data can have stale data error: TError } export interface QuerySuccessResult extends QueryResultBase { status: 'success' + isSuccess: true + isLoading: false + isError: false data: TResult error: null } @@ -477,6 +420,9 @@ export type QueryResult = export interface PaginatedQueryLoadingResult extends QueryResultBase { status: 'loading' + isLoading: true + isError: false + isSuccess: false resolvedData: undefined | TResult // even when error, data can have stale data latestData: undefined | TResult // even when error, data can have stale data error: null | TError // it still can be error @@ -485,6 +431,9 @@ export interface PaginatedQueryLoadingResult export interface PaginatedQueryErrorResult extends QueryResultBase { status: 'error' + isError: true + isLoading: false + isSuccess: false resolvedData: undefined | TResult // even when error, data can have stale data latestData: undefined | TResult // even when error, data can have stale data error: TError @@ -493,6 +442,9 @@ export interface PaginatedQueryErrorResult export interface PaginatedQuerySuccessResult extends QueryResultBase { status: 'success' + isSuccess: true + isError: false + isLoading: false resolvedData: TResult latestData: TResult error: null @@ -506,7 +458,7 @@ export type PaginatedQueryResult = export interface InfiniteQueryResult extends QueryResultBase { data: TResult[] - isFetchingMore: boolean + isFetchingMore: false | 'previous' | 'next' canFetchMore: boolean | undefined fetchMore: ( moreVariable?: TMoreVariable | false @@ -516,7 +468,10 @@ export interface InfiniteQueryResult export function useMutation( mutationFn: MutationFunction, mutationOptions?: MutationOptions -): [MutateFunction, MutationResult] +): [ + MutateFunction, + MutationResult +] export type MutationFunction = ( variables: TVariables, @@ -525,18 +480,12 @@ export type MutationFunction = ( export interface MutateOptions { onSuccess?: (data: TResult, variables: TVariables) => Promise | void - onError?: ( - error: TError, - variables: TVariables, - snapshotValue: unknown - ) => Promise | void + onError?: (error: TError, snapshotValue: unknown) => Promise | void onSettled?: ( data: undefined | TResult, error: TError | null, - variables: TVariables, snapshotValue?: unknown ) => Promise | void - throwOnError?: boolean } export interface MutationOptions @@ -545,15 +494,13 @@ export interface MutationOptions useErrorBoundary?: boolean } -export type MutateFunction = undefined extends TVariables - ? ( - variables?: TVariables, - options?: MutateOptions - ) => Promise - : ( - variables: TVariables, - options?: MutateOptions - ) => Promise +export type MutateFunction< + TResult, + TVariables, + TError = Error +> = undefined extends TVariables + ? (options?: MutateOptions) => Promise + : (options?: MutateOptions) => Promise export interface MutationResultBase { status: 'idle' | 'loading' | 'error' | 'success' @@ -610,12 +557,14 @@ export interface CachedQueryState { export interface CachedQuery { queryKey: AnyQueryKey - queryVariables: AnyVariables queryFn: (...args: any[]) => unknown config: QueryOptions state: CachedQueryState setData( - dataOrUpdater: unknown | undefined | ((oldData: unknown | undefined) => unknown | undefined) + dataOrUpdater: + | unknown + | undefined + | ((oldData: unknown | undefined) => unknown | undefined) ): void clear(): void } @@ -643,43 +592,31 @@ export interface QueryCache { config?: PrefetchQueryOptions ): Promise - prefetchQuery< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables, - TError = Error - >( + prefetchQuery( queryKey: | TKey | false | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: PrefetchQueryOptions ): Promise - prefetchQuery( + prefetchQuery( queryKey: | TKey | false | null | undefined | (() => TKey | false | null | undefined), - variables: TVariables, - queryFn: QueryFunctionWithVariables, + queryFn: QueryFunction, config?: PrefetchQueryOptions ): Promise - prefetchQuery< - TResult, - TKey extends AnyQueryKey, - TVariables extends AnyVariables = [], - TError = Error - >({ + prefetchQuery({ queryKey, - variables, + queryFn, config, }: { @@ -689,8 +626,7 @@ export interface QueryCache { | null | undefined | (() => TKey | false | null | undefined) - variables?: TVariables - queryFn: QueryFunctionWithVariables + queryFn: QueryFunction config?: PrefetchQueryOptions }): Promise @@ -700,7 +636,7 @@ export interface QueryCache { dataOrUpdater: TResult | undefined | ((oldData: TResult | undefined) => TResult | undefined), config?: SetQueryDataQueryOptions ): void - refetchQueries( + invalidateQueries( queryKeyOrPredicateFn: | AnyQueryKey | string @@ -708,8 +644,8 @@ export interface QueryCache { { exact, throwOnError, - force, - }?: { exact?: boolean; throwOnError?: boolean; force?: boolean } + refetchActive, + }?: { exact?: boolean; throwOnError?: boolean; refetchActive?: boolean } ): Promise removeQueries( queryKeyOrPredicateFn: @@ -734,10 +670,17 @@ export interface QueryCache { export const queryCache: QueryCache +export interface MakeQueryCacheOptions { + frozen?: boolean + defaultConfig?: BaseQueryOptions +} + /** * a factory that creates a new query cache */ -export function makeQueryCache(): QueryCache +export function makeQueryCache( + makeQueryCacheOptions?: MakeQueryCacheOptions +): QueryCache /** * A hook that uses the query cache context @@ -756,33 +699,29 @@ export const ReactQueryCacheProvider: React.ComponentType<{ export function useIsFetching(): number export function ReactQueryConfigProvider(props: { - config?: ReactQueryProviderConfig; - children?: React.ReactNode; -}): React.ReactElement; - -export interface ReactQueryProviderConfig extends BaseQueryOptions { - /** Defaults to the value of `suspense` if not defined otherwise */ - useErrorBoundary?: boolean - throwOnError?: boolean - refetchAllOnWindowFocus?: boolean - queryKeySerializerFn?: ( - queryKey: - | QueryKeyPart[] - | string - | false - | undefined - | (() => QueryKeyPart[] | string | false | undefined) - ) => [string, QueryKeyPart[]] | [] - - onMutate?: (variables: unknown) => Promise | unknown - onSuccess?: (data: unknown, variables?: unknown) => void - onError?: (err: TError, snapshotValue?: unknown) => void - onSettled?: ( - data: unknown | undefined, - error: TError | null, - snapshotValue?: unknown - ) => void - isDataEqual?: (oldData: unknown, newData: unknown) => boolean + config?: ReactQueryProviderConfig + children?: React.ReactNode +}): React.ReactElement + +export interface ReactQueryProviderConfig { + queries?: BaseQueryOptions & { + /** Defaults to the value of `suspense` if not defined otherwise */ + useErrorBoundary?: boolean + refetchOnWindowFocus?: boolean + } + shared?: BaseSharedOptions + mutations?: { + throwOnError?: boolean + useErrorBoundary?: boolean + onMutate?: (variables: unknown) => Promise | unknown + onSuccess?: (data: unknown, variables?: unknown) => void + onError?: (err: TError, snapshotValue?: unknown) => void + onSettled?: ( + data: unknown | undefined, + error: TError | null, + snapshotValue?: unknown + ) => void + } } export type ConsoleFunction = (...args: any[]) => void diff --git a/types/test.ts b/types/test.ts index 2967c4521a..4d8749f911 100644 --- a/types/test.ts +++ b/types/test.ts @@ -23,14 +23,12 @@ function simpleQuery() { function queryWithVariables() { // Query Variables const param = 'test' - const queryVariables = useQuery( - ['todos', { param }, 10], - (key, variables, id) => Promise.resolve(variables.param === 'test') + const query = useQuery(['todos', { param }, 10], (key, variables, id) => + Promise.resolve(variables.param === 'test') ) - queryVariables.data // $ExpectType boolean | undefined - queryVariables.refetch() // $ExpectType Promise - queryVariables.refetch({ force: true }) // $ExpectType Promise + query.data // $ExpectType boolean | undefined + query.refetch() // $ExpectType Promise } function queryKeyArrayOrder() { @@ -48,16 +46,15 @@ function conditionalQuery(condition: boolean) { const queryFn2 = () => Promise.resolve('test') // Query with falsey query key - useQuery(condition && ['foo', { bar: 'baz' }], queryFn1) - useQuery(condition && ['foo', { bar: 'baz' }], queryFn2) + useQuery(['foo', { bar: 'baz' }], queryFn1, { enabled: condition }) + useQuery(['foo', { bar: 'baz' }], queryFn2, { enabled: condition }) useQuery({ - queryKey: condition && ['foo', { bar: 'baz' }], + queryKey: ['foo', { bar: 'baz' }], queryFn: queryFn1, + config: { + enabled: condition, + }, }) - - // Query with query key function - useQuery(() => ['foo', { bar: 'baz' }], queryFn1) - useQuery(() => ['foo', { bar: 'baz' }], queryFn2) } function queryWithObjectSyntax(condition: boolean) { @@ -68,7 +65,6 @@ function queryWithObjectSyntax(condition: boolean) { useQuery({ queryKey: ['key', 10], - variables: [true, 20], queryFn: async ( key, // $ExpectType string id, // $ExpectType number @@ -79,7 +75,6 @@ function queryWithObjectSyntax(condition: boolean) { useQuery({ queryKey: 'key', - variables: [true, 20], queryFn: async ( key, // $ExpectType "key" var1, // $ExpectType boolean @@ -88,10 +83,13 @@ function queryWithObjectSyntax(condition: boolean) { }).data // $ExpectType string | undefined useQuery({ - queryKey: condition && 'key', + queryKey: 'key', queryFn: async ( key // $ExpectType "key" ) => 10, + config: { + enabled: condition, + }, }).data // $ExpectType number | undefined } @@ -112,7 +110,7 @@ function queryWithNestedKey() { } function queryWithComplexKeysAndVariables() { - useQuery(['key', { a: 1 }], [{ b: { x: 1 } }, { c: { x: 1 } }], ( + useQuery(['key', { a: 1 }, { b: { x: 1 } }, { c: { x: 1 } }], ( key1, // $ExpectType string key2, // ExpectType { a: number } var1, // $ExpectType { b: { x: number; }; } @@ -184,6 +182,25 @@ function paginatedQuery() { queryPaginated.latestData // $ExpectType { data: number[]; next: boolean; } queryPaginated.error // $ExpectType null } + + // Discriminated union over status flags + if (queryPaginated.isLoading) { + queryPaginated.resolvedData // $ExpectType { data: number[]; next: boolean; } | undefined + queryPaginated.latestData // $ExpectType { data: number[]; next: boolean; } | undefined + queryPaginated.error // $ExpectType Error | null + } + + if (queryPaginated.isError) { + queryPaginated.resolvedData // $ExpectType { data: number[]; next: boolean; } | undefined + queryPaginated.latestData // $ExpectType { data: number[]; next: boolean; } | undefined + queryPaginated.error // $ExpectType Error + } + + if (queryPaginated.isSuccess) { + queryPaginated.resolvedData // $ExpectType { data: number[]; next: boolean; } + queryPaginated.latestData // $ExpectType { data: number[]; next: boolean; } + queryPaginated.error // $ExpectType null + } } function paginatedQueryWithObjectSyntax(condition: boolean) { @@ -414,6 +431,24 @@ function dataDiscriminatedUnion() { queryResult.data // $ExpectType string[] queryResult.error // $ExpectType null } + + // Discriminated union over status flags + if (queryResult.isLoading) { + queryResult.data // $ExpectType string[] | undefined + queryResult.error // $ExpectType Error | null + } + + if (queryResult.isError) { + // disabled + queryResult.data // $ExpectType string[] | undefined + queryResult.error // $ExpectType Error + } + + if (queryResult.isSuccess) { + // disabled + queryResult.data // $ExpectType string[] + queryResult.error // $ExpectType null + } } function mutationStatusDiscriminatedUnion() { diff --git a/yarn.lock b/yarn.lock index 92a67be1f5..f06cd9a4b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,14 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.0.0": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.10.1": +"@babel/code-frame@^7.10.1", "@babel/code-frame@^7.5.5": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== @@ -159,7 +159,7 @@ "@babel/helper-replace-supers" "^7.10.1" "@babel/helper-split-export-declaration" "^7.10.1" -"@babel/helper-create-regexp-features-plugin@^7.10.1": +"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== @@ -168,14 +168,6 @@ "@babel/helper-regex" "^7.10.1" regexpu-core "^4.7.0" -"@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== - dependencies: - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.6.0" - "@babel/helper-define-map@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" @@ -311,13 +303,6 @@ dependencies: lodash "^4.17.13" -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== - dependencies: - lodash "^4.17.13" - "@babel/helper-remap-async-to-generator@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" @@ -373,6 +358,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== +"@babel/helper-validator-identifier@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" + integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== + "@babel/helper-wrap-function@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" @@ -420,12 +410,12 @@ js-tokens "^4.0.0" "@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" + integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== dependencies: + "@babel/helper-validator-identifier" "^7.10.3" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.7.4": @@ -1618,35 +1608,30 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 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== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" "@types/node@*": - version "12.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.5.tgz#66103d2eddc543d44a04394abb7be52506d7f290" - integrity sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A== + version "14.0.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" + integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA== "@types/node@^12.12.29": version "12.12.47" @@ -1691,9 +1676,9 @@ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": version "15.0.5" @@ -2127,7 +2112,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.12.0: +browserslist@^4.12.0, browserslist@^4.8.5: version "4.12.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== @@ -2137,15 +2122,6 @@ browserslist@^4.12.0: node-releases "^1.1.53" pkg-up "^2.0.0" -browserslist@^4.8.3: - version "4.8.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" - integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== - dependencies: - caniuse-lite "^1.0.30001027" - electron-to-chromium "^1.3.349" - node-releases "^1.1.49" - bser@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -2221,11 +2197,6 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== -caniuse-lite@^1.0.30001027: - version "1.0.30001027" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d" - integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg== - caniuse-lite@^1.0.30001043: version "1.0.30001083" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442" @@ -2303,7 +2274,7 @@ ci-env@^1.11.0: ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== class-utils@^0.3.5: @@ -2469,11 +2440,11 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== dependencies: - browserslist "^4.8.3" + browserslist "^4.8.5" semver "7.0.0" core-js-pure@^3.0.0: @@ -2506,7 +2477,7 @@ cross-env@^7.0.2: cross-spawn@^6.0.0: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -2515,16 +2486,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^7.0.1, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2629,7 +2591,7 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.2.0: @@ -2811,11 +2773,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.349: - version "1.3.353" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.353.tgz#c6f13f27d5212643979867a400c1a5e8a4ef042a" - integrity sha512-CkG24biyy9qQTQs8U2vGQaiyWSFDxAXP/UGHBveXZ1TGoWOAw+eYZXryrX0UeIMKnQjcaHx33hzYuydv98kqGQ== - electron-to-chromium@^1.3.413: version "1.3.473" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8" @@ -3206,7 +3163,7 @@ exec-sh@^0.3.2: execa@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -3526,7 +3483,7 @@ gensync@^1.0.0-beta.1: get-caller-file@^2.0.1: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-package-type@^0.1.0: @@ -3541,7 +3498,7 @@ get-stdin@^6.0.0: get-stream@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" @@ -3574,7 +3531,7 @@ glob-parent@^5.0.0: glob@^7.1.1: version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" @@ -3661,12 +3618,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-symbols@^1.0.1: +has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -4043,7 +3995,7 @@ is-regex@^1.0.5: is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: @@ -4516,7 +4468,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1, js-yaml@^3.7.0: +js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -4524,6 +4476,14 @@ js-yaml@^3.13.1, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.7.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4614,14 +4574,7 @@ json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: +json5@^2.1.0, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -4706,7 +4659,7 @@ lazy-cache@^1.0.3: leven@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levenary@^1.1.1: @@ -4799,14 +4752,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -magic-string@0.25.7: +magic-string@0.25.7, magic-string@^0.25.5: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" -magic-string@^0.25.1, magic-string@^0.25.5: +magic-string@^0.25.1: version "0.25.6" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.6.tgz#5586387d1242f919c6d223579cc938bf1420795e" integrity sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g== @@ -4921,12 +4874,12 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.2.0: +minimist@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -5030,13 +4983,6 @@ node-notifier@^7.0.0: uuid "^7.0.3" which "^2.0.2" -node-releases@^1.1.49: - version "1.1.49" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.49.tgz#67ba5a3fac2319262675ef864ed56798bb33b93e" - integrity sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg== - dependencies: - semver "^6.3.0" - node-releases@^1.1.53: version "1.1.58" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" @@ -5095,7 +5041,7 @@ npm-registry-client@^8.6.0: npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" @@ -5311,7 +5257,7 @@ p-each-series@^2.1.0: p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^1.1.0: @@ -5640,9 +5586,9 @@ react-is@^16.8.1: integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== react@^16.13.0: - version "16.13.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7" - integrity sha512-TSavZz2iSLkq5/oiE7gnFzmURKZMltmi193rm5HEoUDAXpzT9Kzw6oNZnGoai/4+fUnm7FqS5dwgUL34TujcWQ== + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -5710,13 +5656,6 @@ readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -5725,16 +5664,11 @@ regenerate-unicode-properties@^8.2.0: regenerate "^1.4.0" regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== -regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: version "0.13.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== @@ -5768,18 +5702,6 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" @@ -5792,23 +5714,11 @@ regexpu-core@^4.7.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - regjsparser@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" @@ -5875,12 +5785,12 @@ request@^2.74.0, request@^2.88.2: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: @@ -6232,7 +6142,12 @@ side-channel@^1.0.2: es-abstract "^1.17.0-next.1" object-inspect "^1.7.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -6330,7 +6245,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.6: version "0.5.16" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== @@ -6338,6 +6253,14 @@ source-map-support@^0.5.6, source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -6587,7 +6510,7 @@ strip-bom@^4.0.0: strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: @@ -6825,9 +6748,9 @@ ts-toolbelt@^6.9.4: integrity sha512-muRZZqfOTOVvLk5cdnp7YWm6xX+kD/WL2cS/L4zximBRcbQSuMoTbQQ2ZZBVMs1gB0EZw1qThP+HrIQB35OmEw== tslib@^1.8.0, tslib@^1.8.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tslib@^1.9.0: version "1.10.0" @@ -6931,20 +6854,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" @@ -7106,7 +7024,7 @@ whatwg-url@^8.0.0: which-module@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@^1.2.9: