diff --git a/integration-test/playwright/src/cc-dynamic.test.ts b/integration-test/playwright/src/cc-dynamic.test.ts index 6ca5eb57..f0a46092 100644 --- a/integration-test/playwright/src/cc-dynamic.test.ts +++ b/integration-test/playwright/src/cc-dynamic.test.ts @@ -199,9 +199,29 @@ test.describe("CC dynamic", () => { expect(await page.getByText("loading...").count()).toBe(6); // deferred chunk came in await expect(page.getByText("cuteness overload")).toBeVisible(); + expect(await page.getByText("Queried in SSR environment").count()).toBe(7); + expect(await page.getByText("loading...").count()).toBe(0); + }); + + test("client loader", { tag: ["@react-router"] }, async ({ page }) => { + await page.goto(`${base}/clientLoader`, { + waitUntil: "commit", + }); + + // main data already there + await expect(page.getByText("Soft Warm Apollo Beanie")).toBeVisible(); + expect(await page.getByText("Queried in browser environment").count()).toBe( + 1 + ); + // deferred chunks still loading + expect(await page.getByText("loading...").count()).toBe(6); + // deferred chunk came in + await expect(page.getByText("cuteness overload")).toBeVisible(); await new Promise((resolve) => setTimeout(resolve, 500)); - expect(await page.getByText("Queried in SSR environment").count()).toBe(7); + expect(await page.getByText("Queried in browser environment").count()).toBe( + 7 + ); expect(await page.getByText("loading...").count()).toBe(0); }); }); diff --git a/integration-test/react-router/app/apollo.ts b/integration-test/react-router/app/apollo.ts index eea30ada..ca3e58e8 100644 --- a/integration-test/react-router/app/apollo.ts +++ b/integration-test/react-router/app/apollo.ts @@ -22,4 +22,5 @@ export const makeClient = (request?: Request) => { link, }); }; + export const apolloLoader = createApolloLoaderHandler(makeClient); diff --git a/integration-test/react-router/app/entry.client.tsx b/integration-test/react-router/app/entry.client.tsx index 34777a8f..cfb44f7a 100644 --- a/integration-test/react-router/app/entry.client.tsx +++ b/integration-test/react-router/app/entry.client.tsx @@ -3,6 +3,7 @@ import { hydrateRoot } from "react-dom/client"; import { HydratedRouter } from "react-router/dom"; import { makeClient } from "./apollo"; import { ApolloProvider } from "@apollo/client/react/index.js"; +import { initializeApolloContext } from "@apollo/client-integration-react-router"; startTransition(() => { const client = makeClient(); @@ -10,7 +11,15 @@ startTransition(() => { document, - + { + const context = new Map(); + // set other context values here + return initializeApolloContext(client, context); + }} + /> + {/* if you have no other context values, as a shortcut */} + {/* initializeApolloContext(client)} /> */} ); diff --git a/integration-test/react-router/app/routes/clientLoader.tsx b/integration-test/react-router/app/routes/clientLoader.tsx new file mode 100644 index 00000000..91db1311 --- /dev/null +++ b/integration-test/react-router/app/routes/clientLoader.tsx @@ -0,0 +1,74 @@ +import type { Route } from "./+types/clientLoader"; +import { + useApolloClient, + useQueryRefHandlers, + useReadQuery, +} from "@apollo/client/react/index.js"; +import {} from "~/apollo"; +import { DEFERRED_QUERY } from "@integration-test/shared/queries"; +import { useTransition } from "react"; +import { apolloContext } from "@apollo/client-integration-react-router"; + +export async function clientLoader({ context }: Route.LoaderArgs) { + const { preloadQuery } = context.get(apolloContext); + const queryRef = preloadQuery(DEFERRED_QUERY, { + variables: { delayDeferred: 1000 }, + }); + + await new Promise((resolve) => setTimeout(resolve, 300)); + + return { + queryRef, + }; +} + +export default function WithClientLoader({ loaderData }: Route.ComponentProps) { + const { queryRef } = loaderData; + + const { refetch } = useQueryRefHandlers(queryRef); + const [refetching, startTransition] = useTransition(); + const { data } = useReadQuery(queryRef); + const client = useApolloClient(); + + return ( + <> + +

Queried in {data.env} environment

+ + + ); +} diff --git a/integration-test/react-router/package.json b/integration-test/react-router/package.json index d0cba06d..55cda8ec 100644 --- a/integration-test/react-router/package.json +++ b/integration-test/react-router/package.json @@ -14,18 +14,18 @@ "@apollo/client": "^3.13.4", "@apollo/client-integration-react-router": "workspace:^", "@integration-test/shared": "workspace:^", - "@react-router/fs-routes": "^7.2.0-pre.3", - "@react-router/node": "^7.2.0-pre.3", - "@react-router/serve": "^7.2.0-pre.3", + "@react-router/fs-routes": "^7.3.0", + "@react-router/node": "^7.3.0", + "@react-router/serve": "^7.3.0", "@vercel/react-router": "^1.0.2", "graphql": "*", "isbot": "^5.1.17", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-router": "^7.2.0-pre.3" + "react-router": "^7.3.0" }, "devDependencies": { - "@react-router/dev": "^7.2.0-pre.3", + "@react-router/dev": "^7.3.0", "@tailwindcss/vite": "^4.0.0", "@types/node": "^20", "@types/react": "^19.0.1", diff --git a/integration-test/react-router/react-router.config.ts b/integration-test/react-router/react-router.config.ts index fc433a55..84edca21 100644 --- a/integration-test/react-router/react-router.config.ts +++ b/integration-test/react-router/react-router.config.ts @@ -7,9 +7,19 @@ if (process.env.VERCEL) { presets.push(vercelPreset()); } +declare module "react-router" { + interface Future { + unstable_middleware: true; // 👈 Enable middleware types + } +} + export default { // Config options... // Server-side render by default, to enable SPA mode set this to `false` ssr: true, presets, + future: { + // https://reactrouter.com/start/changelog#middleware-unstable + unstable_middleware: true, + }, } satisfies Config; diff --git a/packages/react-router/package.json b/packages/react-router/package.json index b0ebd820..500fe744 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -79,7 +79,7 @@ "publint": "0.2.7", "react": "^19.0.0", "react-dom": "*", - "react-router": "^7.2.0-pre.3", + "react-router": "^7.3.0", "rimraf": "5.0.5", "tsup": "8.0.2", "typescript": "5.4.5", @@ -88,7 +88,7 @@ "peerDependencies": { "@apollo/client": "^3.13.0", "react": "^19", - "react-router": "^7.2.0-pre.3" + "react-router": "^7.3.0" }, "dependencies": { "@apollo/client-react-streaming": "0.12.0-alpha.3", diff --git a/packages/react-router/src/index.ts b/packages/react-router/src/index.ts index 15c9e897..f9c152b6 100644 --- a/packages/react-router/src/index.ts +++ b/packages/react-router/src/index.ts @@ -1,3 +1,7 @@ export { ApolloClient } from "./ApolloClient.js"; export { ApolloHydrationHelper } from "./ApolloHydrationHelper.js"; -export { createApolloLoaderHandler } from "./preloader.js"; +export { + apolloContext, + createApolloLoaderHandler, + initializeApolloContext, +} from "./preloader.js"; diff --git a/packages/react-router/src/preloader.tsx b/packages/react-router/src/preloader.tsx index a60726cf..e180f2ea 100644 --- a/packages/react-router/src/preloader.tsx +++ b/packages/react-router/src/preloader.tsx @@ -13,22 +13,31 @@ import { } from "@apollo/client-react-streaming"; import type { Promiscade } from "promiscade"; import { promiscadeToReadableStream, streamToPromiscade } from "promiscade"; -import type { unstable_SerializesTo } from "react-router"; +import { + unstable_createContext, + type unstable_InitialContext, + type unstable_SerializesTo, +} from "react-router"; import type { JsonString } from "@apollo/client-react-streaming/stream-utils"; +import { + createQueryPreloader, + type PreloadQueryFunction, +} from "@apollo/client/react/index.js"; + type MarkedForSerialization = T extends TransportedQueryRef ? unstable_SerializesTo> : { [K in keyof T]: MarkedForSerialization }; +export type ApolloContext = { + preloadQuery: PreloadTransportedQueryFunction; +}; + type ApolloLoader = >() => < ReturnValue, >( - loader: ( - args: LoaderArgs & { - preloadQuery: PreloadTransportedQueryFunction; - } - ) => ReturnValue + loader: (args: LoaderArgs & ApolloContext) => ReturnValue ) => (args: LoaderArgs) => MarkedForSerialization; export function createApolloLoaderHandler( @@ -47,6 +56,20 @@ export function createApolloLoaderHandler( }; } +export const apolloContext = unstable_createContext<{ + client: ApolloClient; + preloadQuery: PreloadQueryFunction; +}>(); + +export function initializeApolloContext( + client: ApolloClient, + contextMap: unstable_InitialContext = new Map() +) { + const preloader = createQueryPreloader(client); + contextMap.set(apolloContext, { client, preloadQuery: preloader }); + return contextMap; +} + // currently, `turbo-stream` cannot stream a `ReadableStream`. // until https://github.com/jacob-ebey/turbo-stream/pull/51 // is merged or similar functionality is added, we need to diff --git a/yarn.lock b/yarn.lock index 6d163c4f..eb4c18dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -256,7 +256,7 @@ __metadata: publint: "npm:0.2.7" react: "npm:^19.0.0" react-dom: "npm:*" - react-router: "npm:^7.2.0-pre.3" + react-router: "npm:^7.3.0" rimraf: "npm:5.0.5" tsup: "npm:8.0.2" typescript: "npm:5.4.5" @@ -264,7 +264,7 @@ __metadata: peerDependencies: "@apollo/client": ^3.13.0 react: ^19 - react-router: ^7.2.0-pre.3 + react-router: ^7.3.0 languageName: unknown linkType: soft @@ -6792,10 +6792,10 @@ __metadata: "@apollo/client": "npm:^3.13.4" "@apollo/client-integration-react-router": "workspace:^" "@integration-test/shared": "workspace:^" - "@react-router/dev": "npm:^7.2.0-pre.3" - "@react-router/fs-routes": "npm:^7.2.0-pre.3" - "@react-router/node": "npm:^7.2.0-pre.3" - "@react-router/serve": "npm:^7.2.0-pre.3" + "@react-router/dev": "npm:^7.3.0" + "@react-router/fs-routes": "npm:^7.3.0" + "@react-router/node": "npm:^7.3.0" + "@react-router/serve": "npm:^7.3.0" "@tailwindcss/vite": "npm:^4.0.0" "@types/node": "npm:^20" "@types/react": "npm:^19.0.1" @@ -6805,7 +6805,7 @@ __metadata: isbot: "npm:^5.1.17" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" - react-router: "npm:^7.2.0-pre.3" + react-router: "npm:^7.3.0" react-router-devtools: "npm:^1.1.0" tailwindcss: "npm:^4.0.0" typescript: "npm:^5.7.2" @@ -8543,9 +8543,9 @@ __metadata: languageName: node linkType: hard -"@react-router/dev@npm:^7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "@react-router/dev@npm:7.2.0-pre.3" +"@react-router/dev@npm:^7.3.0": + version: 7.3.0 + resolution: "@react-router/dev@npm:7.3.0" dependencies: "@babel/core": "npm:^7.21.8" "@babel/generator": "npm:^7.21.5" @@ -8556,7 +8556,7 @@ __metadata: "@babel/traverse": "npm:^7.23.2" "@babel/types": "npm:^7.22.5" "@npmcli/package-json": "npm:^4.0.1" - "@react-router/node": "npm:7.2.0-pre.3" + "@react-router/node": "npm:7.3.0" arg: "npm:^5.0.1" babel-dead-code-elimination: "npm:^1.0.6" chokidar: "npm:^4.0.0" @@ -8564,12 +8564,10 @@ __metadata: es-module-lexer: "npm:^1.3.1" exit-hook: "npm:2.2.1" fs-extra: "npm:^10.0.0" - gunzip-maybe: "npm:^1.4.2" jsesc: "npm:3.0.2" lodash: "npm:^4.17.21" pathe: "npm:^1.1.2" picocolors: "npm:^1.1.1" - picomatch: "npm:^2.3.1" prettier: "npm:^2.7.1" react-refresh: "npm:^0.14.0" semver: "npm:^7.3.7" @@ -8577,8 +8575,8 @@ __metadata: valibot: "npm:^0.41.0" vite-node: "npm:3.0.0-beta.2" peerDependencies: - "@react-router/serve": ^7.2.0-pre.3 - react-router: ^7.2.0-pre.3 + "@react-router/serve": ^7.3.0 + react-router: ^7.3.0 typescript: ^5.1.0 vite: ^5.1.0 || ^6.0.0 wrangler: ^3.28.2 @@ -8591,75 +8589,75 @@ __metadata: optional: true bin: react-router: bin.js - checksum: 10/98a9cc39811235474b350e6e1f9c1a0767ec90689e9de44ace6da78c66ecf92262bb4e1b8dda27049e8871ba53c91da1ddb956ce9e4ada40c523947a9a8346b3 + checksum: 10/361d1a2f6eeb67297b3d000846256f09e2f870d10fa044758b6341539ab672c5f618e190aa5f61603882914543b0935c23ff27eec768d1f0d815ee9f0dfc2818 languageName: node linkType: hard -"@react-router/express@npm:7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "@react-router/express@npm:7.2.0-pre.3" +"@react-router/express@npm:7.3.0": + version: 7.3.0 + resolution: "@react-router/express@npm:7.3.0" dependencies: - "@react-router/node": "npm:7.2.0-pre.3" + "@react-router/node": "npm:7.3.0" peerDependencies: - express: ^4.17.1 - react-router: 7.2.0-pre.3 + express: ^4.17.1 || ^5 + react-router: 7.3.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/e0f203097a22a6fc80463dad6cebb309a12daffb8c75cf1515ceb02ccc81075e46e4c5bf208e958f62827a994ff322e6b9fd35dfc3a94e38aeaa8abf8fc0e70a + checksum: 10/00cbf2079c6bfc398e201bb902bd20f865177edb103d5dfc24ebece4781da9ebc7ca663a2f845b925e9edebc467b391131e043df22768343c40744246a41ba73 languageName: node linkType: hard -"@react-router/fs-routes@npm:^7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "@react-router/fs-routes@npm:7.2.0-pre.3" +"@react-router/fs-routes@npm:^7.3.0": + version: 7.3.0 + resolution: "@react-router/fs-routes@npm:7.3.0" dependencies: minimatch: "npm:^9.0.0" peerDependencies: - "@react-router/dev": ^7.2.0-pre.3 + "@react-router/dev": ^7.3.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/a11c4e2a8cf8ef6c68a66179e865e185c2c5a7bfb5afd6b849ac4d43c4fab937691fcd625b5f999da90f683462f587040108a241565f00d0cb3622e0b302b935 + checksum: 10/545a719ffc3d5522a1d09cba83d60afcd3a25ac4f8b48bd0bc6929b34191cc5561dfdceb26f54d8466fba5c2c9ac284dba2d244181f5f66c784aa3508327f50f languageName: node linkType: hard -"@react-router/node@npm:7.2.0-pre.3, @react-router/node@npm:^7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "@react-router/node@npm:7.2.0-pre.3" +"@react-router/node@npm:7.3.0, @react-router/node@npm:^7.3.0": + version: 7.3.0 + resolution: "@react-router/node@npm:7.3.0" dependencies: "@mjackson/node-fetch-server": "npm:^0.2.0" source-map-support: "npm:^0.5.21" stream-slice: "npm:^0.1.2" undici: "npm:^6.19.2" peerDependencies: - react-router: 7.2.0-pre.3 + react-router: 7.3.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/82139f928daa27affa629500d964500aca69750b0dc9f92abf118997da464925f4b628ecffc1948f2780e26f33694e9bc8782e642736b474e00ccd34f25a8592 + checksum: 10/4b7336017bf07e7c4b053b2700725186dd607732dfd488de136e84fcebfe936250de7a841a87068eba9ee093d2e1fbd2fbd101d29d68d43a4bad639f84e8982f languageName: node linkType: hard -"@react-router/serve@npm:^7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "@react-router/serve@npm:7.2.0-pre.3" +"@react-router/serve@npm:^7.3.0": + version: 7.3.0 + resolution: "@react-router/serve@npm:7.3.0" dependencies: - "@react-router/express": "npm:7.2.0-pre.3" - "@react-router/node": "npm:7.2.0-pre.3" + "@react-router/express": "npm:7.3.0" + "@react-router/node": "npm:7.3.0" compression: "npm:^1.7.4" express: "npm:^4.19.2" get-port: "npm:5.1.1" morgan: "npm:^1.10.0" source-map-support: "npm:^0.5.21" peerDependencies: - react-router: 7.2.0-pre.3 + react-router: 7.3.0 bin: react-router-serve: bin.js - checksum: 10/212cddc84d90e2d4431dd222a8d66ce683062f374e8ea17ea7f2dd33b68c9077d2836fe945b423c012b4fb41fc3b9e699d2e28531ab3136223409f1dcab818e5 + checksum: 10/c29211dbeb5f053c1579263039c39e9755dd5925745b579b5ddb70110db607f5bfc435a9d4d82585bb686e1de068a7481ac06ae2731122f889fa61267a5b73d2 languageName: node linkType: hard @@ -11111,8 +11109,8 @@ __metadata: linkType: hard "@vercel/react-router@npm:^1.0.2": - version: 1.0.2 - resolution: "@vercel/react-router@npm:1.0.2" + version: 1.1.0 + resolution: "@vercel/react-router@npm:1.1.0" dependencies: "@vercel/static-config": "npm:3.0.0" ts-morph: "npm:12.0.0" @@ -11122,7 +11120,7 @@ __metadata: isbot: 5 react: ">=18" react-dom: ">=18" - checksum: 10/5f7e60adb6f84473603d37e61572f24395490bce19ff0fe2fb240fa97a8be77c9e4da27ad9f45bc053d9c87f63d2068ca93027fc2014f0ac6ee0659c2e111628 + checksum: 10/d04ff10f34595b3c47f467585fc39ce233a4ec58d64f8f56dc6242cefe222d6a7ea91ad414bf70998d2b7de6ce0bd3019fde5c6dd05612e0aa9e2bc5b5329aae languageName: node linkType: hard @@ -13226,15 +13224,6 @@ __metadata: languageName: node linkType: hard -"browserify-zlib@npm:^0.1.4": - version: 0.1.4 - resolution: "browserify-zlib@npm:0.1.4" - dependencies: - pako: "npm:~0.2.0" - checksum: 10/cd506a1ef9c3280f6537a17ed1352ef7738b66fef0a15a655dc3a43edc34be6ee78c5838427146ae1fcd4801fc06d2ab203614d0f8c4df8b5a091cf0134b9a80 - languageName: node - linkType: hard - "browserslist@npm:^4.21.10, browserslist@npm:^4.24.3": version: 4.24.4 resolution: "browserslist@npm:4.24.4" @@ -15273,18 +15262,6 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^3.5.0, duplexify@npm:^3.6.0": - version: 3.7.1 - resolution: "duplexify@npm:3.7.1" - dependencies: - end-of-stream: "npm:^1.0.0" - inherits: "npm:^2.0.1" - readable-stream: "npm:^2.0.0" - stream-shift: "npm:^1.0.0" - checksum: 10/7799984d178fb57e11c43f5f172a10f795322ec85ff664c2a98d2c2de6deeb9d7a30b810f83923dcd7ebe0f1786724b8aee2b62ca4577522141f93d6d48fb31c - languageName: node - linkType: hard - "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -15391,7 +15368,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -18070,22 +18047,6 @@ __metadata: languageName: node linkType: hard -"gunzip-maybe@npm:^1.4.2": - version: 1.4.2 - resolution: "gunzip-maybe@npm:1.4.2" - dependencies: - browserify-zlib: "npm:^0.1.4" - is-deflate: "npm:^1.0.0" - is-gzip: "npm:^1.0.0" - peek-stream: "npm:^1.1.0" - pumpify: "npm:^1.3.3" - through2: "npm:^2.0.3" - bin: - gunzip-maybe: bin.js - checksum: 10/82a4eadb617e50ac63cb88b3c1ebef0f85de702c0c2031c5d9c0575837e1eef7c94fa4ad69ca4aec2dc3d939c89054ec07c91c233648433058efa7d44354d456 - languageName: node - linkType: hard - "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -18936,13 +18897,6 @@ __metadata: languageName: node linkType: hard -"is-deflate@npm:^1.0.0": - version: 1.0.0 - resolution: "is-deflate@npm:1.0.0" - checksum: 10/c2f9f2d3db79ac50c5586697d1e69a55282a2b0cc5e437b3c470dd47f24e40b6216dcd7e024511e21381607bf57afa019343e3bd0e08a119032818b596004262 - languageName: node - linkType: hard - "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -19009,13 +18963,6 @@ __metadata: languageName: node linkType: hard -"is-gzip@npm:^1.0.0": - version: 1.0.0 - resolution: "is-gzip@npm:1.0.0" - checksum: 10/0d28931c1f445fa29c900cf9f48e06e9d1d477a3bf7bd7332e7ce68f1333ccd8cb381de2f0f62a9a262d9c0912608a9a71b4a40e788e201b3dbd67072bb20d86 - languageName: node - linkType: hard - "is-inside-container@npm:^1.0.0": version: 1.0.0 resolution: "is-inside-container@npm:1.0.0" @@ -22426,13 +22373,6 @@ __metadata: languageName: node linkType: hard -"pako@npm:~0.2.0": - version: 0.2.9 - resolution: "pako@npm:0.2.9" - checksum: 10/627c6842e90af0b3a9ee47345bd66485a589aff9514266f4fa9318557ad819c46fedf97510f2cef9b6224c57913777966a05cb46caf6a9b31177a5401a06fe15 - languageName: node - linkType: hard - "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -22697,17 +22637,6 @@ __metadata: languageName: node linkType: hard -"peek-stream@npm:^1.1.0": - version: 1.1.3 - resolution: "peek-stream@npm:1.1.3" - dependencies: - buffer-from: "npm:^1.0.0" - duplexify: "npm:^3.5.0" - through2: "npm:^2.0.3" - checksum: 10/a0e09d6d1a8a01158a3334f20d6b1cdd91747eba24eb06a1d742eefb620385593121a76d4378cc81f77cdce6a66df0575a41041b1189c510254aec91878afc99 - languageName: node - linkType: hard - "perfect-debounce@npm:^1.0.0": version: 1.0.0 resolution: "perfect-debounce@npm:1.0.0" @@ -23118,16 +23047,6 @@ __metadata: languageName: node linkType: hard -"pump@npm:^2.0.0": - version: 2.0.1 - resolution: "pump@npm:2.0.1" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10/e9f26a17be00810bff37ad0171edb35f58b242487b0444f92fb7d78bc7d61442fa9b9c5bd93a43fd8fd8ddd3cc75f1221f5e04c790f42907e5baab7cf5e2b931 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.2 resolution: "pump@npm:3.0.2" @@ -23138,17 +23057,6 @@ __metadata: languageName: node linkType: hard -"pumpify@npm:^1.3.3": - version: 1.5.1 - resolution: "pumpify@npm:1.5.1" - dependencies: - duplexify: "npm:^3.6.0" - inherits: "npm:^2.0.3" - pump: "npm:^2.0.0" - checksum: 10/5d11a99f320dc2a052610399bac6d03db0a23bc23b23aa2a7d0adf879da3065a55134b975db66dc46bc79f54af3dd575d8119113a0a5b311a00580e1f053896b - languageName: node - linkType: hard - "punycode@npm:^1.3.2": version: 1.4.1 resolution: "punycode@npm:1.4.1" @@ -23620,9 +23528,9 @@ __metadata: languageName: node linkType: hard -"react-router@npm:^7.2.0-pre.3": - version: 7.2.0-pre.3 - resolution: "react-router@npm:7.2.0-pre.3" +"react-router@npm:^7.3.0": + version: 7.3.0 + resolution: "react-router@npm:7.3.0" dependencies: "@types/cookie": "npm:^0.6.0" cookie: "npm:^1.0.1" @@ -23634,7 +23542,7 @@ __metadata: peerDependenciesMeta: react-dom: optional: true - checksum: 10/15494f1be3780a82c5728e489be5fdf93b45c404b6683e597340e12177a2eba81f341d359e1d1459a726aaa7d78db94e3cbcf587340c392f561b73fc837a6cb9 + checksum: 10/f7694785f95b989e55c0ae058c36c5f523e318109aea26f4e1567a3c50dcbff769417c54451d976990c507f83499bfe7bc4ec9bea52b2fabab4e6da57d21b231 languageName: node linkType: hard @@ -23727,7 +23635,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -25325,13 +25233,6 @@ __metadata: languageName: node linkType: hard -"stream-shift@npm:^1.0.0": - version: 1.0.3 - resolution: "stream-shift@npm:1.0.3" - checksum: 10/a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 - languageName: node - linkType: hard - "stream-slice@npm:^0.1.2": version: 0.1.2 resolution: "stream-slice@npm:0.1.2" @@ -25983,16 +25884,6 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.3": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: "npm:~2.3.6" - xtend: "npm:~4.0.1" - checksum: 10/cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4 - languageName: node - linkType: hard - "through@npm:^2.3.6, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -28177,13 +28068,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3"