Mirror: The highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.

major(next): support Next 13 and React Server Components (#3214)

Co-authored-by: Phil Pluckthun <phil@kitten.sh>

authored by

Jovi De Croock
Phil Pluckthun
and committed by
GitHub
889ca4db aeb6b44c

+1019 -1613
+9
.changeset/generated-one-myself.md
··· 1 + --- 2 + '@urql/next': major 3 + --- 4 + 5 + Create `@urql/next` which is a package meant to support Next 13 and 6 + the React 18 features contained within. 7 + 8 + For server components we have `@urql/next/rsc` and for client components 9 + just `@urql/next`.
+153 -7
docs/advanced/server-side-rendering.md
··· 177 177 ## Next.js 178 178 179 179 If you're using [Next.js](https://nextjs.org/) you can save yourself a lot of work by using 180 - `next-urql`. The `next-urql` package includes setup for `react-ssr-prepass` already, which automates 181 - a lot of the complexity of setting up server-side rendering with `urql`. 182 - 183 - We have a custom integration with [`Next.js`](https://nextjs.org/), being [`next-urql`](https://github.com/urql-graphql/urql/tree/main/packages/next-urql) 184 - this integration contains convenience methods specifically for `Next.js`. 185 - These will simplify the above setup for SSR. 180 + `@urql/next`. The `@urql/next` package is set to work with Next 13. 186 181 187 - To set up `next-urql`, first we'll install `next-urql` with `react-is` and `urql` as 182 + To set up `@urql/next`, first we'll install `@urql/next` and `urql` as 188 183 peer dependencies: 184 + 185 + ```sh 186 + yarn add @urql/next urql graphql 187 + # or 188 + npm install --save @urql/next urql graphql 189 + ``` 190 + 191 + We now have two ways to leverage `@urql/next`, one being part of a Server component 192 + or being part of the general `app/` folder. 193 + 194 + In a server component we will import from `@urql/next/rsc` 195 + 196 + ```ts 197 + // app/page.tsx 198 + import React from 'react'; 199 + import Head from 'next/head'; 200 + import { cacheExchange, createClient, fetchExchange, gql } from '@urql/core'; 201 + import { registerUrql } from '@urql/next/rsc'; 202 + 203 + const makeClient = () => { 204 + return createClient({ 205 + url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 206 + exchanges: [cacheExchange, fetchExchange], 207 + }); 208 + }; 209 + 210 + const { getClient } = registerUrql(makeClient); 211 + 212 + export default async function Home() { 213 + const result = await getClient().query(PokemonsQuery, {}); 214 + return ( 215 + <main> 216 + <h1>This is rendered as part of an RSC</h1> 217 + <ul> 218 + {result.data.pokemons.map((x: any) => ( 219 + <li key={x.id}>{x.name}</li> 220 + ))} 221 + </ul> 222 + </main> 223 + ); 224 + } 225 + ``` 226 + 227 + When we aren't leveraging server components we will import the things we will 228 + need to do a bit more setup, we go to the `client` component's layout file and 229 + structure it as the following. 230 + 231 + ```tsx 232 + // app/client/layout.tsx 233 + 'use client'; 234 + 235 + import { UrqlProvider, ssrExchange, cacheExchange, fetchExchange, createClient } from '@urql/next'; 236 + 237 + const ssr = ssrExchange(); 238 + const client = createClient({ 239 + url: 'https://trygql.formidable.dev/graphql/web-collections', 240 + exchanges: [cacheExchange, ssr, fetchExchange], 241 + }); 242 + 243 + export default function Layout({ children }: React.PropsWithChildren) { 244 + return ( 245 + <UrqlProvider client={client} ssr={ssr}> 246 + {children} 247 + </UrqlProvider> 248 + ); 249 + } 250 + ``` 251 + 252 + It is important that we pas both a client as well as the `ssrExchange` to the `Provider` 253 + this way we will be able to restore the data that Next streams to the client later on 254 + when we are hydrating. 255 + 256 + The next step is to query data in your client components by means of the `useQuery` 257 + method defined in `@urql/next`. 258 + 259 + ```tsx 260 + // app/client/page.tsx 261 + 'use client'; 262 + 263 + import Link from 'next/link'; 264 + import { Suspense } from 'react'; 265 + import { useQuery, gql } from '@urql/next'; 266 + 267 + export default function Page() { 268 + return ( 269 + <Suspense> 270 + <Pokemons /> 271 + </Suspense> 272 + ); 273 + } 274 + 275 + const PokemonsQuery = gql` 276 + query { 277 + pokemons(limit: 10) { 278 + id 279 + name 280 + } 281 + } 282 + `; 283 + 284 + function Pokemons() { 285 + const [result] = useQuery({ query: PokemonsQuery }); 286 + return ( 287 + <main> 288 + <h1>This is rendered as part of SSR</h1> 289 + <ul> 290 + {result.data.pokemons.map((x: any) => ( 291 + <li key={x.id}>{x.name}</li> 292 + ))} 293 + </ul> 294 + </main> 295 + ); 296 + } 297 + ``` 298 + 299 + The data queried in the above component will be rendered on the server 300 + and re-hydrated back on the client. When using multiple Suspense boundaries 301 + these will also get flushed as they complete and re-hydrated. 302 + 303 + > When data is used throughout the application we advise against 304 + > rendering this as part of a server-component so you can benefit 305 + > from the client-side cache. 306 + 307 + ### Invalidating data from a server-component 308 + 309 + When data is rendered by a server component but you dispatch a mutation 310 + from a client component the server won't automatically know that the 311 + server-component on the client needs refreshing. You can forcefully 312 + tell the server to do so by using the Next router and calling `.refresh()`. 313 + 314 + ```tsx 315 + import { useRouter } from 'next/router'; 316 + 317 + const Todo = () => { 318 + const router = useRouter(); 319 + const executeMutation = async () => { 320 + await updateTodo(); 321 + router.refresh(); 322 + }; 323 + }; 324 + ``` 325 + 326 + ### Disabling RSC fetch caching 327 + 328 + You can pass `fetchOptions: { cache: "no-store" }` to the `createClient` 329 + constructor to avoid running into cached fetches with server-components. 330 + 331 + ## Legacy Next.js (pages) 332 + 333 + If you're using [Next.js](https://nextjs.org/) with the classic `pages` you can instead use `next-urql`. 334 + To set up `next-urql`, first we'll install `next-urql` with `react-is` and `urql` as peer dependencies: 189 335 190 336 ```sh 191 337 yarn add next-urql react-is urql graphql
-47
examples/with-next/README.md
··· 28 28 npm install 29 29 npm run start 30 30 ``` 31 - 32 - ## getInitialProps 33 - 34 - This is the output you'll get when you're using `{ ssr: true }`, this way urql will try to automate 35 - as much for you as it possibly can by using a [`prepass`](https://github.com/FormidableLabs/react-ssr-prepass) 36 - this means that every `useQuery` used in your virtual-dom will be ran, the data will be collected on the server 37 - and hydrated on the client. 38 - 39 - > NOTE: to reduce performance complexities try to keep this to top-level renders as this can amount to waterfalls. 40 - 41 - ## getStaticProps 42 - 43 - This requires some manual work, when we look at [`static.js`](./pages/static.js) we can see that we define our own 44 - `getStaticProps` method, this because these methods are only `user-facing`. When doing a `yarn next build` we'll need to 45 - ensure that the server we're targetting is running so we can successfully execute the static prerender. 46 - 47 - ## getServerSideProps 48 - 49 - This requires some manual work, when we look at [`server.js`](./pages/server.js) we can see that we define our own 50 - `getServerSideProps` method, this because these methods are only `user-facing`. 51 - 52 - ## Output 53 - 54 - We can see that our `/` and `/server` routes are rendered on the server and `/static` is statically prerendered. 55 - 56 - ``` 57 - Page Size First Load JS 58 - ┌ λ / 4.98 kB 90 kB 59 - ├ /_app 0 B 85 kB 60 - ├ ○ /404 3.46 kB 88.5 kB 61 - ├ λ /api/graphql 0 B 85 kB 62 - ├ λ /server 878 B 85.9 kB 63 - └ ● /static 895 B 85.9 kB 64 - + First Load JS shared by all 85 kB 65 - ├ chunks/d8c192fcf6e34535672c13f111ef41e3832b265d.d03071.js 17.4 kB 66 - ├ chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.6a2b27.js 13.3 kB 67 - ├ chunks/framework.4b1bec.js 41.8 kB 68 - ├ chunks/main.3d1d43.js 7.14 kB 69 - ├ chunks/pages/_app.92bde8.js 4.68 kB 70 - └ chunks/webpack.50bee0.js 751 B 71 - 72 - 73 - λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps) 74 - ○ (Static) automatically rendered as static HTML (uses no initial props) 75 - ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps) 76 - (ISR) incremental static regeneration (uses revalidate in getStaticProps) 77 - ```
+16
examples/with-next/app/layout.tsx
··· 1 + export const metadata = { 2 + title: 'Create Next App', 3 + description: 'Generated by create next app', 4 + }; 5 + 6 + export default function RootLayout({ 7 + children, 8 + }: { 9 + children: React.ReactNode; 10 + }) { 11 + return ( 12 + <html lang="en"> 13 + <body>{children}</body> 14 + </html> 15 + ); 16 + }
+24
examples/with-next/app/non-rsc/layout.tsx
··· 1 + 'use client'; 2 + 3 + import { 4 + UrqlProvider, 5 + ssrExchange, 6 + cacheExchange, 7 + fetchExchange, 8 + createClient, 9 + } from '@urql/next'; 10 + 11 + const ssr = ssrExchange(); 12 + const client = createClient({ 13 + url: 'https://graphql-pokeapi.graphcdn.app/', 14 + exchanges: [cacheExchange, ssr, fetchExchange], 15 + suspense: true, 16 + }); 17 + 18 + export default function Layout({ children }: React.PropsWithChildren) { 19 + return ( 20 + <UrqlProvider client={client} ssr={ssr}> 21 + {children} 22 + </UrqlProvider> 23 + ); 24 + }
+65
examples/with-next/app/non-rsc/page.tsx
··· 1 + 'use client'; 2 + 3 + import Link from 'next/link'; 4 + import { Suspense } from 'react'; 5 + import { useQuery, gql } from '@urql/next'; 6 + 7 + export default function Page() { 8 + return ( 9 + <Suspense> 10 + <Pokemons /> 11 + </Suspense> 12 + ); 13 + } 14 + 15 + const PokemonsQuery = gql` 16 + query { 17 + pokemons(limit: 10) { 18 + results { 19 + id 20 + name 21 + } 22 + } 23 + } 24 + `; 25 + 26 + function Pokemons() { 27 + const [result] = useQuery({ query: PokemonsQuery }); 28 + return ( 29 + <main> 30 + <h1>This is rendered as part of SSR</h1> 31 + <ul> 32 + {result.data 33 + ? result.data.pokemons.results.map((x: any) => ( 34 + <li key={x.id}>{x.name}</li> 35 + )) 36 + : JSON.stringify(result.error)} 37 + </ul> 38 + <Suspense> 39 + <Pokemon name="bulbasaur" /> 40 + </Suspense> 41 + <Link href="/">RSC</Link> 42 + </main> 43 + ); 44 + } 45 + 46 + const PokemonQuery = gql` 47 + query ($name: String!) { 48 + pokemon(name: $name) { 49 + id 50 + name 51 + } 52 + } 53 + `; 54 + 55 + function Pokemon(props: any) { 56 + const [result] = useQuery({ 57 + query: PokemonQuery, 58 + variables: { name: props.name }, 59 + }); 60 + return ( 61 + <div> 62 + <h1>{result.data && result.data.pokemon.name}</h1> 63 + </div> 64 + ); 65 + }
+40
examples/with-next/app/page.tsx
··· 1 + import Link from 'next/link'; 2 + import { cacheExchange, createClient, fetchExchange, gql } from '@urql/core'; 3 + import { registerUrql } from '@urql/next/rsc'; 4 + 5 + const makeClient = () => { 6 + return createClient({ 7 + url: 'https://graphql-pokeapi.graphcdn.app/', 8 + exchanges: [cacheExchange, fetchExchange], 9 + }); 10 + }; 11 + 12 + const { getClient } = registerUrql(makeClient); 13 + 14 + const PokemonsQuery = gql` 15 + query { 16 + pokemons(limit: 10) { 17 + results { 18 + id 19 + name 20 + } 21 + } 22 + } 23 + `; 24 + 25 + export default async function Home() { 26 + const result = await getClient().query(PokemonsQuery, {}); 27 + return ( 28 + <main> 29 + <h1>This is rendered as part of an RSC</h1> 30 + <ul> 31 + {result.data 32 + ? result.data.pokemons.results.map((x: any) => ( 33 + <li key={x.id}>{x.name}</li> 34 + )) 35 + : JSON.stringify(result.error)} 36 + </ul> 37 + <Link href="/non-rsc">Non RSC</Link> 38 + </main> 39 + ); 40 + }
+5
examples/with-next/next-env.d.ts
··· 1 + /// <reference types="next" /> 2 + /// <reference types="next/image-types/global" /> 3 + 4 + // NOTE: This file should not be edited 5 + // see https://nextjs.org/docs/basic-features/typescript for more information.
+5 -2
examples/with-next/package.json
··· 4 4 "private": true, 5 5 "dependencies": { 6 6 "@urql/core": "^4.0.11", 7 + "@urql/next": "^1.0.0-beta.2", 7 8 "graphql": "^16.6.0", 8 - "next": "13.2.4", 9 - "next-urql": "^5.0.2", 9 + "next": "13.4.2", 10 10 "react": "^18.2.0", 11 11 "react-dom": "^18.2.0", 12 12 "urql": "^4.0.4" ··· 15 15 "dev": "next dev", 16 16 "start": "next", 17 17 "build": "next build" 18 + }, 19 + "devDependencies": { 20 + "@types/react": "18.2.6" 18 21 } 19 22 }
-12
examples/with-next/pages/_app.js
··· 1 - import { withUrqlClient } from 'next-urql'; 2 - import { cacheExchange, fetchExchange } from 'urql'; 3 - 4 - const App = ({ Component, pageProps }) => <Component {...pageProps} />; 5 - 6 - export default withUrqlClient( 7 - ssrExchange => ({ 8 - url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 9 - exchanges: [cacheExchange, ssrExchange, fetchExchange], 10 - }), 11 - { ssr: false } 12 - )(App);
-34
examples/with-next/pages/index.js
··· 1 - import { withUrqlClient } from 'next-urql'; 2 - import { useQuery, cacheExchange, fetchExchange, gql } from 'urql'; 3 - 4 - const POKEMONS_QUERY = gql` 5 - query { 6 - pokemons(limit: 10) { 7 - id 8 - name 9 - } 10 - } 11 - `; 12 - 13 - function Index() { 14 - const [res] = useQuery({ query: POKEMONS_QUERY }); 15 - 16 - return ( 17 - <div> 18 - <h1>Static</h1> 19 - {res.data.pokemons.map(pokemon => ( 20 - <div key={pokemon.id}> 21 - {pokemon.id} - {pokemon.name} 22 - </div> 23 - ))} 24 - </div> 25 - ); 26 - } 27 - 28 - export default withUrqlClient( 29 - ssrExchange => ({ 30 - url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 31 - exchanges: [cacheExchange, ssrExchange, fetchExchange], 32 - }), 33 - { ssr: true } 34 - )(Index);
-51
examples/with-next/pages/server.js
··· 1 - import { initUrqlClient } from 'next-urql'; 2 - 3 - import { ssrExchange, cacheExchange, fetchExchange, useQuery, gql } from 'urql'; 4 - 5 - const POKEMONS_QUERY = gql` 6 - query { 7 - pokemons(limit: 10) { 8 - id 9 - name 10 - } 11 - } 12 - `; 13 - 14 - function Server() { 15 - const [res] = useQuery({ query: POKEMONS_QUERY }); 16 - 17 - return ( 18 - <div> 19 - <h1>Server-side render</h1> 20 - {res.data.pokemons.map(pokemon => ( 21 - <div key={pokemon.id}> 22 - {pokemon.id} - {pokemon.name} 23 - </div> 24 - ))} 25 - </div> 26 - ); 27 - } 28 - 29 - export async function getServerSideProps() { 30 - const ssrCache = ssrExchange({ isClient: false }); 31 - const client = initUrqlClient( 32 - { 33 - url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 34 - exchanges: [cacheExchange, ssrCache, fetchExchange], 35 - }, 36 - false 37 - ); 38 - 39 - // This query is used to populate the cache for the query 40 - // used on this page. 41 - await client.query(POKEMONS_QUERY).toPromise(); 42 - 43 - return { 44 - props: { 45 - // urqlState is a keyword here so withUrqlClient can pick it up. 46 - urqlState: ssrCache.extractData(), 47 - }, 48 - }; 49 - } 50 - 51 - export default Server;
-51
examples/with-next/pages/static.js
··· 1 - import { initUrqlClient } from 'next-urql'; 2 - 3 - import { ssrExchange, cacheExchange, fetchExchange, useQuery, gql } from 'urql'; 4 - 5 - const POKEMONS_QUERY = gql` 6 - query { 7 - pokemons(limit: 10) { 8 - id 9 - name 10 - } 11 - } 12 - `; 13 - 14 - function Static() { 15 - const [res] = useQuery({ query: POKEMONS_QUERY }); 16 - 17 - return ( 18 - <div> 19 - <h1>Static</h1> 20 - {res.data.pokemons.map(pokemon => ( 21 - <div key={pokemon.id}> 22 - {pokemon.id} - {pokemon.name} 23 - </div> 24 - ))} 25 - </div> 26 - ); 27 - } 28 - 29 - export async function getStaticProps() { 30 - const ssrCache = ssrExchange({ isClient: false }); 31 - const client = initUrqlClient( 32 - { 33 - url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 34 - exchanges: [cacheExchange, ssrCache, fetchExchange], 35 - }, 36 - false 37 - ); 38 - 39 - // This query is used to populate the cache for the query 40 - // used on this page. 41 - await client.query(POKEMONS_QUERY).toPromise(); 42 - 43 - return { 44 - props: { 45 - // urqlState is a keyword here so withUrqlClient can pick it up. 46 - urqlState: ssrCache.extractData(), 47 - }, 48 - }; 49 - } 50 - 51 - export default Static;
+24
examples/with-next/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "lib": ["dom", "dom.iterable", "esnext"], 4 + "allowJs": true, 5 + "skipLibCheck": true, 6 + "strict": false, 7 + "forceConsistentCasingInFileNames": true, 8 + "noEmit": true, 9 + "incremental": true, 10 + "esModuleInterop": true, 11 + "module": "esnext", 12 + "moduleResolution": "node", 13 + "resolveJsonModule": true, 14 + "isolatedModules": true, 15 + "jsx": "preserve", 16 + "plugins": [ 17 + { 18 + "name": "next" 19 + } 20 + ] 21 + }, 22 + "include": ["next-env.d.ts", ".next/types/**/*.ts", "**/*.ts", "**/*.tsx"], 23 + "exclude": ["node_modules"] 24 + }
+1
packages/next-urql/.gitignore
··· 1 + /rsc
+29 -21
packages/next-urql/package.json
··· 1 1 { 2 - "name": "next-urql", 3 - "version": "5.0.2", 2 + "name": "@urql/next", 3 + "version": "0.1.0", 4 4 "description": "Convenience wrappers for using urql with NextJS.", 5 5 "sideEffects": false, 6 6 "homepage": "https://formidable.com/open-source/urql/docs/", ··· 12 12 "url": "https://github.com/urql-graphql/urql.git", 13 13 "directory": "packages/next-urql" 14 14 }, 15 - "main": "dist/next-urql.js", 16 - "module": "dist/next-urql.es.js", 17 - "types": "dist/next-urql.d.ts", 15 + "main": "dist/urql-next", 16 + "module": "dist/urql-next.mjs", 17 + "types": "dist/urql-next.d.ts", 18 18 "source": "src/index.ts", 19 + "exports": { 20 + ".": { 21 + "types": "./dist/urql-next.d.ts", 22 + "import": "./dist/urql-next.mjs", 23 + "require": "./dist/urql-next.js", 24 + "source": "./src/index.ts" 25 + }, 26 + "./package.json": "./package.json", 27 + "./rsc": { 28 + "types": "./dist/urql-next-rsc.d.ts", 29 + "import": "./dist/urql-next-rsc.mjs", 30 + "require": "./dist/urql-next-rsc.js", 31 + "source": "./src/rsc.ts" 32 + } 33 + }, 19 34 "files": [ 20 35 "LICENSE", 21 36 "CHANGELOG.md", 22 37 "README.md", 38 + "rsc/", 23 39 "dist/" 24 40 ], 25 41 "scripts": { 26 - "test": "vitest --config ../../vitest.config.ts", 27 42 "clean": "rimraf dist", 28 43 "check": "tsc --noEmit", 29 44 "lint": "eslint --ext=js,jsx,ts,tsx .", ··· 34 49 "devDependencies": { 35 50 "@urql/core": "workspace:*", 36 51 "urql": "workspace:*", 37 - "@types/enzyme": "^3.10.3", 38 - "@types/enzyme-adapter-react-16": "^1.0.5", 39 - "@types/node-fetch": "^2.5.4", 40 - "@types/react": "^17.0.4", 41 - "@types/react-dom": "^17.0.3", 42 - "enzyme": "^3.11.0", 43 - "enzyme-adapter-react-16": "^1.15.2", 52 + "@types/react": "^18.2.6", 53 + "@types/react-dom": "^18.2.4", 44 54 "graphql": "^16.0.0", 45 - "next": "^11.0.1", 46 - "react": "^17.0.1", 47 - "react-dom": "^17.0.1", 48 - "react-is": "^17.0.1" 49 - }, 50 - "dependencies": { 51 - "react-ssr-prepass": "^1.4.0" 55 + "next": "^13.0.0", 56 + "react": "^18.0.0", 57 + "react-dom": "^18.0.0" 52 58 }, 53 59 "peerDependencies": { 54 - "react": ">=16.8.0", 60 + "next": ">=13.0.0", 61 + "react": ">=18.0.0", 55 62 "urql": "^4.0.0" 56 63 }, 57 64 "publishConfig": { 65 + "access": "public", 58 66 "provenance": true 59 67 } 60 68 }
+80
packages/next-urql/src/DataHydrationContext.ts
··· 1 + import React from 'react'; 2 + import { ServerInsertedHTMLContext } from 'next/navigation'; 3 + import { UrqlResult } from './useUrqlValue'; 4 + 5 + interface DataHydrationValue { 6 + isInjecting: boolean; 7 + operationValuesByKey: Record<number, UrqlResult>; 8 + RehydrateScript: () => 9 + | React.DetailedReactHTMLElement< 10 + { dangerouslySetInnerHTML: { __html: string } }, 11 + HTMLElement 12 + > 13 + | React.FunctionComponentElement<any>; 14 + } 15 + 16 + const DataHydrationContext = React.createContext< 17 + DataHydrationValue | undefined 18 + >(undefined); 19 + 20 + function transportDataToJS(data: any) { 21 + const key = 'urql_transport'; 22 + return `(window[Symbol.for("${key}")] ??= []).push(${JSON.stringify(data)})`; 23 + } 24 + 25 + export const DataHydrationContextProvider = ({ 26 + children, 27 + }: React.PropsWithChildren<{}>) => { 28 + const dataHydrationContext = React.useRef<DataHydrationValue>(); 29 + if (typeof window == 'undefined') { 30 + if (!dataHydrationContext.current) 31 + dataHydrationContext.current = buildContext(); 32 + } 33 + 34 + return React.createElement( 35 + DataHydrationContext.Provider, 36 + { value: dataHydrationContext.current }, 37 + children 38 + ); 39 + }; 40 + 41 + export function useDataHydrationContext(): DataHydrationValue | undefined { 42 + const dataHydrationContext = React.useContext(DataHydrationContext); 43 + const insertHtml = React.useContext(ServerInsertedHTMLContext); 44 + 45 + if (typeof window !== 'undefined') return; 46 + 47 + if (insertHtml && dataHydrationContext && !dataHydrationContext.isInjecting) { 48 + dataHydrationContext.isInjecting = true; 49 + insertHtml(() => 50 + React.createElement(dataHydrationContext.RehydrateScript, {}) 51 + ); 52 + } 53 + return dataHydrationContext; 54 + } 55 + 56 + let key = 0; 57 + function buildContext(): DataHydrationValue { 58 + const dataHydrationContext: DataHydrationValue = { 59 + isInjecting: false, 60 + operationValuesByKey: {}, 61 + RehydrateScript() { 62 + dataHydrationContext.isInjecting = false; 63 + if (!Object.keys(dataHydrationContext.operationValuesByKey).length) 64 + return React.createElement(React.Fragment); 65 + 66 + const __html = transportDataToJS({ 67 + rehydrate: { ...dataHydrationContext.operationValuesByKey }, 68 + }); 69 + 70 + dataHydrationContext.operationValuesByKey = {}; 71 + 72 + return React.createElement('script', { 73 + key: key++, 74 + dangerouslySetInnerHTML: { __html }, 75 + }); 76 + }, 77 + }; 78 + 79 + return dataHydrationContext; 80 + }
+59
packages/next-urql/src/Provider.ts
··· 1 + 'use client'; 2 + 3 + import React from 'react'; 4 + import { Provider, SSRExchange, Client } from 'urql'; 5 + import { DataHydrationContextProvider } from './DataHydrationContext'; 6 + 7 + export const SSRContext = React.createContext<SSRExchange | undefined>( 8 + undefined 9 + ); 10 + 11 + /** Provider for `@urql/next` during non-rsc interactions. 12 + * 13 + * @remarks 14 + * `Provider` accepts a {@link Client} and provides it to all GraphQL hooks, it 15 + * also accepts an {@link SSRExchange} to distribute data when re-hydrating 16 + * on the client. 17 + * 18 + * @example 19 + * ```tsx 20 + * import { 21 + * UrqlProvider, 22 + * ssrExchange, 23 + * cacheExchange, 24 + * fetchExchange, 25 + * createClient, 26 + * } from '@urql/next'; 27 + * 28 + * const ssr = ssrExchange(); 29 + * const client = createClient({ 30 + * url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 31 + * exchanges: [cacheExchange, ssr, fetchExchange], 32 + * suspense: true, 33 + * }); 34 + * 35 + * export default function Layout({ children }: React.PropsWithChildren) { 36 + * return ( 37 + * <UrqlProvider client={client} ssr={ssr}> 38 + * {children} 39 + * </UrqlProvider> 40 + * ); 41 + * } 42 + * 43 + * ``` 44 + */ 45 + export function UrqlProvider({ 46 + children, 47 + ssr, 48 + client, 49 + }: React.PropsWithChildren<{ ssr: SSRExchange; client: Client }>) { 50 + return React.createElement( 51 + Provider, 52 + { value: client }, 53 + React.createElement( 54 + SSRContext.Provider, 55 + { value: ssr }, 56 + React.createElement(DataHydrationContextProvider, {}, children) 57 + ) 58 + ); 59 + }
-195
packages/next-urql/src/__tests__/with-urql-client.spec.ts
··· 1 - import React, { createElement as h } from 'react'; 2 - import { shallow, configure } from 'enzyme'; 3 - import Adapter from 'enzyme-adapter-react-16'; 4 - import { 5 - Client, 6 - dedupExchange, 7 - fetchExchange, 8 - cacheExchange, 9 - } from '@urql/core'; 10 - import { vi, expect, it, beforeEach, describe, beforeAll } from 'vitest'; 11 - 12 - import { withUrqlClient } from '../with-urql-client'; 13 - import type { NextUrqlPageContext } from '../types'; 14 - import * as init from '../init-urql-client'; 15 - 16 - const MockApp: React.FC<any> = () => { 17 - return h('div'); 18 - }; 19 - 20 - const MockAppTree: React.FC<any> = () => { 21 - return h('div'); 22 - }; 23 - 24 - describe('withUrqlClient', () => { 25 - const spyInitUrqlClient = vi.spyOn(init, 'initUrqlClient'); 26 - let Component: any; 27 - 28 - beforeAll(() => { 29 - configure({ adapter: new Adapter() }); 30 - }); 31 - 32 - describe('with client options', () => { 33 - beforeEach(() => { 34 - Component = withUrqlClient( 35 - ssr => ({ 36 - url: 'http://localhost:3000', 37 - exchanges: [dedupExchange, cacheExchange, ssr, fetchExchange], 38 - }), 39 - { 40 - ssr: true, 41 - } 42 - )(MockApp); 43 - }); 44 - 45 - const mockContext: NextUrqlPageContext = { 46 - AppTree: MockAppTree, 47 - pathname: '/', 48 - query: {}, 49 - asPath: '/', 50 - urqlClient: {} as Client, 51 - }; 52 - 53 - it('should create the client instance when the component mounts', () => { 54 - const tree = shallow(h(Component)); 55 - const app = tree.find(MockApp); 56 - 57 - expect(app.props().urqlClient).toBeInstanceOf(Client); 58 - expect(spyInitUrqlClient).toHaveBeenCalledTimes(1); 59 - // @ts-ignore 60 - expect(spyInitUrqlClient.mock.calls[0][0].exchanges).toHaveLength(4); 61 - }); 62 - 63 - it('should create the urql client instance server-side inside getInitialProps', async () => { 64 - const props = 65 - Component.getInitialProps && 66 - (await Component.getInitialProps(mockContext)); 67 - expect(spyInitUrqlClient).toHaveBeenCalledTimes(1); 68 - 69 - const tree = shallow(h(Component, props)); 70 - const app = tree.find(MockApp); 71 - 72 - expect(app.props().urqlClient).toBeInstanceOf(Client); 73 - }); 74 - }); 75 - 76 - describe('with ctx callback to create client options', () => { 77 - // Simulate a token that might be passed in a request to the server-rendered application. 78 - const token = Math.random().toString(36).slice(-10); 79 - let mockSsrExchange; 80 - 81 - const mockContext = { 82 - AppTree: MockAppTree, 83 - pathname: '/', 84 - query: {}, 85 - asPath: '/', 86 - req: { 87 - headers: { 88 - cookie: token, 89 - }, 90 - } as NextUrqlPageContext['req'], 91 - urqlClient: {} as Client, 92 - } as unknown as NextUrqlPageContext; 93 - 94 - beforeEach(() => { 95 - Component = withUrqlClient( 96 - (ssrExchange, ctx) => ({ 97 - url: 'http://localhost:3000', 98 - fetchOptions: { 99 - headers: { Authorization: (ctx && ctx.req!.headers!.cookie) || '' }, 100 - }, 101 - exchanges: [(mockSsrExchange = ssrExchange)], 102 - }), 103 - { ssr: true } 104 - )(MockApp); 105 - }); 106 - 107 - it('should allow a user to access the ctx object from Next on the server', async () => { 108 - Component.getInitialProps && 109 - (await Component.getInitialProps(mockContext)); 110 - expect(spyInitUrqlClient).toHaveBeenCalledWith( 111 - { 112 - url: 'http://localhost:3000', 113 - fetchOptions: { headers: { Authorization: token } }, 114 - exchanges: [mockSsrExchange], 115 - }, 116 - true 117 - ); 118 - }); 119 - }); 120 - 121 - it('should not bind getInitialProps when there are no options', async () => { 122 - const mockContext = { 123 - AppTree: MockAppTree, 124 - pathname: '/', 125 - query: {}, 126 - asPath: '/', 127 - req: { 128 - headers: { 129 - cookie: '', 130 - }, 131 - } as NextUrqlPageContext['req'], 132 - urqlClient: {} as Client, 133 - } as unknown as NextUrqlPageContext; 134 - const Component = withUrqlClient( 135 - (ssrExchange, ctx) => ({ 136 - url: 'http://localhost:3000', 137 - fetchOptions: { 138 - headers: { Authorization: (ctx && ctx.req!.headers!.cookie) || '' }, 139 - }, 140 - exchanges: [ssrExchange], 141 - }), 142 - { ssr: false } 143 - )(MockApp); 144 - 145 - Component.getInitialProps && (await Component.getInitialProps(mockContext)); 146 - expect(spyInitUrqlClient).toHaveBeenCalledTimes(0); 147 - expect(Component.getInitialProps).toBeUndefined(); 148 - }); 149 - 150 - describe('never-suspend', () => { 151 - // Simulate a token that might be passed in a request to the server-rendered application. 152 - const token = Math.random().toString(36).slice(-10); 153 - let mockSsrExchange; 154 - 155 - const mockContext = { 156 - AppTree: MockAppTree, 157 - pathname: '/', 158 - query: {}, 159 - asPath: '/', 160 - req: { 161 - headers: { 162 - cookie: token, 163 - }, 164 - } as NextUrqlPageContext['req'], 165 - urqlClient: {} as Client, 166 - } as unknown as NextUrqlPageContext; 167 - 168 - beforeEach(() => { 169 - Component = withUrqlClient( 170 - (ssrExchange, ctx) => ({ 171 - url: 'http://localhost:3000', 172 - fetchOptions: { 173 - headers: { Authorization: (ctx && ctx.req!.headers!.cookie) || '' }, 174 - }, 175 - exchanges: [(mockSsrExchange = ssrExchange)], 176 - }), 177 - { ssr: true, neverSuspend: true } 178 - )(MockApp); 179 - }); 180 - 181 - it('should not enable suspense', async () => { 182 - Component.getInitialProps && 183 - (await Component.getInitialProps(mockContext)); 184 - 185 - expect(spyInitUrqlClient).toHaveBeenCalledWith( 186 - { 187 - url: 'http://localhost:3000', 188 - fetchOptions: { headers: { Authorization: token } }, 189 - exchanges: [mockSsrExchange], 190 - }, 191 - false 192 - ); 193 - }); 194 - }); 195 - });
+3 -3
packages/next-urql/src/index.ts
··· 1 - export { withUrqlClient } from './with-urql-client'; 2 - export { initUrqlClient } from './init-urql-client'; 3 - export * from './types'; 1 + export * from 'urql'; 2 + export { useQuery } from './useQuery'; 3 + export { UrqlProvider } from './Provider';
-53
packages/next-urql/src/init-urql-client.ts
··· 1 - import { Client, ClientOptions, createClient } from '@urql/core'; 2 - 3 - let urqlClient: Client | null = null; 4 - 5 - /** Resets the `Client` that {@link initUrqlClient} returns. 6 - * 7 - * @remarks 8 - * `resetClient` will force {@link initUrqlClient} to create a new 9 - * {@link Client}, rather than reusing the same `Client` it already 10 - * created on the client-side. 11 - * 12 - * This may be used to force the cache and any state in the `Client` 13 - * to be cleared and reset. 14 - */ 15 - export function resetClient() { 16 - urqlClient = null; 17 - } 18 - 19 - /** Creates a {@link Client} the given options. 20 - * 21 - * @param clientOptions - {@link ClientOptions} to create the `Client` with. 22 - * @param canEnableSuspense - Enables React Suspense on the server-side for `react-ssr-prepass`. 23 - * @returns the created {@link Client} 24 - * 25 - * @remarks 26 - * `initUrqlClient` creates a {@link Client} with the given options, 27 - * like {@link createClient} does, but reuses the same client when 28 - * run on the client-side. 29 - * 30 - * As long as `canEnableSuspense` is set to `true`, it enables React Suspense 31 - * mode on the server-side for `react-ssr-prepass`. 32 - */ 33 - export function initUrqlClient( 34 - clientOptions: ClientOptions, 35 - canEnableSuspense: boolean 36 - ): Client { 37 - // Create a new Client for every server-side rendered request. 38 - // This ensures we reset the state for each rendered page. 39 - // If there is an exising client instance on the client-side, use it. 40 - const isServer = typeof window === 'undefined'; 41 - if (isServer || !urqlClient) { 42 - urqlClient = createClient({ 43 - ...clientOptions, 44 - suspense: canEnableSuspense && (isServer || clientOptions.suspense), 45 - }); 46 - // Serialize the urqlClient to null on the client-side. 47 - // This ensures we don't share client and server instances of the urqlClient. 48 - (urqlClient as any).toJSON = () => null; 49 - } 50 - 51 - // Return both the Client instance and the ssrCache. 52 - return urqlClient; 53 - }
+31
packages/next-urql/src/rsc.ts
··· 1 + import * as React from 'react'; 2 + import { Client } from '@urql/core'; 3 + 4 + /** Function to cache an urql-client across React Server Components. 5 + * 6 + * @param makeClient - A function that creates an urql-client. 7 + * @returns an object containing a getClient method. 8 + * 9 + * @example 10 + * ```ts 11 + * import { cacheExchange, createClient, fetchExchange, gql } from '@urql/core'; 12 + * import { registerUrql } from '@urql/next/rsc'; 13 + * const makeClient = () => { 14 + * return createClient({ 15 + * url: 'https://trygql.formidable.dev/graphql/basic-pokedex', 16 + * exchanges: [cacheExchange, fetchExchange], 17 + * }); 18 + * }; 19 + * 20 + * const { getClient } = registerUrql(makeClient); 21 + * ``` 22 + */ 23 + export function registerUrql(makeClient: () => Client): { 24 + getClient: () => Client; 25 + } { 26 + // @ts-ignore you exist don't worry 27 + const getClient = React.cache(makeClient); 28 + return { 29 + getClient, 30 + }; 31 + }
-102
packages/next-urql/src/types.ts
··· 1 - import type { ClientOptions, Client, SSRExchange, SSRData } from '@urql/core'; 2 - import type { NextPageContext } from 'next'; 3 - import type { AppContext } from 'next/app'; 4 - 5 - /** The Next.js {@link NextPageContext}, as modified by `next-urql`. */ 6 - export interface NextUrqlPageContext extends NextPageContext { 7 - urqlClient: Client; 8 - } 9 - 10 - /** The Next.js {@link AppContext}, as modified by `next-urql`. */ 11 - export interface NextUrqlAppContext extends AppContext { 12 - urqlClient: Client; 13 - } 14 - 15 - export type NextUrqlContext = NextUrqlPageContext | NextUrqlAppContext; 16 - 17 - /** Passed to {@link withUrqlClient} returning the options a {@link Client} is created with. 18 - * 19 - * @param ssrExchange - the `ssrExchange` you must use in your `exchanges` array. 20 - * @param ctx - Passed when `getInitialProps` is used and set to Next.js’ {@link NextPageContext}. 21 - * @returns a {@link ClientOptions} configuration object to create a {@link Client} with. 22 - * 23 - * @remarks 24 - * You must define a `getClientConfig` function and pass it to {@link withUrqlClient}. 25 - * 26 - * This function defines the options passed to {@link initUrqlClient}. 27 - * It passes you an `ssrExchange` that you must use in your `exchanges` array. 28 - * 29 - * @example 30 - * ```ts 31 - * import { cacheExchange, fetchExchange } from '@urql/core'; 32 - * import { withUrqlClient } from 'next-urql'; 33 - * 34 - * const WrappedPage = withUrqlClient( 35 - * (ssrExchange) => ({ 36 - * url: 'https://YOUR_API', 37 - * exchanges: [cacheExchange, ssrExchange, fetchExchange], 38 - * }) 39 - * )(Page); 40 - * ``` 41 - */ 42 - export type NextUrqlClientConfig = ( 43 - ssrExchange: SSRExchange, 44 - ctx?: NextPageContext 45 - ) => ClientOptions; 46 - 47 - /** Props that {@link withUrqlClient} components pass on to your component. */ 48 - export interface WithUrqlProps { 49 - /** The {@link Client} that {@link withUrqlClient} created for your component. */ 50 - urqlClient?: Client; 51 - /** Next.js’ `pageProps` prop, as passed to it by Next.js. */ 52 - pageProps: any; 53 - /** The SSR data that {@link withUrqlClient} created for your component. */ 54 - urqlState?: SSRData; 55 - /** Resets the `Client` that on the client-side. 56 - * 57 - * @remarks 58 - * `resetUrqlClient` will force a new {@link Client} to be created 59 - * on the client-side, rather than the same `Client` with the same 60 - * server-side data to be reused. 61 - * 62 - * This may be used to force the cache and any state in the `Client` 63 - * to be cleared and reset. 64 - */ 65 - resetUrqlClient?(): void; 66 - [key: string]: any; 67 - } 68 - 69 - /** Options that may be passed to the {@link withUrqlClient} wrapper function. */ 70 - export interface WithUrqlClientOptions { 71 - /** Enables automatic server-side rendering mode. 72 - * 73 - * @remarks 74 - * When enabled, {@link withUrqlClient} will add a `getInitialProps` 75 - * function to the resulting component, even if you haven't defined 76 - * one. 77 - * 78 - * This function will automatically capture `urql`'s SSR state on the 79 - * server-side and rehydrate it on the client-side, unless 80 - * {@link WithUrqlClientOptions.neverSuspend} is `true`. 81 - */ 82 - ssr?: boolean; 83 - /** Disables automatic server-side rendering, even if a `getInitialProps` function is defined. 84 - * 85 - * @remarks 86 - * When enabled, {@link withUrqlClient} will never execute queries 87 - * on the server-side automatically, and will instead rely on you 88 - * to do so manually. 89 - */ 90 - neverSuspend?: boolean; 91 - /** Enables reexecuting operations on the client-side after rehydration. 92 - * 93 - * @remarks 94 - * When enabled, `staleWhileRevalidate` will reexecute GraphQL queries on 95 - * the client-side, if they’ve been rehydrated from SSR state. 96 - * 97 - * This is useful if you, for instance, cache your server-side rendered 98 - * pages, or if you use `getStaticProps` and wish to get this data 99 - * updated. 100 - */ 101 - staleWhileRevalidate?: boolean; 102 - }
+214
packages/next-urql/src/useQuery.ts
··· 1 + 'use client'; 2 + 3 + import { 4 + AnyVariables, 5 + CombinedError, 6 + GraphQLRequestParams, 7 + Operation, 8 + OperationContext, 9 + RequestPolicy, 10 + createRequest, 11 + useQuery as orig_useQuery, 12 + } from 'urql'; 13 + import { useUrqlValue } from './useUrqlValue'; 14 + 15 + /** Input arguments for the {@link useQuery} hook. 16 + * 17 + * @param query - The GraphQL query that `useQuery` executes. 18 + * @param variables - The variables for the GraphQL query that `useQuery` executes. 19 + */ 20 + export type UseQueryArgs< 21 + Variables extends AnyVariables = AnyVariables, 22 + Data = any 23 + > = { 24 + /** Updates the {@link RequestPolicy} for the executed GraphQL query operation. 25 + * 26 + * @remarks 27 + * `requestPolicy` modifies the {@link RequestPolicy} of the GraphQL query operation 28 + * that `useQuery` executes, and indicates a caching strategy for cache exchanges. 29 + * 30 + * For example, when set to `'cache-and-network'`, {@link useQuery} will 31 + * receive a cached result with `stale: true` and an API request will be 32 + * sent in the background. 33 + * 34 + * @see {@link OperationContext.requestPolicy} for where this value is set. 35 + */ 36 + requestPolicy?: RequestPolicy; 37 + /** Updates the {@link OperationContext} for the executed GraphQL query operation. 38 + * 39 + * @remarks 40 + * `context` may be passed to {@link useQuery}, to update the {@link OperationContext} 41 + * of a query operation. This may be used to update the `context` that exchanges 42 + * will receive for a single hook. 43 + * 44 + * Hint: This should be wrapped in a `useMemo` hook, to make sure that your 45 + * component doesn’t infinitely update. 46 + * 47 + * @example 48 + * ```ts 49 + * const [result, reexecute] = useQuery({ 50 + * query, 51 + * context: useMemo(() => ({ 52 + * additionalTypenames: ['Item'], 53 + * }), []) 54 + * }); 55 + * ``` 56 + */ 57 + context?: Partial<OperationContext>; 58 + /** Prevents {@link useQuery} from automatically executing GraphQL query operations. 59 + * 60 + * @remarks 61 + * `pause` may be set to `true` to stop {@link useQuery} from executing 62 + * automatically. The hook will stop receiving updates from the {@link Client} 63 + * and won’t execute the query operation, until either it’s set to `false` 64 + * or the {@link UseQueryExecute} function is called. 65 + * 66 + * @see {@link https://urql.dev/goto/docs/basics/react-preact/#pausing-usequery} for 67 + * documentation on the `pause` option. 68 + */ 69 + pause?: boolean; 70 + } & GraphQLRequestParams<Data, Variables>; 71 + 72 + /** State of the current query, your {@link useQuery} hook is executing. 73 + * 74 + * @remarks 75 + * `UseQueryState` is returned (in a tuple) by {@link useQuery} and 76 + * gives you the updating {@link OperationResult} of GraphQL queries. 77 + * 78 + * Even when the query and variables passed to {@link useQuery} change, 79 + * this state preserves the prior state and sets the `fetching` flag to 80 + * `true`. 81 + * This allows you to display the previous state, while implementing 82 + * a separate loading indicator separately. 83 + */ 84 + export interface UseQueryState< 85 + Data = any, 86 + Variables extends AnyVariables = AnyVariables 87 + > { 88 + /** Indicates whether `useQuery` is waiting for a new result. 89 + * 90 + * @remarks 91 + * When `useQuery` is passed a new query and/or variables, it will 92 + * start executing the new query operation and `fetching` is set to 93 + * `true` until a result arrives. 94 + * 95 + * Hint: This is subtly different than whether the query is actually 96 + * fetching, and doesn’t indicate whether a query is being re-executed 97 + * in the background. For this, see {@link UseQueryState.stale}. 98 + */ 99 + fetching: boolean; 100 + /** Indicates that the state is not fresh and a new result will follow. 101 + * 102 + * @remarks 103 + * The `stale` flag is set to `true` when a new result for the query 104 + * is expected and `useQuery` is waiting for it. This may indicate that 105 + * a new request is being requested in the background. 106 + * 107 + * @see {@link OperationResult.stale} for the source of this value. 108 + */ 109 + stale: boolean; 110 + /** The {@link OperationResult.data} for the executed query. */ 111 + data?: Data; 112 + /** The {@link OperationResult.error} for the executed query. */ 113 + error?: CombinedError; 114 + /** The {@link OperationResult.extensions} for the executed query. */ 115 + extensions?: Record<string, any>; 116 + /** The {@link Operation} that the current state is for. 117 + * 118 + * @remarks 119 + * This is the {@link Operation} that is currently being executed. 120 + * When {@link UseQueryState.fetching} is `true`, this is the 121 + * last `Operation` that the current state was for. 122 + */ 123 + operation?: Operation<Data, Variables>; 124 + } 125 + 126 + /** Triggers {@link useQuery} to execute a new GraphQL query operation. 127 + * 128 + * @param opts - optionally, context options that will be merged with the hook's 129 + * {@link UseQueryArgs.context} options and the `Client`’s options. 130 + * 131 + * @remarks 132 + * When called, {@link useQuery} will re-execute the GraphQL query operation 133 + * it currently holds, even if {@link UseQueryArgs.pause} is set to `true`. 134 + * 135 + * This is useful for executing a paused query or re-executing a query 136 + * and get a new network result, by passing a new request policy. 137 + * 138 + * ```ts 139 + * const [result, reexecuteQuery] = useQuery({ query }); 140 + * 141 + * const refresh = () => { 142 + * // Re-execute the query with a network-only policy, skipping the cache 143 + * reexecuteQuery({ requestPolicy: 'network-only' }); 144 + * }; 145 + * ``` 146 + */ 147 + export type UseQueryExecute = (opts?: Partial<OperationContext>) => void; 148 + 149 + /** Result tuple returned by the {@link useQuery} hook. 150 + * 151 + * @remarks 152 + * Similarly to a `useState` hook’s return value, 153 + * the first element is the {@link useQuery}’s result and state, 154 + * a {@link UseQueryState} object, 155 + * and the second is used to imperatively re-execute the query 156 + * via a {@link UseQueryExecute} function. 157 + */ 158 + export type UseQueryResponse< 159 + Data = any, 160 + Variables extends AnyVariables = AnyVariables 161 + > = [UseQueryState<Data, Variables>, UseQueryExecute]; 162 + 163 + /** Hook to run a GraphQL query and get updated GraphQL results. 164 + * 165 + * @param args - a {@link UseQueryArgs} object, to pass a `query`, `variables`, and options. 166 + * @returns a {@link UseQueryResponse} tuple of a {@link UseQueryState} result, and re-execute function. 167 + * 168 + * @remarks 169 + * `useQuery` allows GraphQL queries to be defined and executed. 170 + * Given {@link UseQueryArgs.query}, it executes the GraphQL query with the 171 + * context’s {@link Client}. 172 + * 173 + * The returned result updates when the `Client` has new results 174 + * for the query, and changes when your input `args` change. 175 + * 176 + * Additionally, if the `suspense` option is enabled on the `Client`, 177 + * the `useQuery` hook will suspend instead of indicating that it’s 178 + * waiting for a result via {@link UseQueryState.fetching}. 179 + * 180 + * @see {@link https://urql.dev/goto/urql/docs/basics/react-preact/#queries} for `useQuery` docs. 181 + * 182 + * @example 183 + * ```ts 184 + * import { gql, useQuery } from 'urql'; 185 + * 186 + * const TodosQuery = gql` 187 + * query { todos { id, title } } 188 + * `; 189 + * 190 + * const Todos = () => { 191 + * const [result, reexecuteQuery] = useQuery({ 192 + * query: TodosQuery, 193 + * variables: {}, 194 + * }); 195 + * // ... 196 + * }; 197 + * ``` 198 + */ 199 + export function useQuery< 200 + Data = any, 201 + Variables extends AnyVariables = AnyVariables 202 + >(args: UseQueryArgs<Variables, Data>): UseQueryResponse<Data, Variables> { 203 + const request = createRequest( 204 + args.query, 205 + (args.variables || {}) as AnyVariables 206 + ); 207 + useUrqlValue(request.key); 208 + 209 + const [result, execute] = orig_useQuery(args); 210 + 211 + useUrqlValue(request.key); 212 + 213 + return [result, execute]; 214 + }
+60
packages/next-urql/src/useUrqlValue.ts
··· 1 + 'use client'; 2 + 3 + import React from 'react'; 4 + import { useDataHydrationContext } from './DataHydrationContext'; 5 + import { SSRContext } from './Provider'; 6 + 7 + export const symbolString = 'urql_transport'; 8 + export const urqlTransportSymbol = Symbol.for(symbolString); 9 + 10 + export type UrqlResult = { data?: any; error?: any; extensions?: any }; 11 + 12 + export function useUrqlValue(operationKey: number): void { 13 + const ssrExchange = React.useContext(SSRContext); 14 + const rehydrationContext = useDataHydrationContext(); 15 + 16 + if (!ssrExchange) { 17 + throw new Error( 18 + 'Missing "UrqlProvider" component as a parent or did not pass in an "ssrExchange" to the Provider.' 19 + ); 20 + } 21 + 22 + if (typeof window == 'undefined') { 23 + const data = ssrExchange.extractData(); 24 + if (rehydrationContext && data[operationKey]) { 25 + const res = data[operationKey]; 26 + const parsed = { 27 + ...res, 28 + extensions: res.extensions 29 + ? JSON.parse(res.extensions) 30 + : res.extensions, 31 + data: res.data ? JSON.parse(res.data) : res.data, 32 + error: res.error, 33 + }; 34 + rehydrationContext.operationValuesByKey[operationKey] = parsed; 35 + } 36 + } else { 37 + const stores = (window[urqlTransportSymbol as any] || 38 + []) as unknown as Array<{ 39 + rehydrate: Record<number, UrqlResult>; 40 + }>; 41 + 42 + const store = stores.find( 43 + x => x && x.rehydrate && x.rehydrate[operationKey] 44 + ); 45 + if (store) { 46 + const result = store.rehydrate && store.rehydrate[operationKey]; 47 + if (result) { 48 + delete store.rehydrate[operationKey]; 49 + ssrExchange.restoreData({ 50 + [operationKey]: { 51 + extensions: JSON.stringify(result.extensions), 52 + data: JSON.stringify(result.data), 53 + error: result.error, 54 + }, 55 + }); 56 + delete store.rehydrate[operationKey]; 57 + } 58 + } 59 + } 60 + }
-199
packages/next-urql/src/with-urql-client.ts
··· 1 - import type { ReactNode, ReactElement } from 'react'; 2 - import * as React from 'react'; 3 - 4 - import { 5 - Provider, 6 - SSRExchange, 7 - ssrExchange, 8 - cacheExchange, 9 - fetchExchange, 10 - } from 'urql'; 11 - 12 - import ssrPrepass from 'react-ssr-prepass'; 13 - import { NextComponentType, NextPage, NextPageContext } from 'next'; 14 - import NextApp, { AppContext } from 'next/app'; 15 - 16 - import { initUrqlClient, resetClient } from './init-urql-client'; 17 - 18 - import { 19 - NextUrqlClientConfig, 20 - NextUrqlContext, 21 - WithUrqlProps, 22 - WithUrqlClientOptions, 23 - } from './types'; 24 - 25 - let ssr: SSRExchange; 26 - type NextPageWithLayout = NextPage & { 27 - getLayout?: (page: ReactElement) => ReactNode; 28 - }; 29 - 30 - /** Creates a wrapper for Next.js Page, App, or Document components that rehydrates `urql` state. 31 - * 32 - * @param getClientConfig - function used to create the {@link Client} 33 - * @param options - optional {@link WithUrqlClientOptions} configuration options 34 - * @returns a higher-order component function, which you can pass a Next.js page or app component. 35 - * 36 - * @remarks 37 - * Used to wrap a Next.js page or app component. It will create a {@link Client} and passes 38 - * it on to the child component and adds a React Provider for it. 39 - * 40 - * It will restore any page’s `pageProps.urqlState` with the {@link SSRExchange} and also 41 - * supports doing this automatically when the {@link WithUrqlClientOptions.ssr} option 42 - * is enabled. 43 - * 44 - * If you don’t define the above option, you will have to write `getServerSideProps` or 45 - * `getStaticProps` methods on your component manually. 46 - * 47 - * @see {@link https://urql.dev/goto/docs/advanced/server-side-rendering/#nextjs} for more documentation. 48 - * 49 - * @example 50 - * ```ts 51 - * import { cacheExchange, fetchExchange } from '@urql/core'; 52 - * import { withUrqlClient } from 'next-urql'; 53 - * 54 - * const WrappedPage = withUrqlClient( 55 - * (ssrExchange) => ({ 56 - * url: 'https://YOUR_API', 57 - * exchanges: [cacheExchange, ssrExchange, fetchExchange], 58 - * }), 59 - * { ssr: true }, 60 - * )(Page); 61 - * ``` 62 - */ 63 - export function withUrqlClient( 64 - getClientConfig: NextUrqlClientConfig, 65 - options?: WithUrqlClientOptions 66 - ) { 67 - if (!options) options = {}; 68 - 69 - return <C extends NextPage<any> | typeof NextApp>( 70 - AppOrPage: C 71 - ): NextComponentType<NextUrqlContext, {}, WithUrqlProps> => { 72 - const shouldEnableSuspense = Boolean( 73 - (AppOrPage.getInitialProps || options!.ssr) && !options!.neverSuspend 74 - ); 75 - 76 - const WithUrql = ({ 77 - pageProps, 78 - urqlClient, 79 - urqlState, 80 - ...rest 81 - }: WithUrqlProps) => { 82 - const [version, forceUpdate] = React.useReducer(prev => prev + 1, 0); 83 - const urqlServerState = (pageProps && pageProps.urqlState) || urqlState; 84 - 85 - const client = React.useMemo(() => { 86 - if (urqlClient && !version) { 87 - return urqlClient; 88 - } 89 - 90 - if (!ssr || typeof window === 'undefined') { 91 - // We want to force the cache to hydrate, we do this by setting the isClient flag to true 92 - ssr = ssrExchange({ 93 - initialState: urqlServerState, 94 - isClient: true, 95 - staleWhileRevalidate: 96 - typeof window !== 'undefined' 97 - ? options!.staleWhileRevalidate 98 - : undefined, 99 - }); 100 - } else if (!version) { 101 - ssr.restoreData(urqlServerState); 102 - } 103 - 104 - const clientConfig = getClientConfig(ssr); 105 - if (!clientConfig.exchanges) { 106 - // When the user does not provide exchanges we make the default assumption. 107 - clientConfig.exchanges = [cacheExchange, ssr, fetchExchange]; 108 - } 109 - 110 - return initUrqlClient(clientConfig, shouldEnableSuspense)!; 111 - }, [urqlClient, urqlServerState, version]); 112 - 113 - const resetUrqlClient = React.useCallback(() => { 114 - resetClient(); 115 - ssr = ssrExchange({ initialState: undefined }); 116 - forceUpdate(); 117 - }, []); 118 - 119 - return React.createElement( 120 - Provider, 121 - { value: client }, 122 - React.createElement(AppOrPage, { 123 - ...rest, 124 - pageProps, 125 - urqlClient: client, 126 - resetUrqlClient, 127 - }) 128 - ); 129 - }; 130 - 131 - // Set the displayName to indicate use of withUrqlClient. 132 - const displayName = 133 - (AppOrPage as any).displayName || AppOrPage.name || 'Component'; 134 - WithUrql.displayName = `withUrqlClient(${displayName})`; 135 - 136 - if ((AppOrPage as NextPageWithLayout).getLayout) { 137 - WithUrql.getLayout = (AppOrPage as NextPageWithLayout).getLayout; 138 - } 139 - 140 - if (AppOrPage.getInitialProps || options!.ssr) { 141 - WithUrql.getInitialProps = async (appOrPageCtx: NextUrqlContext) => { 142 - const AppTree = appOrPageCtx.AppTree!; 143 - 144 - // Determine if we are wrapping an App component or a Page component. 145 - const isApp = !!(appOrPageCtx as AppContext).Component; 146 - const ctx = isApp 147 - ? (appOrPageCtx as AppContext).ctx 148 - : (appOrPageCtx as NextPageContext); 149 - 150 - const ssrCache = ssrExchange({ initialState: undefined }); 151 - const clientConfig = getClientConfig(ssrCache, ctx); 152 - if (!clientConfig.exchanges) { 153 - // When the user does not provide exchanges we make the default assumption. 154 - clientConfig.exchanges = [cacheExchange, ssrCache, fetchExchange]; 155 - } 156 - 157 - const urqlClient = initUrqlClient(clientConfig, !options!.neverSuspend); 158 - 159 - if (urqlClient) { 160 - (ctx as NextUrqlContext).urqlClient = urqlClient; 161 - } 162 - 163 - // Run the wrapped component's getInitialProps function. 164 - let pageProps = {} as any; 165 - if (AppOrPage.getInitialProps) { 166 - pageProps = await AppOrPage.getInitialProps(appOrPageCtx as any); 167 - if (ctx.res && (ctx.res.writableEnded || ctx.res.finished)) { 168 - return { ...pageProps, urqlClient }; 169 - } 170 - } 171 - 172 - // Check the window object to determine whether or not we are on the server. 173 - // getInitialProps runs on the server for initial render, and on the client for navigation. 174 - // We only want to run the prepass step on the server. 175 - if (typeof window !== 'undefined') { 176 - return { ...pageProps, urqlClient }; 177 - } 178 - 179 - const props = { ...pageProps, urqlClient }; 180 - const appTreeProps = isApp 181 - ? { pageProps: {}, ...props } 182 - : { pageProps: props }; 183 - 184 - // Run the prepass step on AppTree. This will run all urql queries on the server. 185 - if (!options!.neverSuspend) { 186 - await ssrPrepass(React.createElement(AppTree, appTreeProps)); 187 - } 188 - 189 - return { 190 - ...pageProps, 191 - urqlState: ssrCache ? ssrCache.extractData() : undefined, 192 - urqlClient, 193 - }; 194 - }; 195 - } 196 - 197 - return WithUrql; 198 - }; 199 - }
+189 -832
pnpm-lock.yaml
··· 1 - lockfileVersion: '6.1' 1 + lockfileVersion: '6.0' 2 2 3 3 settings: 4 4 autoInstallPeers: true ··· 339 339 version: 16.6.0 340 340 341 341 packages/next-urql: 342 - dependencies: 343 - react-ssr-prepass: 344 - specifier: ^1.4.0 345 - version: 1.4.0(react@17.0.2) 346 342 devDependencies: 347 - '@types/enzyme': 348 - specifier: ^3.10.3 349 - version: 3.10.8 350 - '@types/enzyme-adapter-react-16': 351 - specifier: ^1.0.5 352 - version: 1.0.6 353 - '@types/node-fetch': 354 - specifier: ^2.5.4 355 - version: 2.5.10 356 343 '@types/react': 357 344 specifier: ^17.0.39 358 345 version: 17.0.52 359 346 '@types/react-dom': 360 - specifier: ^17.0.3 361 - version: 17.0.18 347 + specifier: ^18.2.4 348 + version: 18.2.4 362 349 '@urql/core': 363 350 specifier: workspace:* 364 351 version: link:../core 365 - enzyme: 366 - specifier: ^3.11.0 367 - version: 3.11.0 368 - enzyme-adapter-react-16: 369 - specifier: ^1.15.2 370 - version: 1.15.6(enzyme@3.11.0)(react-dom@17.0.2)(react@17.0.2) 371 352 graphql: 372 353 specifier: ^16.6.0 373 354 version: 16.6.0 374 355 next: 375 - specifier: ^11.0.1 376 - version: 11.0.1(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4) 356 + specifier: ^13.0.0 357 + version: 13.0.0(@babel/core@7.21.5)(react-dom@17.0.2)(react@17.0.2) 377 358 react: 378 359 specifier: ^17.0.2 379 360 version: 17.0.2 380 361 react-dom: 381 362 specifier: ^17.0.2 382 363 version: 17.0.2(react@17.0.2) 383 - react-is: 384 - specifier: ^17.0.2 385 - version: 17.0.2 386 364 urql: 387 365 specifier: workspace:* 388 366 version: link:../react-urql ··· 681 659 chokidar: 3.5.3 682 660 transitivePeerDependencies: 683 661 - supports-color 684 - 685 - /@babel/code-frame@7.12.11: 686 - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} 687 - dependencies: 688 - '@babel/highlight': 7.22.5 689 - dev: true 690 662 691 663 /@babel/code-frame@7.21.4: 692 664 resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} ··· 1790 1762 regenerator-runtime: 0.13.11 1791 1763 dev: true 1792 1764 1793 - /@babel/runtime@7.12.5: 1794 - resolution: {integrity: sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==} 1795 - dependencies: 1796 - regenerator-runtime: 0.13.11 1797 - dev: true 1798 - 1799 1765 /@babel/runtime@7.21.0: 1800 1766 resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} 1801 1767 engines: {node: '>=6.9.0'} ··· 1848 1814 dependencies: 1849 1815 '@babel/helper-string-parser': 7.21.5 1850 1816 '@babel/helper-validator-identifier': 7.22.5 1851 - to-fast-properties: 2.0.0 1852 - dev: true 1853 - 1854 - /@babel/types@7.8.3: 1855 - resolution: {integrity: sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==} 1856 - dependencies: 1857 - esutils: 2.0.3 1858 - lodash: 4.17.21 1859 1817 to-fast-properties: 2.0.0 1860 1818 dev: true 1861 1819 ··· 2192 2150 resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} 2193 2151 dev: true 2194 2152 2195 - /@hapi/accept@5.0.2: 2196 - resolution: {integrity: sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==} 2197 - dependencies: 2198 - '@hapi/boom': 9.1.3 2199 - '@hapi/hoek': 9.2.0 2200 - dev: true 2201 - 2202 - /@hapi/boom@9.1.3: 2203 - resolution: {integrity: sha512-RlrGyZ603hE/eRTZtTltocRm50HHmrmL3kGOP0SQ9MasazlW1mt/fkv4C5P/6rnpFXjwld/POFX1C8tMZE3ldg==} 2204 - dependencies: 2205 - '@hapi/hoek': 9.2.0 2206 - dev: true 2207 - 2208 - /@hapi/hoek@9.2.0: 2209 - resolution: {integrity: sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==} 2210 - dev: true 2211 - 2212 2153 /@humanwhocodes/config-array@0.11.8: 2213 2154 resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 2214 2155 engines: {node: '>=10.10.0'} ··· 2342 2283 /@mdx-js/util@1.6.22: 2343 2284 resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} 2344 2285 2345 - /@next/env@11.0.1: 2346 - resolution: {integrity: sha512-yZfKh2U6R9tEYyNUrs2V3SBvCMufkJ07xMH5uWy8wqcl5gAXoEw6A/1LDqwX3j7pUutF9d1ZxpdGDA3Uag+aQQ==} 2286 + /@next/env@13.0.0: 2287 + resolution: {integrity: sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg==} 2347 2288 dev: true 2348 2289 2349 - /@next/polyfill-module@11.0.1: 2350 - resolution: {integrity: sha512-Cjs7rrKCg4CF4Jhri8PCKlBXhszTfOQNl9AjzdNy4K5jXFyxyoSzuX2rK4IuoyE+yGp5A3XJCBEmOQ4xbUp9Mg==} 2290 + /@next/swc-android-arm-eabi@13.0.0: 2291 + resolution: {integrity: sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA==} 2292 + engines: {node: '>= 10'} 2293 + cpu: [arm] 2294 + os: [android] 2295 + requiresBuild: true 2351 2296 dev: true 2297 + optional: true 2352 2298 2353 - /@next/react-dev-overlay@11.0.1(react-dom@17.0.2)(react@17.0.2): 2354 - resolution: {integrity: sha512-lvUjMVpLsgzADs9Q8wtC5LNqvfdN+M0BDMSrqr04EDWAyyX0vURHC9hkvLbyEYWyh+WW32pwjKBXdkMnJhoqMg==} 2355 - peerDependencies: 2356 - react: ^17.0.2 || 17 2357 - react-dom: ^17.0.2 || 17 2358 - dependencies: 2359 - '@babel/code-frame': 7.12.11 2360 - anser: 1.4.9 2361 - chalk: 4.0.0 2362 - classnames: 2.2.6 2363 - css.escape: 1.5.1 2364 - data-uri-to-buffer: 3.0.1 2365 - platform: 1.3.6 2366 - react: 17.0.2 2367 - react-dom: 17.0.2(react@17.0.2) 2368 - shell-quote: 1.7.2 2369 - source-map: 0.8.0-beta.0 2370 - stacktrace-parser: 0.1.10 2371 - strip-ansi: 6.0.0 2299 + /@next/swc-android-arm64@13.0.0: 2300 + resolution: {integrity: sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g==} 2301 + engines: {node: '>= 10'} 2302 + cpu: [arm64] 2303 + os: [android] 2304 + requiresBuild: true 2372 2305 dev: true 2306 + optional: true 2373 2307 2374 - /@next/react-refresh-utils@11.0.1(react-refresh@0.8.3): 2375 - resolution: {integrity: sha512-K347DM6Z7gBSE+TfUaTTceWvbj0B6iNAsFZXbFZOlfg3uyz2sbKpzPYYFocCc27yjLaS8OfR8DEdS2mZXi8Saw==} 2376 - peerDependencies: 2377 - react-refresh: 0.8.3 2378 - webpack: ^4 || ^5 2379 - peerDependenciesMeta: 2380 - webpack: 2381 - optional: true 2382 - dependencies: 2383 - react-refresh: 0.8.3 2308 + /@next/swc-darwin-arm64@13.0.0: 2309 + resolution: {integrity: sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q==} 2310 + engines: {node: '>= 10'} 2311 + cpu: [arm64] 2312 + os: [darwin] 2313 + requiresBuild: true 2384 2314 dev: true 2315 + optional: true 2316 + 2317 + /@next/swc-darwin-x64@13.0.0: 2318 + resolution: {integrity: sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw==} 2319 + engines: {node: '>= 10'} 2320 + cpu: [x64] 2321 + os: [darwin] 2322 + requiresBuild: true 2323 + dev: true 2324 + optional: true 2325 + 2326 + /@next/swc-freebsd-x64@13.0.0: 2327 + resolution: {integrity: sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg==} 2328 + engines: {node: '>= 10'} 2329 + cpu: [x64] 2330 + os: [freebsd] 2331 + requiresBuild: true 2332 + dev: true 2333 + optional: true 2334 + 2335 + /@next/swc-linux-arm-gnueabihf@13.0.0: 2336 + resolution: {integrity: sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q==} 2337 + engines: {node: '>= 10'} 2338 + cpu: [arm] 2339 + os: [linux] 2340 + requiresBuild: true 2341 + dev: true 2342 + optional: true 2343 + 2344 + /@next/swc-linux-arm64-gnu@13.0.0: 2345 + resolution: {integrity: sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw==} 2346 + engines: {node: '>= 10'} 2347 + cpu: [arm64] 2348 + os: [linux] 2349 + requiresBuild: true 2350 + dev: true 2351 + optional: true 2352 + 2353 + /@next/swc-linux-arm64-musl@13.0.0: 2354 + resolution: {integrity: sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g==} 2355 + engines: {node: '>= 10'} 2356 + cpu: [arm64] 2357 + os: [linux] 2358 + requiresBuild: true 2359 + dev: true 2360 + optional: true 2361 + 2362 + /@next/swc-linux-x64-gnu@13.0.0: 2363 + resolution: {integrity: sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw==} 2364 + engines: {node: '>= 10'} 2365 + cpu: [x64] 2366 + os: [linux] 2367 + requiresBuild: true 2368 + dev: true 2369 + optional: true 2370 + 2371 + /@next/swc-linux-x64-musl@13.0.0: 2372 + resolution: {integrity: sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA==} 2373 + engines: {node: '>= 10'} 2374 + cpu: [x64] 2375 + os: [linux] 2376 + requiresBuild: true 2377 + dev: true 2378 + optional: true 2379 + 2380 + /@next/swc-win32-arm64-msvc@13.0.0: 2381 + resolution: {integrity: sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg==} 2382 + engines: {node: '>= 10'} 2383 + cpu: [arm64] 2384 + os: [win32] 2385 + requiresBuild: true 2386 + dev: true 2387 + optional: true 2388 + 2389 + /@next/swc-win32-ia32-msvc@13.0.0: 2390 + resolution: {integrity: sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg==} 2391 + engines: {node: '>= 10'} 2392 + cpu: [ia32] 2393 + os: [win32] 2394 + requiresBuild: true 2395 + dev: true 2396 + optional: true 2397 + 2398 + /@next/swc-win32-x64-msvc@13.0.0: 2399 + resolution: {integrity: sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA==} 2400 + engines: {node: '>= 10'} 2401 + cpu: [x64] 2402 + os: [win32] 2403 + requiresBuild: true 2404 + dev: true 2405 + optional: true 2385 2406 2386 2407 /@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents: 2387 2408 resolution: {integrity: sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==} ··· 2817 2838 resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} 2818 2839 engines: {node: '>=4'} 2819 2840 2841 + /@swc/helpers@0.4.11: 2842 + resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} 2843 + dependencies: 2844 + tslib: 2.5.0 2845 + dev: true 2846 + 2820 2847 /@testing-library/dom@7.30.4: 2821 2848 resolution: {integrity: sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==} 2822 2849 engines: {node: '>=10'} ··· 2855 2882 dependencies: 2856 2883 '@babel/runtime': 7.21.0 2857 2884 '@types/react': 17.0.52 2858 - '@types/react-dom': 17.0.18 2885 + '@types/react-dom': 18.2.4 2859 2886 '@types/react-test-renderer': 17.0.1 2860 2887 filter-console: 0.1.1 2861 2888 react: 17.0.2 ··· 2903 2930 resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} 2904 2931 dev: true 2905 2932 2906 - /@types/cheerio@0.22.28: 2907 - resolution: {integrity: sha512-ehUMGSW5IeDxJjbru4awKYMlKGmo1wSSGUVqXtYwlgmUM8X1a0PZttEIm6yEY7vHsY/hh6iPnklF213G0UColw==} 2908 - dependencies: 2909 - '@types/node': 18.16.3 2910 - dev: true 2911 - 2912 - /@types/enzyme-adapter-react-16@1.0.6: 2913 - resolution: {integrity: sha512-VonDkZ15jzqDWL8mPFIQnnLtjwebuL9YnDkqeCDYnB4IVgwUm0mwKkqhrxLL6mb05xm7qqa3IE95m8CZE9imCg==} 2914 - dependencies: 2915 - '@types/enzyme': 3.10.8 2916 - dev: true 2917 - 2918 - /@types/enzyme@3.10.8: 2919 - resolution: {integrity: sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g==} 2920 - dependencies: 2921 - '@types/cheerio': 0.22.28 2922 - '@types/react': 17.0.52 2923 - dev: true 2924 - 2925 2933 /@types/estree@1.0.0: 2926 2934 resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} 2927 2935 dev: true ··· 2983 2991 resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} 2984 2992 dev: true 2985 2993 2986 - /@types/node-fetch@2.5.10: 2987 - resolution: {integrity: sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==} 2988 - dependencies: 2989 - '@types/node': 18.16.3 2990 - form-data: 3.0.1 2991 - dev: true 2992 - 2993 2994 /@types/node@12.20.55: 2994 2995 resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 2995 2996 dev: true ··· 3021 3022 /@types/q@1.5.4: 3022 3023 resolution: {integrity: sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==} 3023 3024 3024 - /@types/react-dom@17.0.18: 3025 - resolution: {integrity: sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==} 3025 + /@types/react-dom@18.2.4: 3026 + resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==} 3026 3027 dependencies: 3027 3028 '@types/react': 17.0.52 3028 3029 dev: true ··· 3612 3613 indent-string: 4.0.0 3613 3614 dev: true 3614 3615 3615 - /airbnb-prop-types@2.16.0(react@17.0.2): 3616 - resolution: {integrity: sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==} 3617 - peerDependencies: 3618 - react: ^0.14 || ^15.0.0 || ^16.0.0-alpha || 17 3619 - dependencies: 3620 - array.prototype.find: 2.1.1 3621 - function.prototype.name: 1.1.5 3622 - is-regex: 1.1.4 3623 - object-is: 1.1.5 3624 - object.assign: 4.1.4 3625 - object.entries: 1.1.6 3626 - prop-types: 15.8.1 3627 - prop-types-exact: 1.2.0 3628 - react: 17.0.2 3629 - react-is: 17.0.2 3630 - dev: true 3631 - 3632 3616 /ajv-errors@1.0.1(ajv@6.12.6): 3633 3617 resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} 3634 3618 peerDependencies: ··· 3661 3645 3662 3646 /alphanum-sort@1.0.2: 3663 3647 resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==} 3664 - 3665 - /anser@1.4.9: 3666 - resolution: {integrity: sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==} 3667 - dev: true 3668 3648 3669 3649 /ansi-align@2.0.0: 3670 3650 resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} ··· 3823 3803 dependencies: 3824 3804 call-bind: 1.0.2 3825 3805 is-array-buffer: 3.0.2 3826 - 3827 - /array-filter@1.0.0: 3828 - resolution: {integrity: sha512-Ene1hbrinPZ1qPoZp7NSx4jQnh4nr7MtY78pHNb+yr8yHbxmTS7ChGW0a55JKA7TkRDeoQxK4GcJaCvBYplSKA==} 3829 - dev: true 3830 3806 3831 3807 /array-flatten@1.1.1: 3832 3808 resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} ··· 3864 3840 resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} 3865 3841 engines: {node: '>=0.10.0'} 3866 3842 3867 - /array.prototype.find@2.1.1: 3868 - resolution: {integrity: sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==} 3869 - dependencies: 3870 - define-properties: 1.2.0 3871 - es-abstract: 1.21.2 3872 - dev: true 3873 - 3874 3843 /array.prototype.flat@1.3.1: 3875 3844 resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 3876 3845 engines: {node: '>= 0.4'} ··· 3934 3903 object-assign: 4.1.1 3935 3904 util: 0.10.3 3936 3905 3937 - /assert@2.0.0: 3938 - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} 3939 - dependencies: 3940 - es6-object-assign: 1.1.0 3941 - is-nan: 1.3.2 3942 - object-is: 1.1.5 3943 - util: 0.12.4 3944 - dev: true 3945 - 3946 3906 /assertion-error@1.1.0: 3947 3907 resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 3948 3908 dev: true ··· 3950 3910 /assign-symbols@1.0.0: 3951 3911 resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} 3952 3912 engines: {node: '>=0.10.0'} 3953 - 3954 - /ast-types@0.13.2: 3955 - resolution: {integrity: sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==} 3956 - engines: {node: '>=4'} 3957 - dev: true 3958 3913 3959 3914 /astral-regex@2.0.0: 3960 3915 resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} ··· 4414 4369 dependencies: 4415 4370 pako: 1.0.11 4416 4371 4417 - /browserslist@4.16.6: 4418 - resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} 4419 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 4420 - hasBin: true 4421 - dependencies: 4422 - caniuse-lite: 1.0.30001466 4423 - colorette: 1.2.2 4424 - electron-to-chromium: 1.4.332 4425 - escalade: 3.1.1 4426 - node-releases: 1.1.71 4427 - dev: true 4428 - 4429 4372 /browserslist@4.21.5: 4430 4373 resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 4431 4374 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} ··· 4467 4410 ieee754: 1.2.1 4468 4411 isarray: 1.0.0 4469 4412 4470 - /buffer@5.6.0: 4471 - resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} 4472 - dependencies: 4473 - base64-js: 1.5.1 4474 - ieee754: 1.2.1 4475 - dev: true 4476 - 4477 4413 /buffer@5.7.1: 4478 4414 resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 4479 4415 dependencies: ··· 4521 4457 chownr: 1.1.4 4522 4458 figgy-pudding: 3.5.2 4523 4459 glob: 7.2.3 4524 - graceful-fs: 4.2.10 4460 + graceful-fs: 4.2.11 4525 4461 infer-owner: 1.0.4 4526 4462 lru-cache: 5.1.1 4527 4463 mississippi: 3.0.0 ··· 4726 4662 escape-string-regexp: 1.0.5 4727 4663 supports-color: 5.5.0 4728 4664 4729 - /chalk@4.0.0: 4730 - resolution: {integrity: sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==} 4731 - engines: {node: '>=10'} 4732 - dependencies: 4733 - ansi-styles: 4.3.0 4734 - supports-color: 7.2.0 4735 - dev: true 4736 - 4737 4665 /chalk@4.1.2: 4738 4666 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 4739 4667 engines: {node: '>=10'} ··· 4774 4702 /check-types@8.0.3: 4775 4703 resolution: {integrity: sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==} 4776 4704 4777 - /cheerio-select@1.4.0: 4778 - resolution: {integrity: sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==} 4779 - dependencies: 4780 - css-select: 4.3.0 4781 - css-what: 5.0.0 4782 - domelementtype: 2.2.0 4783 - domhandler: 4.3.1 4784 - domutils: 2.8.0 4785 - dev: true 4786 - 4787 - /cheerio@1.0.0-rc.6: 4788 - resolution: {integrity: sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==} 4789 - engines: {node: '>= 0.12'} 4790 - dependencies: 4791 - cheerio-select: 1.4.0 4792 - dom-serializer: 1.3.1 4793 - domhandler: 4.3.1 4794 - htmlparser2: 6.1.0 4795 - parse5: 6.0.1 4796 - parse5-htmlparser2-tree-adapter: 6.0.1 4797 - dev: true 4798 - 4799 4705 /chokidar@2.1.8(supports-color@6.1.0): 4800 4706 resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} 4801 4707 deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies ··· 4816 4722 transitivePeerDependencies: 4817 4723 - supports-color 4818 4724 4819 - /chokidar@3.5.1: 4820 - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} 4821 - engines: {node: '>= 8.10.0'} 4822 - dependencies: 4823 - anymatch: 3.1.2 4824 - braces: 3.0.2 4825 - glob-parent: 5.1.2 4826 - is-binary-path: 2.1.0 4827 - is-glob: 4.0.3 4828 - normalize-path: 3.0.0 4829 - readdirp: 3.5.0 4830 - optionalDependencies: 4831 - fsevents: 2.3.2 4832 - dev: true 4833 - 4834 4725 /chokidar@3.5.3: 4835 4726 resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 4836 4727 engines: {node: '>= 8.10.0'} ··· 4894 4785 isobject: 3.0.1 4895 4786 static-extend: 0.1.2 4896 4787 4897 - /classnames@2.2.6: 4898 - resolution: {integrity: sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==} 4899 - dev: true 4900 - 4901 4788 /clean-css@4.2.3: 4902 4789 resolution: {integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==} 4903 4790 engines: {node: '>= 4.0'} ··· 4963 4850 4964 4851 /cli-width@2.2.1: 4965 4852 resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} 4853 + 4854 + /client-only@0.0.1: 4855 + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 4856 + dev: true 4966 4857 4967 4858 /clipboardy@1.2.3: 4968 4859 resolution: {integrity: sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==} ··· 5238 5129 resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} 5239 5130 engines: {node: '>= 0.6'} 5240 5131 5241 - /convert-source-map@1.7.0: 5242 - resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} 5243 - dependencies: 5244 - safe-buffer: 5.1.2 5245 - dev: true 5246 - 5247 5132 /convert-source-map@1.9.0: 5248 5133 resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 5249 5134 ··· 5488 5373 /css-what@3.4.2: 5489 5374 resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} 5490 5375 engines: {node: '>= 6'} 5491 - 5492 - /css-what@5.0.0: 5493 - resolution: {integrity: sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA==} 5494 - engines: {node: '>= 6'} 5495 - dev: true 5496 5376 5497 5377 /css-what@6.1.0: 5498 5378 resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 5499 5379 engines: {node: '>= 6'} 5500 5380 dev: true 5501 5381 5502 - /css.escape@1.5.1: 5503 - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} 5504 - dev: true 5505 - 5506 5382 /cssesc@3.0.0: 5507 5383 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 5508 5384 engines: {node: '>=4'} ··· 5543 5419 postcss-svgo: 4.0.3 5544 5420 postcss-unique-selectors: 4.0.1 5545 5421 5546 - /cssnano-preset-simple@2.0.0(postcss@8.2.13): 5547 - resolution: {integrity: sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg==} 5548 - peerDependencies: 5549 - postcss: ^8.2.1 5550 - dependencies: 5551 - caniuse-lite: 1.0.30001466 5552 - postcss: 8.2.13 5553 - dev: true 5554 - 5555 - /cssnano-simple@2.0.0(postcss@8.2.13): 5556 - resolution: {integrity: sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w==} 5557 - peerDependencies: 5558 - postcss: ^8.2.2 5559 - dependencies: 5560 - cssnano-preset-simple: 2.0.0(postcss@8.2.13) 5561 - postcss: 8.2.13 5562 - dev: true 5563 - 5564 5422 /cssnano-util-get-arguments@4.0.0: 5565 5423 resolution: {integrity: sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==} 5566 5424 engines: {node: '>=6.9.0'} ··· 5691 5549 assert-plus: 1.0.0 5692 5550 dev: true 5693 5551 5694 - /data-uri-to-buffer@3.0.1: 5695 - resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} 5696 - engines: {node: '>= 6'} 5697 - dev: true 5698 - 5699 5552 /data-uri-to-buffer@4.0.1: 5700 5553 resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 5701 5554 engines: {node: '>= 12'} ··· 5886 5739 decompress-tarbz2: 4.1.1 5887 5740 decompress-targz: 4.1.1 5888 5741 decompress-unzip: 4.0.1 5889 - graceful-fs: 4.2.10 5742 + graceful-fs: 4.2.11 5890 5743 make-dir: 1.3.0 5891 5744 pify: 2.3.0 5892 5745 strip-dirs: 2.1.0 ··· 6035 5888 path-type: 4.0.0 6036 5889 dev: true 6037 5890 6038 - /discontinuous-range@1.0.0: 6039 - resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} 6040 - dev: true 6041 - 6042 5891 /dns-equal@1.0.0: 6043 5892 resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} 6044 5893 ··· 6096 5945 /domain-browser@1.2.0: 6097 5946 resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} 6098 5947 engines: {node: '>=0.4', npm: '>=1.2'} 6099 - 6100 - /domain-browser@4.19.0: 6101 - resolution: {integrity: sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==} 6102 - engines: {node: '>=10'} 6103 - dev: true 6104 5948 6105 5949 /domelementtype@1.3.1: 6106 5950 resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} ··· 6266 6110 dependencies: 6267 6111 iconv-lite: 0.6.3 6268 6112 dev: true 6113 + optional: true 6269 6114 6270 6115 /end-of-stream@1.4.4: 6271 6116 resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} ··· 6346 6191 engines: {node: '>=6'} 6347 6192 dev: true 6348 6193 6349 - /enzyme-adapter-react-16@1.15.6(enzyme@3.11.0)(react-dom@17.0.2)(react@17.0.2): 6350 - resolution: {integrity: sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==} 6351 - peerDependencies: 6352 - enzyme: ^3.0.0 6353 - react: ^16.0.0-0 || 17 6354 - react-dom: ^16.0.0-0 || 17 6355 - dependencies: 6356 - enzyme: 3.11.0 6357 - enzyme-adapter-utils: 1.14.0(react@17.0.2) 6358 - enzyme-shallow-equal: 1.0.4 6359 - has: 1.0.3 6360 - object.assign: 4.1.4 6361 - object.values: 1.1.6 6362 - prop-types: 15.8.1 6363 - react: 17.0.2 6364 - react-dom: 17.0.2(react@17.0.2) 6365 - react-is: 17.0.2 6366 - react-test-renderer: 16.14.0(react@17.0.2) 6367 - semver: 5.7.1 6368 - dev: true 6369 - 6370 - /enzyme-adapter-utils@1.14.0(react@17.0.2): 6371 - resolution: {integrity: sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==} 6372 - peerDependencies: 6373 - react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 || 17 6374 - dependencies: 6375 - airbnb-prop-types: 2.16.0(react@17.0.2) 6376 - function.prototype.name: 1.1.5 6377 - has: 1.0.3 6378 - object.assign: 4.1.4 6379 - object.fromentries: 2.0.6 6380 - prop-types: 15.8.1 6381 - react: 17.0.2 6382 - semver: 5.7.1 6383 - dev: true 6384 - 6385 - /enzyme-shallow-equal@1.0.4: 6386 - resolution: {integrity: sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==} 6387 - dependencies: 6388 - has: 1.0.3 6389 - object-is: 1.1.5 6390 - dev: true 6391 - 6392 - /enzyme@3.11.0: 6393 - resolution: {integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==} 6394 - dependencies: 6395 - array.prototype.flat: 1.3.1 6396 - cheerio: 1.0.0-rc.6 6397 - enzyme-shallow-equal: 1.0.4 6398 - function.prototype.name: 1.1.5 6399 - has: 1.0.3 6400 - html-element-map: 1.3.0 6401 - is-boolean-object: 1.1.2 6402 - is-callable: 1.2.7 6403 - is-number-object: 1.0.7 6404 - is-regex: 1.1.4 6405 - is-string: 1.0.7 6406 - is-subset: 0.1.1 6407 - lodash.escape: 4.0.1 6408 - lodash.isequal: 4.5.0 6409 - object-inspect: 1.12.3 6410 - object-is: 1.1.5 6411 - object.assign: 4.1.4 6412 - object.entries: 1.1.6 6413 - object.values: 1.1.6 6414 - raf: 3.4.1 6415 - rst-selector-parser: 2.2.3 6416 - string.prototype.trim: 1.2.7 6417 - dev: true 6418 - 6419 6194 /err-code@2.0.3: 6420 6195 resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} 6421 6196 dev: true ··· 6491 6266 is-callable: 1.2.7 6492 6267 is-date-object: 1.0.5 6493 6268 is-symbol: 1.0.4 6494 - 6495 - /es6-object-assign@1.1.0: 6496 - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} 6497 - dev: true 6498 6269 6499 6270 /esbuild-android-64@0.15.18: 6500 6271 resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} ··· 7347 7118 make-dir: 2.1.0 7348 7119 pkg-dir: 3.0.0 7349 7120 7350 - /find-cache-dir@3.3.1: 7351 - resolution: {integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==} 7352 - engines: {node: '>=8'} 7353 - dependencies: 7354 - commondir: 1.0.1 7355 - make-dir: 3.1.0 7356 - pkg-dir: 4.2.0 7357 - dev: true 7358 - 7359 7121 /find-cache-dir@3.3.2: 7360 7122 resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 7361 7123 engines: {node: '>=8'} ··· 7466 7228 mime-types: 2.1.35 7467 7229 dev: true 7468 7230 7469 - /form-data@3.0.1: 7470 - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} 7471 - engines: {node: '>= 6'} 7472 - dependencies: 7473 - asynckit: 0.4.0 7474 - combined-stream: 1.0.8 7475 - mime-types: 2.1.35 7476 - dev: true 7477 - 7478 7231 /form-data@4.0.0: 7479 7232 resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 7480 7233 engines: {node: '>= 6'} ··· 7575 7328 /fs-write-stream-atomic@1.0.10: 7576 7329 resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} 7577 7330 dependencies: 7578 - graceful-fs: 4.2.10 7331 + graceful-fs: 4.2.11 7579 7332 iferr: 0.1.5 7580 7333 imurmurhash: 0.1.4 7581 7334 readable-stream: 2.3.7 ··· 7605 7358 resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} 7606 7359 engines: {node: '>=0.6'} 7607 7360 dependencies: 7608 - graceful-fs: 4.2.10 7361 + graceful-fs: 4.2.11 7609 7362 inherits: 2.0.4 7610 7363 mkdirp: 0.5.5 7611 7364 rimraf: 2.7.1 ··· 7678 7431 has: 1.0.3 7679 7432 has-symbols: 1.0.3 7680 7433 7681 - /get-orientation@1.1.2: 7682 - resolution: {integrity: sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==} 7683 - dependencies: 7684 - stream-parser: 0.3.1 7685 - transitivePeerDependencies: 7686 - - supports-color 7687 - dev: true 7688 - 7689 7434 /get-proxy@2.1.0: 7690 7435 resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} 7691 7436 engines: {node: '>=4'} ··· 7777 7522 engines: {node: '>=10.13.0'} 7778 7523 dependencies: 7779 7524 is-glob: 4.0.3 7780 - dev: true 7781 - 7782 - /glob-to-regexp@0.4.1: 7783 - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 7784 7525 dev: true 7785 7526 7786 7527 /glob@7.1.6: ··· 8178 7919 /hsla-regex@1.0.0: 8179 7920 resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==} 8180 7921 8181 - /html-element-map@1.3.0: 8182 - resolution: {integrity: sha512-AqCt/m9YaiMwaaAyOPdq4Ga0cM+jdDWWGueUMkdROZcTeClaGpN0AQeyGchZhTegQoABmc6+IqH7oCR/8vhQYg==} 8183 - dependencies: 8184 - array-filter: 1.0.0 8185 - call-bind: 1.0.2 8186 - dev: true 8187 - 8188 7922 /html-encoding-sniffer@3.0.0: 8189 7923 resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} 8190 7924 engines: {node: '>=12'} ··· 8237 7971 inherits: 2.0.4 8238 7972 readable-stream: 3.6.2 8239 7973 8240 - /htmlparser2@6.1.0: 8241 - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} 8242 - dependencies: 8243 - domelementtype: 2.2.0 8244 - domhandler: 4.3.1 8245 - domutils: 2.8.0 8246 - entities: 2.2.0 8247 - dev: true 8248 - 8249 7974 /http-cache-semantics@3.8.1: 8250 7975 resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} 8251 7976 ··· 8428 8153 /ignore@5.2.4: 8429 8154 resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 8430 8155 engines: {node: '>= 4'} 8431 - dev: true 8432 - 8433 - /image-size@1.0.0: 8434 - resolution: {integrity: sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==} 8435 - engines: {node: '>=12.0.0'} 8436 - hasBin: true 8437 - dependencies: 8438 - queue: 6.0.2 8439 8156 dev: true 8440 8157 8441 8158 /import-cwd@2.1.0: ··· 8796 8513 engines: {node: '>=12'} 8797 8514 dev: true 8798 8515 8799 - /is-generator-function@1.0.9: 8800 - resolution: {integrity: sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==} 8801 - engines: {node: '>= 0.4'} 8802 - dev: true 8803 - 8804 8516 /is-glob@3.1.0: 8805 8517 resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} 8806 8518 engines: {node: '>=0.10.0'} ··· 8836 8548 resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 8837 8549 dev: true 8838 8550 8839 - /is-nan@1.3.2: 8840 - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} 8841 - engines: {node: '>= 0.4'} 8842 - dependencies: 8843 - call-bind: 1.0.2 8844 - define-properties: 1.2.0 8845 - dev: true 8846 - 8847 8551 /is-natural-number@4.0.1: 8848 8552 resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} 8849 8553 ··· 8970 8674 better-path-resolve: 1.0.0 8971 8675 dev: true 8972 8676 8973 - /is-subset@0.1.1: 8974 - resolution: {integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==} 8975 - dev: true 8976 - 8977 8677 /is-symbol@1.0.4: 8978 8678 resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 8979 8679 engines: {node: '>= 0.4'} ··· 9059 8759 has-to-string-tag-x: 1.4.1 9060 8760 is-object: 1.0.2 9061 8761 9062 - /jest-worker@27.0.0-next.5: 9063 - resolution: {integrity: sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==} 9064 - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 9065 - dependencies: 9066 - '@types/node': 18.16.3 9067 - merge-stream: 2.0.0 9068 - supports-color: 8.1.1 9069 - dev: true 9070 - 9071 8762 /js-beautify@1.14.6: 9072 8763 resolution: {integrity: sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw==} 9073 8764 engines: {node: '>=10'} ··· 9221 8912 /jsonfile@4.0.0: 9222 8913 resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 9223 8914 optionalDependencies: 9224 - graceful-fs: 4.2.10 8915 + graceful-fs: 4.2.11 9225 8916 9226 8917 /jsonfile@6.1.0: 9227 8918 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 9228 8919 dependencies: 9229 8920 universalify: 2.0.0 9230 8921 optionalDependencies: 9231 - graceful-fs: 4.2.10 8922 + graceful-fs: 4.2.11 9232 8923 dev: true 9233 8924 9234 8925 /jsonparse@1.3.1: ··· 9406 9097 resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 9407 9098 engines: {node: '>=4'} 9408 9099 dependencies: 9409 - graceful-fs: 4.2.10 9100 + graceful-fs: 4.2.11 9410 9101 parse-json: 4.0.0 9411 9102 pify: 3.0.0 9412 9103 strip-bom: 3.0.0 ··· 9434 9125 json5: 0.5.1 9435 9126 object-assign: 4.1.1 9436 9127 9437 - /loader-utils@1.2.3: 9438 - resolution: {integrity: sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==} 9439 - engines: {node: '>=4.0.0'} 9440 - dependencies: 9441 - big.js: 5.2.2 9442 - emojis-list: 2.1.0 9443 - json5: 1.0.1 9444 - dev: true 9445 - 9446 9128 /loader-utils@1.4.0: 9447 9129 resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==} 9448 9130 engines: {node: '>=4.0.0'} ··· 9494 9176 /lodash.debounce@4.0.8: 9495 9177 resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} 9496 9178 9497 - /lodash.escape@4.0.1: 9498 - resolution: {integrity: sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==} 9499 - dev: true 9500 - 9501 - /lodash.flattendeep@4.4.0: 9502 - resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} 9503 - dev: true 9504 - 9505 - /lodash.isequal@4.5.0: 9506 - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 9507 - dev: true 9508 - 9509 9179 /lodash.memoize@4.1.2: 9510 9180 resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 9511 9181 ··· 9515 9185 9516 9186 /lodash.once@4.1.1: 9517 9187 resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} 9518 - dev: true 9519 - 9520 - /lodash.sortby@4.7.0: 9521 - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 9522 9188 dev: true 9523 9189 9524 9190 /lodash.startcase@4.4.0: ··· 10148 9814 resolution: {integrity: sha512-Uj9iV0QYr6281G+o0TvqhKwHHWB2Q/qUTT4LPQ3qDGc0r8cbMuqQjRXPZuVZ+gcL7APx+iQgE8lcfWPrj1LsLA==} 10149 9815 dev: true 10150 9816 10151 - /moo@0.5.1: 10152 - resolution: {integrity: sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==} 10153 - dev: true 10154 - 10155 9817 /move-concurrently@1.0.1: 10156 9818 resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} 10157 9819 dependencies: ··· 10223 9885 transitivePeerDependencies: 10224 9886 - supports-color 10225 9887 10226 - /native-url@0.3.4: 10227 - resolution: {integrity: sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==} 10228 - dependencies: 10229 - querystring: 0.2.1 10230 - dev: true 10231 - 10232 9888 /natural-compare-lite@1.4.0: 10233 9889 resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 10234 9890 dev: true ··· 10237 9893 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 10238 9894 dev: true 10239 9895 10240 - /nearley@2.20.1: 10241 - resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} 10242 - hasBin: true 10243 - dependencies: 10244 - commander: 2.20.3 10245 - moo: 0.5.1 10246 - railroad-diagrams: 1.0.0 10247 - randexp: 0.4.6 10248 - dev: true 10249 - 10250 9896 /negotiator@0.6.2: 10251 9897 resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} 10252 9898 engines: {node: '>= 0.6'} ··· 10263 9909 resolution: {integrity: sha512-ye8AIYWQcP9MvoM1i0Z2jV0qed31Z8EWXYnyGNkiUAd+Fo8J+7uy90xTV8g/oAbhtjkY7iZbNTizQaXdKUuwpQ==} 10264 9910 dev: true 10265 9911 10266 - /next@11.0.1(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.4): 10267 - resolution: {integrity: sha512-yR7be7asNbvpVNpi6xxEg28wZ7Gqmj1nOt0sABH9qORmF3+pms2KZ7Cng33oK5nqPIzEEFJD0pp2PCe3/ueMIg==} 10268 - engines: {node: '>=12.0.0'} 9912 + /next@13.0.0(@babel/core@7.21.5)(react-dom@17.0.2)(react@17.0.2): 9913 + resolution: {integrity: sha512-puH1WGM6rGeFOoFdXXYfUxN9Sgi4LMytCV5HkQJvVUOhHfC1DoVqOfvzaEteyp6P04IW+gbtK2Q9pInVSrltPA==} 9914 + engines: {node: '>=14.6.0'} 10269 9915 hasBin: true 10270 9916 peerDependencies: 10271 9917 fibers: '>= 3.1.0' 10272 - node-sass: ^4.0.0 || ^5.0.0 10273 - react: ^17.0.2 || 17 10274 - react-dom: ^17.0.2 || 17 9918 + node-sass: ^6.0.0 || ^7.0.0 9919 + react: ^18.0.0-0 || 17 9920 + react-dom: ^18.0.0-0 || 17 10275 9921 sass: ^1.3.0 10276 9922 peerDependenciesMeta: 10277 9923 fibers: ··· 10281 9927 sass: 10282 9928 optional: true 10283 9929 dependencies: 10284 - '@babel/runtime': 7.12.5 10285 - '@hapi/accept': 5.0.2 10286 - '@next/env': 11.0.1 10287 - '@next/polyfill-module': 11.0.1 10288 - '@next/react-dev-overlay': 11.0.1(react-dom@17.0.2)(react@17.0.2) 10289 - '@next/react-refresh-utils': 11.0.1(react-refresh@0.8.3) 10290 - assert: 2.0.0 10291 - ast-types: 0.13.2 10292 - browserify-zlib: 0.2.0 10293 - browserslist: 4.16.6 10294 - buffer: 5.6.0 9930 + '@next/env': 13.0.0 9931 + '@swc/helpers': 0.4.11 10295 9932 caniuse-lite: 1.0.30001466 10296 - chalk: 2.4.2 10297 - chokidar: 3.5.1 10298 - constants-browserify: 1.0.0 10299 - crypto-browserify: 3.12.0 10300 - cssnano-simple: 2.0.0(postcss@8.2.13) 10301 - domain-browser: 4.19.0 10302 - encoding: 0.1.13 10303 - etag: 1.8.1 10304 - find-cache-dir: 3.3.1 10305 - get-orientation: 1.1.2 10306 - https-browserify: 1.0.0 10307 - image-size: 1.0.0 10308 - jest-worker: 27.0.0-next.5 10309 - native-url: 0.3.4 10310 - node-fetch: 2.6.1 10311 - node-html-parser: 1.4.9 10312 - node-libs-browser: 2.2.1 10313 - os-browserify: 0.3.0 10314 - p-limit: 3.1.0 10315 - path-browserify: 1.0.1 10316 - pnp-webpack-plugin: 1.6.4(typescript@5.0.4) 10317 - postcss: 8.2.13 10318 - process: 0.11.10 10319 - prop-types: 15.7.2 10320 - querystring-es3: 0.2.1 10321 - raw-body: 2.4.1 9933 + postcss: 8.4.14 10322 9934 react: 17.0.2 10323 9935 react-dom: 17.0.2(react@17.0.2) 10324 - react-is: 17.0.2 10325 - react-refresh: 0.8.3 10326 - stream-browserify: 3.0.0 10327 - stream-http: 3.1.1 10328 - string_decoder: 1.3.0 10329 - styled-jsx: 3.3.2(react@17.0.2) 10330 - timers-browserify: 2.0.12 10331 - tty-browserify: 0.0.1 10332 - use-subscription: 1.5.1(react@17.0.2) 10333 - util: 0.12.3 10334 - vm-browserify: 1.1.2 10335 - watchpack: 2.1.1 9936 + styled-jsx: 5.1.0(@babel/core@7.21.5)(react@17.0.2) 9937 + use-sync-external-store: 1.2.0(react@17.0.2) 9938 + optionalDependencies: 9939 + '@next/swc-android-arm-eabi': 13.0.0 9940 + '@next/swc-android-arm64': 13.0.0 9941 + '@next/swc-darwin-arm64': 13.0.0 9942 + '@next/swc-darwin-x64': 13.0.0 9943 + '@next/swc-freebsd-x64': 13.0.0 9944 + '@next/swc-linux-arm-gnueabihf': 13.0.0 9945 + '@next/swc-linux-arm64-gnu': 13.0.0 9946 + '@next/swc-linux-arm64-musl': 13.0.0 9947 + '@next/swc-linux-x64-gnu': 13.0.0 9948 + '@next/swc-linux-x64-musl': 13.0.0 9949 + '@next/swc-win32-arm64-msvc': 13.0.0 9950 + '@next/swc-win32-ia32-msvc': 13.0.0 9951 + '@next/swc-win32-x64-msvc': 13.0.0 10336 9952 transitivePeerDependencies: 10337 - - supports-color 10338 - - typescript 10339 - - webpack 9953 + - '@babel/core' 9954 + - babel-plugin-macros 10340 9955 dev: true 10341 9956 10342 9957 /nice-try@1.0.5: ··· 10352 9967 engines: {node: '>=10.5.0'} 10353 9968 dev: false 10354 9969 10355 - /node-fetch@2.6.1: 10356 - resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} 10357 - engines: {node: 4.x || >=6.0.0} 10358 - dev: true 10359 - 10360 9970 /node-fetch@2.6.9: 10361 9971 resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} 10362 9972 engines: {node: 4.x || >=6.0.0} ··· 10401 10011 - supports-color 10402 10012 dev: true 10403 10013 10404 - /node-html-parser@1.4.9: 10405 - resolution: {integrity: sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==} 10406 - dependencies: 10407 - he: 1.2.0 10408 - dev: true 10409 - 10410 10014 /node-html-parser@5.3.3: 10411 10015 resolution: {integrity: sha512-ncg1033CaX9UexbyA7e1N0aAoAYRDiV8jkTvzEnfd1GDvzFdrsXLzR4p4ik8mwLgnaKP/jyUFWDy9q3jvRT2Jw==} 10412 10016 dependencies: ··· 10440 10044 url: 0.11.0 10441 10045 util: 0.11.1 10442 10046 vm-browserify: 1.1.2 10443 - 10444 - /node-releases@1.1.71: 10445 - resolution: {integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==} 10446 - dev: true 10447 10047 10448 10048 /node-releases@2.0.10: 10449 10049 resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} ··· 11076 10676 json-parse-even-better-errors: 2.3.1 11077 10677 lines-and-columns: 1.2.4 11078 10678 11079 - /parse5-htmlparser2-tree-adapter@6.0.1: 11080 - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} 11081 - dependencies: 11082 - parse5: 6.0.1 11083 - dev: true 11084 - 11085 10679 /parse5@6.0.1: 11086 10680 resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} 11087 10681 ··· 11107 10701 11108 10702 /path-browserify@0.0.1: 11109 10703 resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} 11110 - 11111 - /path-browserify@1.0.1: 11112 - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 11113 - dev: true 11114 10704 11115 10705 /path-dirname@1.0.2: 11116 10706 resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} ··· 11293 10883 pathe: 1.1.0 11294 10884 dev: true 11295 10885 11296 - /platform@1.3.6: 11297 - resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} 11298 - dev: true 11299 - 11300 10886 /please-upgrade-node@3.2.0: 11301 10887 resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} 11302 10888 dependencies: 11303 10889 semver-compare: 1.0.0 11304 10890 dev: true 11305 10891 11306 - /pnp-webpack-plugin@1.6.4(typescript@5.0.4): 11307 - resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} 11308 - engines: {node: '>=6'} 11309 - dependencies: 11310 - ts-pnp: 1.2.0(typescript@5.0.4) 11311 - transitivePeerDependencies: 11312 - - typescript 11313 - dev: true 11314 - 11315 10892 /portfinder@1.0.28(supports-color@6.1.0): 11316 10893 resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==} 11317 10894 engines: {node: '>= 0.12.0'} ··· 11621 11198 source-map: 0.6.1 11622 11199 supports-color: 6.1.0 11623 11200 11624 - /postcss@8.2.13: 11625 - resolution: {integrity: sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==} 11201 + /postcss@8.4.14: 11202 + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 11626 11203 engines: {node: ^10 || ^12 || >=14} 11627 11204 dependencies: 11628 - colorette: 1.2.2 11629 11205 nanoid: 3.3.4 11630 - source-map: 0.6.1 11206 + picocolors: 1.0.0 11207 + source-map-js: 1.0.2 11631 11208 dev: true 11632 11209 11633 11210 /postcss@8.4.21: ··· 11768 11345 retry: 0.12.0 11769 11346 dev: true 11770 11347 11771 - /prop-types-exact@1.2.0: 11772 - resolution: {integrity: sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==} 11773 - dependencies: 11774 - has: 1.0.3 11775 - object.assign: 4.1.4 11776 - reflect.ownkeys: 0.2.0 11777 - dev: true 11778 - 11779 11348 /prop-types@15.7.2: 11780 11349 resolution: {integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==} 11781 11350 dependencies: 11782 11351 loose-envify: 1.4.0 11783 11352 object-assign: 4.1.1 11784 11353 react-is: 17.0.2 11354 + dev: false 11785 11355 11786 11356 /prop-types@15.8.1: 11787 11357 resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} ··· 11906 11476 engines: {node: '>=0.4.x'} 11907 11477 deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. 11908 11478 11909 - /querystring@0.2.1: 11910 - resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} 11911 - engines: {node: '>=0.4.x'} 11912 - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. 11913 - dev: true 11914 - 11915 11479 /querystringify@2.2.0: 11916 11480 resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 11917 11481 ··· 11919 11483 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 11920 11484 dev: true 11921 11485 11922 - /queue@6.0.2: 11923 - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} 11924 - dependencies: 11925 - inherits: 2.0.4 11926 - dev: true 11927 - 11928 11486 /quick-lru@4.0.1: 11929 11487 resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 11930 11488 engines: {node: '>=8'} ··· 11935 11493 dependencies: 11936 11494 performance-now: 2.1.0 11937 11495 11938 - /railroad-diagrams@1.0.0: 11939 - resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} 11940 - dev: true 11941 - 11942 - /randexp@0.4.6: 11943 - resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} 11944 - engines: {node: '>=0.12'} 11945 - dependencies: 11946 - discontinuous-range: 1.0.0 11947 - ret: 0.1.15 11948 - dev: true 11949 - 11950 11496 /randombytes@2.1.0: 11951 11497 resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 11952 11498 dependencies: ··· 11975 11521 iconv-lite: 0.4.24 11976 11522 unpipe: 1.0.0 11977 11523 11978 - /raw-body@2.4.1: 11979 - resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} 11980 - engines: {node: '>= 0.8'} 11981 - dependencies: 11982 - bytes: 3.1.0 11983 - http-errors: 1.7.3 11984 - iconv-lite: 0.4.24 11985 - unpipe: 1.0.0 11986 - dev: true 11987 - 11988 11524 /raw-loader@3.1.0(webpack@4.46.0): 11989 11525 resolution: {integrity: sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==} 11990 11526 engines: {node: '>= 8.9.0'} ··· 12098 11634 /react-lifecycles-compat@3.0.4: 12099 11635 resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} 12100 11636 12101 - /react-refresh@0.8.3: 12102 - resolution: {integrity: sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==} 12103 - engines: {node: '>=0.10.0'} 12104 - dev: true 12105 - 12106 11637 /react-router-dom@5.2.0(react@17.0.2): 12107 11638 resolution: {integrity: sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==} 12108 11639 peerDependencies: ··· 12182 11713 react: ^16.8.0 || ^17.0.0 || 17 12183 11714 dependencies: 12184 11715 react: 17.0.2 11716 + dev: true 12185 11717 12186 11718 /react-static-plugin-md-pages@0.3.3(react-static@7.3.0)(react@17.0.2): 12187 11719 resolution: {integrity: sha512-2vJO2g62zKf5avSsT/5IEbDPhAoWjP4tH+nyMLKta1G4AixlqPYagS7aCpDXRpzgs9ot8LN/aewrd5Vi1oWqew==} ··· 12316 11848 - webpack-cli 12317 11849 - webpack-command 12318 11850 12319 - /react-test-renderer@16.14.0(react@17.0.2): 12320 - resolution: {integrity: sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==} 12321 - peerDependencies: 12322 - react: ^16.14.0 || 17 12323 - dependencies: 12324 - object-assign: 4.1.1 12325 - prop-types: 15.8.1 12326 - react: 17.0.2 12327 - react-is: 17.0.2 12328 - scheduler: 0.19.1 12329 - dev: true 12330 - 12331 11851 /react-test-renderer@17.0.2(react@17.0.2): 12332 11852 resolution: {integrity: sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==} 12333 11853 peerDependencies: ··· 12457 11977 resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} 12458 11978 engines: {node: '>=0.10'} 12459 11979 dependencies: 12460 - graceful-fs: 4.2.10 11980 + graceful-fs: 4.2.11 12461 11981 micromatch: 3.1.10(supports-color@6.1.0) 12462 11982 readable-stream: 2.3.7 12463 11983 transitivePeerDependencies: 12464 11984 - supports-color 12465 11985 12466 - /readdirp@3.5.0: 12467 - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} 12468 - engines: {node: '>=8.10.0'} 12469 - dependencies: 12470 - picomatch: 2.3.1 12471 - dev: true 12472 - 12473 11986 /readdirp@3.6.0: 12474 11987 resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 12475 11988 engines: {node: '>=8.10.0'} ··· 12482 11995 dependencies: 12483 11996 indent-string: 4.0.0 12484 11997 strip-indent: 3.0.0 12485 - dev: true 12486 - 12487 - /reflect.ownkeys@0.2.0: 12488 - resolution: {integrity: sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==} 12489 11998 dev: true 12490 11999 12491 12000 /regenerate-unicode-properties@8.2.0: ··· 12910 12419 resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} 12911 12420 dev: true 12912 12421 12913 - /rst-selector-parser@2.2.3: 12914 - resolution: {integrity: sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==} 12915 - dependencies: 12916 - lodash.flattendeep: 4.4.0 12917 - nearley: 2.20.1 12918 - dev: true 12919 - 12920 12422 /run-async@2.4.1: 12921 12423 resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} 12922 12424 engines: {node: '>=0.12.0'} ··· 12975 12477 xmlchars: 2.2.0 12976 12478 dev: true 12977 12479 12978 - /scheduler@0.19.1: 12979 - resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==} 12980 - dependencies: 12981 - loose-envify: 1.4.0 12982 - object-assign: 4.1.1 12983 - dev: true 12984 - 12985 12480 /scheduler@0.20.2: 12986 12481 resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} 12987 12482 dependencies: ··· 13196 12691 /shebang-regex@3.0.0: 13197 12692 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 13198 12693 engines: {node: '>=8'} 13199 - dev: true 13200 - 13201 - /shell-quote@1.7.2: 13202 - resolution: {integrity: sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==} 13203 12694 dev: true 13204 12695 13205 12696 /shell-quote@1.8.0: ··· 13482 12973 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 13483 12974 engines: {node: '>=0.10.0'} 13484 12975 13485 - /source-map@0.7.3: 13486 - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 13487 - engines: {node: '>= 8'} 13488 - dev: true 13489 - 13490 12976 /source-map@0.7.4: 13491 12977 resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 13492 12978 engines: {node: '>= 8'} 13493 12979 13494 - /source-map@0.8.0-beta.0: 13495 - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 13496 - engines: {node: '>= 8'} 13497 - dependencies: 13498 - whatwg-url: 7.1.0 13499 - dev: true 13500 - 13501 12980 /sourcemap-codec@1.4.8: 13502 12981 resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 13503 12982 deprecated: Please use @jridgewell/sourcemap-codec instead ··· 13617 13096 resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 13618 13097 dev: true 13619 13098 13620 - /stacktrace-parser@0.1.10: 13621 - resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} 13622 - engines: {node: '>=6'} 13623 - dependencies: 13624 - type-fest: 0.7.1 13625 - dev: true 13626 - 13627 13099 /state-toggle@1.0.3: 13628 13100 resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} 13629 13101 ··· 13647 13119 dependencies: 13648 13120 inherits: 2.0.4 13649 13121 readable-stream: 2.3.7 13650 - 13651 - /stream-browserify@3.0.0: 13652 - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} 13653 - dependencies: 13654 - inherits: 2.0.4 13655 - readable-stream: 3.6.2 13656 - dev: true 13657 13122 13658 13123 /stream-each@1.2.3: 13659 13124 resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} ··· 13670 13135 to-arraybuffer: 1.0.1 13671 13136 xtend: 4.0.2 13672 13137 13673 - /stream-http@3.1.1: 13674 - resolution: {integrity: sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==} 13675 - dependencies: 13676 - builtin-status-codes: 3.0.0 13677 - inherits: 2.0.4 13678 - readable-stream: 3.6.2 13679 - xtend: 4.0.2 13680 - dev: true 13681 - 13682 - /stream-parser@0.3.1: 13683 - resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==} 13684 - dependencies: 13685 - debug: 2.6.9(supports-color@6.1.0) 13686 - transitivePeerDependencies: 13687 - - supports-color 13688 - dev: true 13689 - 13690 13138 /stream-shift@1.0.1: 13691 13139 resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} 13692 13140 ··· 13703 13151 /string-argv@0.3.1: 13704 13152 resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} 13705 13153 engines: {node: '>=0.6.19'} 13706 - dev: true 13707 - 13708 - /string-hash@1.1.3: 13709 - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} 13710 13154 dev: true 13711 13155 13712 13156 /string-width@2.1.1: ··· 13824 13268 dependencies: 13825 13269 ansi-regex: 4.1.0 13826 13270 13827 - /strip-ansi@6.0.0: 13828 - resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} 13829 - engines: {node: '>=8'} 13830 - dependencies: 13831 - ansi-regex: 5.0.1 13832 - dev: true 13833 - 13834 13271 /strip-ansi@6.0.1: 13835 13272 resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 13836 13273 engines: {node: '>=8'} ··· 13931 13368 shallowequal: 1.1.0 13932 13369 supports-color: 5.5.0 13933 13370 13934 - /styled-jsx@3.3.2(react@17.0.2): 13935 - resolution: {integrity: sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==} 13371 + /styled-jsx@5.1.0(@babel/core@7.21.5)(react@17.0.2): 13372 + resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} 13373 + engines: {node: '>= 12.0.0'} 13936 13374 peerDependencies: 13937 - react: 15.x.x || 16.x.x || 17.x.x || 17 13375 + '@babel/core': '*' 13376 + babel-plugin-macros: '*' 13377 + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || 17' 13378 + peerDependenciesMeta: 13379 + '@babel/core': 13380 + optional: true 13381 + babel-plugin-macros: 13382 + optional: true 13938 13383 dependencies: 13939 - '@babel/types': 7.8.3 13940 - babel-plugin-syntax-jsx: 6.18.0 13941 - convert-source-map: 1.7.0 13942 - loader-utils: 1.2.3 13384 + '@babel/core': 7.21.5 13385 + client-only: 0.0.1 13943 13386 react: 17.0.2 13944 - source-map: 0.7.3 13945 - string-hash: 1.1.3 13946 - stylis: 3.5.4 13947 - stylis-rule-sheet: 0.0.10(stylis@3.5.4) 13948 13387 dev: true 13949 13388 13950 13389 /stylehacks@4.0.3: ··· 13954 13393 browserslist: 4.21.5 13955 13394 postcss: 7.0.35 13956 13395 postcss-selector-parser: 3.1.2 13957 - 13958 - /stylis-rule-sheet@0.0.10(stylis@3.5.4): 13959 - resolution: {integrity: sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==} 13960 - peerDependencies: 13961 - stylis: ^3.5.0 13962 - dependencies: 13963 - stylis: 3.5.4 13964 - dev: true 13965 - 13966 - /stylis@3.5.4: 13967 - resolution: {integrity: sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==} 13968 - dev: true 13969 13396 13970 13397 /supports-color@5.5.0: 13971 13398 resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} ··· 14321 13748 /tr46@0.0.3: 14322 13749 resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 14323 13750 14324 - /tr46@1.0.1: 14325 - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 14326 - dependencies: 14327 - punycode: 2.3.0 14328 - dev: true 14329 - 14330 13751 /tr46@4.1.1: 14331 13752 resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} 14332 13753 engines: {node: '>=14'} ··· 14362 13783 /tryer@1.0.1: 14363 13784 resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} 14364 13785 14365 - /ts-pnp@1.2.0(typescript@5.0.4): 14366 - resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} 14367 - engines: {node: '>=6'} 14368 - peerDependencies: 14369 - typescript: '*' 14370 - peerDependenciesMeta: 14371 - typescript: 14372 - optional: true 14373 - dependencies: 14374 - typescript: 5.0.4 14375 - dev: true 14376 - 14377 13786 /tsconfck@2.1.1(typescript@5.0.4): 14378 13787 resolution: {integrity: sha512-ZPCkJBKASZBmBUNqGHmRhdhM8pJYDdOXp4nRgj/O0JwUwsMq50lCDRQP/M5GBNAA0elPrq4gAeu4dkaVCuKWww==} 14379 13788 engines: {node: ^14.13.1 || ^16 || >=18} ··· 14406 13815 14407 13816 /tty-browserify@0.0.0: 14408 13817 resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} 14409 - 14410 - /tty-browserify@0.0.1: 14411 - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} 14412 - dev: true 14413 13818 14414 13819 /tty-table@4.2.1: 14415 13820 resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} ··· 14484 13889 14485 13890 /type-fest@0.6.0: 14486 13891 resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 14487 - engines: {node: '>=8'} 14488 - dev: true 14489 - 14490 - /type-fest@0.7.1: 14491 - resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} 14492 13892 engines: {node: '>=8'} 14493 13893 dev: true 14494 13894 ··· 14835 14235 punycode: 1.3.2 14836 14236 querystring: 0.2.0 14837 14237 14838 - /use-subscription@1.5.1(react@17.0.2): 14839 - resolution: {integrity: sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==} 14238 + /use-sync-external-store@1.2.0(react@17.0.2): 14239 + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 14840 14240 peerDependencies: 14841 - react: ^16.8.0 || ^17.0.0 || 17 14241 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || 17 14842 14242 dependencies: 14843 - object-assign: 4.1.1 14844 14243 react: 17.0.2 14845 14244 dev: true 14846 14245 ··· 14881 14280 dependencies: 14882 14281 inherits: 2.0.3 14883 14282 14884 - /util@0.12.3: 14885 - resolution: {integrity: sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==} 14886 - dependencies: 14887 - inherits: 2.0.4 14888 - is-arguments: 1.1.0 14889 - is-generator-function: 1.0.9 14890 - is-typed-array: 1.1.10 14891 - safe-buffer: 5.2.1 14892 - which-typed-array: 1.1.9 14893 - dev: true 14894 - 14895 - /util@0.12.4: 14896 - resolution: {integrity: sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==} 14897 - dependencies: 14898 - inherits: 2.0.4 14899 - is-arguments: 1.1.0 14900 - is-generator-function: 1.0.9 14901 - is-typed-array: 1.1.10 14902 - safe-buffer: 5.2.1 14903 - which-typed-array: 1.1.9 14904 - dev: true 14905 - 14906 14283 /utila@0.4.0: 14907 14284 resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} 14908 14285 ··· 15164 14541 transitivePeerDependencies: 15165 14542 - supports-color 15166 14543 15167 - /watchpack@2.1.1: 15168 - resolution: {integrity: sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==} 15169 - engines: {node: '>=10.13.0'} 15170 - dependencies: 15171 - glob-to-regexp: 0.4.1 15172 - graceful-fs: 4.2.10 15173 - dev: true 15174 - 15175 14544 /wbuf@1.7.3: 15176 14545 resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} 15177 14546 dependencies: ··· 15193 14562 15194 14563 /webidl-conversions@3.0.1: 15195 14564 resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 15196 - 15197 - /webidl-conversions@4.0.2: 15198 - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 15199 - dev: true 15200 14565 15201 14566 /webidl-conversions@7.0.0: 15202 14567 resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} ··· 15392 14757 dependencies: 15393 14758 tr46: 0.0.3 15394 14759 webidl-conversions: 3.0.1 15395 - 15396 - /whatwg-url@7.1.0: 15397 - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 15398 - dependencies: 15399 - lodash.sortby: 4.7.0 15400 - tr46: 1.0.1 15401 - webidl-conversions: 4.0.2 15402 - dev: true 15403 14760 15404 14761 /which-boxed-primitive@1.0.2: 15405 14762 resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+8 -2
scripts/prepare/index.js
··· 14 14 'peerDependencies', 15 15 ].some((dep) => pkg[dep] && pkg[dep].react); 16 16 17 + const hasNext = [ 18 + 'dependencies', 19 + 'optionalDependencies', 20 + 'peerDependencies', 21 + ].some((dep) => pkg[dep] && pkg[dep].next); 22 + 17 23 const normalize = name => name 18 24 .replace(/[@\s\/\.]+/g, ' ') 19 25 .trim() ··· 49 55 'package.json:source must exist' 50 56 ); 51 57 52 - if (hasReact) { 58 + if (hasReact && !hasNext) { 53 59 invariant( 54 60 is(pkg.main, path.join('dist', `${name}.js`)), 55 61 'package.json:main path must end in `.js` for packages depending on React.' ··· 106 112 'package.json:files must include "dist" and "LICENSE"' 107 113 ); 108 114 109 - if (hasReact) { 115 + if (hasReact && !hasNext) { 110 116 invariant(!pkg.exports, 'package.json:exports must not be added for packages depending on React.'); 111 117 } else { 112 118 invariant(!!pkg.exports, 'package.json:exports must be added and have a "." entry');
+2 -1
scripts/rollup/config.mjs
··· 64 64 throw new Error('Invalid option `format` at output({ ... })'); 65 65 66 66 let extension = format === 'esm' 67 - ? (settings.hasReact ? '.es.js' : '.mjs') 67 + ? (settings.hasReact && !settings.hasNext ? '.es.js' : '.mjs') 68 68 : '.js'; 69 69 if (isProduction) { 70 70 extension = '.min' + extension; ··· 76 76 dir: './dist', 77 77 exports: 'named', 78 78 sourcemap: true, 79 + banner: chunk => chunk.name === 'urql-next' ? '"use client"' : undefined, 79 80 sourcemapExcludeSources: false, 80 81 hoistTransitiveImports: false, 81 82 indent: false,
+1 -1
scripts/rollup/plugins.mjs
··· 19 19 export const makeBasePlugins = () => [ 20 20 resolve({ 21 21 dedupe: settings.externalModules, 22 - extensions: ['.js', '.ts'], 22 + extensions: ['.js', '.ts', '.tsx'], 23 23 mainFields: ['module', 'jsnext', 'main'], 24 24 preferBuiltins: false, 25 25 browser: true
+1
scripts/rollup/settings.mjs
··· 54 54 return externalPredicate.test(id); 55 55 }; 56 56 57 + export const hasNext = prodDependencies.has('next'); 57 58 export const hasReact = prodDependencies.has('react'); 58 59 export const hasPreact = prodDependencies.has('preact'); 59 60 export const hasSvelte = prodDependencies.has('svelte');