From ad67face3baea2b0221c3e2c7c88ea7be1a4d6e6 Mon Sep 17 00:00:00 2001 From: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> Date: Sat, 4 Oct 2025 23:28:57 +0300 Subject: [PATCH 1/3] feat: start support for tanstack Signed-off-by: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> --- .../elements/src/react/router/tanstack.ts | 37 +++++++++++++ .../react/utils/path-inference/tanstack.tsx | 53 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 packages/elements/src/react/router/tanstack.ts create mode 100644 packages/elements/src/react/utils/path-inference/tanstack.tsx diff --git a/packages/elements/src/react/router/tanstack.ts b/packages/elements/src/react/router/tanstack.ts new file mode 100644 index 00000000000..458fe96b702 --- /dev/null +++ b/packages/elements/src/react/router/tanstack.ts @@ -0,0 +1,37 @@ +import type { ClerkHostRouter } from '@clerk/types'; +import { useRouter } from '@tanstack/react-router'; + +// Assume you adapt or define this constant similarly; e.g., for TanStack Router v1.0+ +import { usePathnameWithoutCatchAll } from '../utils/path-inference/tanstack'; // Assume you create/adapt this util for TanStack (e.g., strip catch-all params like [...slug] from pathname) + +/** + * Clerk Elements router integration with TanStack Router. + */ +export const useTanStackRouter = (): ClerkHostRouter => { + const router = useRouter(); + const pathname = router.location.pathname; + const searchString = router.location.search; // Raw search string for URLSearchParams + const inferredBasePath = usePathnameWithoutCatchAll(); // Adapt your custom util for TanStack routing + + // TanStack Router always uses history APIs under the hood for SPA navigation, preserving state without full re-renders. + // No version check needed unless integrating with very early betas; assume support for v1.x+. + const canUseHistoryAPIs = typeof window !== 'undefined'; + + // Helper to create URLSearchParams from search string (mimics Next.js useSearchParams return type) + const getSearchParams = () => new URLSearchParams(searchString); + + return { + mode: 'path', + name: 'TanStackRouter', + push: (path: string) => router.navigate({ to: path }), + replace: (path: string) => + canUseHistoryAPIs ? window.history.replaceState(null, '', path) : router.navigate({ to: path, replace: true }), + shallowPush: (path: string) => + // In TanStack Router, all navigations are "shallow" by default (no full reload, preserves state). + // Use standard push; if you need to avoid re-fetching data, integrate with TanStack Query's stale-while-revalidate or disable refetch. + canUseHistoryAPIs ? window.history.pushState(null, '', path) : router.navigate({ to: path }), + pathname: () => pathname, + searchParams: () => getSearchParams(), + inferredBasePath: () => inferredBasePath, + }; +}; diff --git a/packages/elements/src/react/utils/path-inference/tanstack.tsx b/packages/elements/src/react/utils/path-inference/tanstack.tsx new file mode 100644 index 00000000000..5e4a48b5920 --- /dev/null +++ b/packages/elements/src/react/utils/path-inference/tanstack.tsx @@ -0,0 +1,53 @@ +import { useParams, useRouter } from '@tanstack/react-router'; +import React from 'react'; + +import { removeOptionalCatchAllSegment } from './utils'; + +/** + * This hook grabs the current pathname and removes any (optional) catch-all segments. + * Adapted from Next.js App Router logic for TanStack Router. + * @example + * Route: /user/$[id]/profile/$[...rest] (or file: user.[id].profile.[[...rest]].tsx) + * Pathname: /user/123/profile/security + * Params: { id: '123', rest: ['security'] } + * Returns: /user/123/profile + * @returns The pathname without any catch-all segments + */ +export const usePathnameWithoutCatchAll = (): string => { + const router = useRouter(); + const pathname = router?.location.pathname || ''; // Equivalent to usePathname() + + // Early return for no router (SSR initial or error) + if (!pathname) { + return '/'; + } + + // Equivalent to useParams() – gets params for the current (leaf) route, which includes catch-alls + const params = useParams() as Record; // Typed as needed + + return React.useMemo(() => { + // Apply optional catch-all heuristic first (mirrors Next.js fallback) + const processedPath = removeOptionalCatchAllSegment(pathname); + + // For resolved pathnames in TanStack: Split into parts (exclude leading /) + const pathParts = processedPath.split('/').filter(Boolean); + + // Identify catch-all params: Those that are arrays (splats like [...rest]) + const catchAllParams = Object.values(params || {}) + .filter((v): v is string[] => Array.isArray(v)) + .flat(Infinity); // Flatten all (handles multiple/nested, though rare) + + // If no catch-all segments, return full path + if (catchAllParams.length === 0) { + return pathname.replace(/\/$/, '') || '/'; // Normalize trailing slash + } + + // Slice off the trailing segments matching the catch-all length + // E.g., pathParts = ['user', '123', 'profile', 'security'], length=1 → slice(0, 3) = /user/123/profile + const baseParts = pathParts.slice(0, pathParts.length - catchAllParams.length); + const basePath = `/${baseParts.join('/')}`; + + // Normalize: Ensure absolute and no trailing slash unless root + return basePath.replace(/\/$/, '') || '/'; + }, [pathname, params]); // Dependencies: Recompute on navigation or param changes +}; From 60e0cf0eb4f1d34a5354d394fb9487f324fa9123 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent <5038030+tunnckoCore@users.noreply.github.com> Date: Sat, 4 Oct 2025 23:39:07 +0300 Subject: [PATCH 2/3] Update packages/elements/src/react/router/tanstack.ts ok Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/elements/src/react/router/tanstack.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/elements/src/react/router/tanstack.ts b/packages/elements/src/react/router/tanstack.ts index 458fe96b702..8958be1a59b 100644 --- a/packages/elements/src/react/router/tanstack.ts +++ b/packages/elements/src/react/router/tanstack.ts @@ -24,12 +24,10 @@ export const useTanStackRouter = (): ClerkHostRouter => { mode: 'path', name: 'TanStackRouter', push: (path: string) => router.navigate({ to: path }), - replace: (path: string) => - canUseHistoryAPIs ? window.history.replaceState(null, '', path) : router.navigate({ to: path, replace: true }), + replace: (path: string) => router.history.replace(path), shallowPush: (path: string) => - // In TanStack Router, all navigations are "shallow" by default (no full reload, preserves state). - // Use standard push; if you need to avoid re-fetching data, integrate with TanStack Query's stale-while-revalidate or disable refetch. - canUseHistoryAPIs ? window.history.pushState(null, '', path) : router.navigate({ to: path }), + // In TanStack Router, all navigations are already shallow; reuse the standard history push. + router.history.push(path), pathname: () => pathname, searchParams: () => getSearchParams(), inferredBasePath: () => inferredBasePath, From a93c10c62c09c83f49924268fd2ad081d2b775f0 Mon Sep 17 00:00:00 2001 From: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> Date: Sun, 5 Oct 2025 00:00:18 +0300 Subject: [PATCH 3/3] fix: add suggested fixes Signed-off-by: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> --- packages/elements/package.json | 1 + .../elements/src/react/router/tanstack.ts | 41 ++++--- .../react/utils/path-inference/tanstack.tsx | 25 ++--- pnpm-lock.yaml | 101 +++++++++--------- 4 files changed, 87 insertions(+), 81 deletions(-) diff --git a/packages/elements/package.json b/packages/elements/package.json index d56952daf52..2cde3aae103 100644 --- a/packages/elements/package.json +++ b/packages/elements/package.json @@ -86,6 +86,7 @@ }, "devDependencies": { "@statelyai/inspect": "^0.4.0", + "@tanstack/react-router": "1.131.49", "concurrently": "^9.2.1", "next": "14.2.33" }, diff --git a/packages/elements/src/react/router/tanstack.ts b/packages/elements/src/react/router/tanstack.ts index 8958be1a59b..2ef4106cd43 100644 --- a/packages/elements/src/react/router/tanstack.ts +++ b/packages/elements/src/react/router/tanstack.ts @@ -1,33 +1,46 @@ import type { ClerkHostRouter } from '@clerk/types'; import { useRouter } from '@tanstack/react-router'; -// Assume you adapt or define this constant similarly; e.g., for TanStack Router v1.0+ -import { usePathnameWithoutCatchAll } from '../utils/path-inference/tanstack'; // Assume you create/adapt this util for TanStack (e.g., strip catch-all params like [...slug] from pathname) +import { usePathnameWithoutCatchAll } from '../utils/path-inference/tanstack'; /** - * Clerk Elements router integration with TanStack Router. + * Clerk Elements router integration hook for TanStack Router. + * + * Provides a standardized router interface (`ClerkHostRouter`) that Clerk Elements + * can use to navigate and read URL state within a TanStack Router application. + * + * @returns A `ClerkHostRouter` object with navigation methods (`push`, `replace`, `shallowPush`), + * URL state accessors (`pathname`, `searchParams`), and path inference (`inferredBasePath`). + * + * @example + * ```tsx + * import { useTanStackRouter } from '@clerk/elements/tanstack'; + * + * function MyComponent() { + * const router = useTanStackRouter(); + * // Clerk Elements will use this router for navigation + * } + * ``` + * + * @remarks + * - Requires TanStack Router v1.x+ to be installed and configured in your application. + * - The hook must be called within a TanStack Router context (inside a ``). */ export const useTanStackRouter = (): ClerkHostRouter => { const router = useRouter(); const pathname = router.location.pathname; - const searchString = router.location.search; // Raw search string for URLSearchParams - const inferredBasePath = usePathnameWithoutCatchAll(); // Adapt your custom util for TanStack routing - - // TanStack Router always uses history APIs under the hood for SPA navigation, preserving state without full re-renders. - // No version check needed unless integrating with very early betas; assume support for v1.x+. - const canUseHistoryAPIs = typeof window !== 'undefined'; - - // Helper to create URLSearchParams from search string (mimics Next.js useSearchParams return type) + const searchString = router.location.search; + const inferredBasePath = usePathnameWithoutCatchAll(); // const getSearchParams = () => new URLSearchParams(searchString); return { mode: 'path', name: 'TanStackRouter', push: (path: string) => router.navigate({ to: path }), - replace: (path: string) => router.history.replace(path), + replace: (path: string) => router.navigate({ to: path, replace: true }), shallowPush: (path: string) => - // In TanStack Router, all navigations are already shallow; reuse the standard history push. - router.history.push(path), + // In TanStack Router, all navigations are already shallow by default. + router.navigate({ to: path }), pathname: () => pathname, searchParams: () => getSearchParams(), inferredBasePath: () => inferredBasePath, diff --git a/packages/elements/src/react/utils/path-inference/tanstack.tsx b/packages/elements/src/react/utils/path-inference/tanstack.tsx index 5e4a48b5920..acca8f24a05 100644 --- a/packages/elements/src/react/utils/path-inference/tanstack.tsx +++ b/packages/elements/src/react/utils/path-inference/tanstack.tsx @@ -15,31 +15,19 @@ import { removeOptionalCatchAllSegment } from './utils'; */ export const usePathnameWithoutCatchAll = (): string => { const router = useRouter(); - const pathname = router?.location.pathname || ''; // Equivalent to usePathname() - // Early return for no router (SSR initial or error) - if (!pathname) { - return '/'; - } - - // Equivalent to useParams() – gets params for the current (leaf) route, which includes catch-alls - const params = useParams() as Record; // Typed as needed + const pathname = router?.location.pathname || ''; + const params = useParams() as Record; return React.useMemo(() => { - // Apply optional catch-all heuristic first (mirrors Next.js fallback) const processedPath = removeOptionalCatchAllSegment(pathname); - - // For resolved pathnames in TanStack: Split into parts (exclude leading /) const pathParts = processedPath.split('/').filter(Boolean); - - // Identify catch-all params: Those that are arrays (splats like [...rest]) const catchAllParams = Object.values(params || {}) .filter((v): v is string[] => Array.isArray(v)) - .flat(Infinity); // Flatten all (handles multiple/nested, though rare) + .flat(Infinity); - // If no catch-all segments, return full path - if (catchAllParams.length === 0) { - return pathname.replace(/\/$/, '') || '/'; // Normalize trailing slash + if (!pathname || catchAllParams.length === 0) { + return pathname.replace(/\/$/, '') || '/'; } // Slice off the trailing segments matching the catch-all length @@ -47,7 +35,6 @@ export const usePathnameWithoutCatchAll = (): string => { const baseParts = pathParts.slice(0, pathParts.length - catchAllParams.length); const basePath = `/${baseParts.join('/')}`; - // Normalize: Ensure absolute and no trailing slash unless root return basePath.replace(/\/$/, '') || '/'; - }, [pathname, params]); // Dependencies: Recompute on navigation or param changes + }, [pathname, params]); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cce2c25ef42..1d79b3b9964 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -273,7 +273,7 @@ importers: version: 1.2.2 ts-jest: specifier: 29.2.5 - version: 29.2.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.18.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.6)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.2.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.0)(jest@29.7.0(@types/node@22.18.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.6)(typescript@5.8.3)))(typescript@5.8.3) tsup: specifier: catalog:repo version: 8.5.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.19.2)(typescript@5.8.3)(yaml@2.8.1) @@ -518,10 +518,10 @@ importers: version: link:../testing '@rsdoctor/rspack-plugin': specifier: ^0.4.13 - version: 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + version: 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@rspack/cli': specifier: ^1.4.11 - version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@rspack/core': specifier: ^1.4.11 version: 1.4.11(@swc/helpers@0.5.17) @@ -616,6 +616,9 @@ importers: '@statelyai/inspect': specifier: ^0.4.0 version: 0.4.0(ws@8.18.3)(xstate@5.20.2) + '@tanstack/react-router': + specifier: 1.131.49 + version: 1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1) concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -992,7 +995,7 @@ importers: version: 1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-start': specifier: 1.131.49 - version: 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + version: 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) esbuild-plugin-file-path-extensions: specifier: ^2.1.4 version: 2.1.4 @@ -19160,12 +19163,12 @@ snapshots: '@rsdoctor/client@0.4.13': {} - '@rsdoctor/core@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/core@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) axios: 1.7.9 enhanced-resolve: 5.12.0 filesize: 10.1.6 @@ -19183,10 +19186,10 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/graph@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/graph@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: - '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) lodash.unionby: 4.8.0 socket.io: 4.8.1 source-map: 0.7.6 @@ -19197,13 +19200,13 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/rspack-plugin@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/rspack-plugin@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: - '@rsdoctor/core': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/core': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@rspack/core': 1.4.11(@swc/helpers@0.5.17) lodash: 4.17.21 transitivePeerDependencies: @@ -19213,12 +19216,12 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/sdk@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/sdk@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@rsdoctor/client': 0.4.13 - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) + '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@types/fs-extra': 11.0.4 body-parser: 1.20.3 cors: 2.8.5 @@ -19238,20 +19241,20 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/types@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/types@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@types/connect': 3.4.38 '@types/estree': 1.0.5 '@types/tapable': 2.2.7 source-map: 0.7.6 - webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) + webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0) optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - '@rsdoctor/utils@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/utils@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@babel/code-frame': 7.25.7 - '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@types/estree': 1.0.5 acorn: 8.15.0 acorn-import-assertions: 1.9.0(acorn@8.15.0) @@ -19317,11 +19320,11 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.4.11 '@rspack/binding-win32-x64-msvc': 1.4.11 - '@rspack/cli@1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rspack/cli@1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@discoveryjs/json-ext': 0.5.7 '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - '@rspack/dev-server': 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rspack/dev-server': 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) colorette: 2.0.20 exit-hook: 4.0.0 interpret: 3.1.1 @@ -19345,13 +19348,13 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.17 - '@rspack/dev-server@1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rspack/dev-server@1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) chokidar: 3.6.0 http-proxy-middleware: 2.0.9(@types/express@4.17.23) p-retry: 6.2.0 - webpack-dev-server: 5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + webpack-dev-server: 5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) ws: 8.18.3 transitivePeerDependencies: - '@types/express' @@ -19671,9 +19674,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-plugin@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@tanstack/react-start-plugin@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: - '@tanstack/start-plugin-core': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@tanstack/start-plugin-core': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@vitejs/plugin-react': 4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) pathe: 2.0.3 vite: 7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) @@ -19723,10 +19726,10 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/react-start@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@tanstack/react-start@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@tanstack/react-start-client': 1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-start-plugin': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@tanstack/react-start-plugin': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.5.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@tanstack/react-start-server': 1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/start-server-functions-client': 1.131.48(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) '@tanstack/start-server-functions-server': 1.131.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) @@ -19797,7 +19800,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@tanstack/router-plugin@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -19816,7 +19819,7 @@ snapshots: optionalDependencies: '@tanstack/react-router': 1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1) vite: 7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) - webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) + webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0) transitivePeerDependencies: - supports-color @@ -19855,14 +19858,14 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@tanstack/start-plugin-core@1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 '@babel/types': 7.28.4 '@tanstack/router-core': 1.131.48 '@tanstack/router-generator': 1.131.48 - '@tanstack/router-plugin': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@tanstack/router-plugin': 1.131.49(@tanstack/react-router@1.131.49(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) '@tanstack/router-utils': 1.131.2 '@tanstack/server-functions-plugin': 1.131.2(vite@7.1.5(@types/node@24.3.1)(jiti@2.5.1)(lightningcss@1.27.0)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) '@tanstack/start-server-core': 1.131.48 @@ -30482,16 +30485,17 @@ snapshots: ansi-escapes: 5.0.0 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))): + terser-webpack-plugin@5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.30 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.44.0 - webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) + webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0) optionalDependencies: '@swc/core': 1.11.29(@swc/helpers@0.5.17) + esbuild: 0.25.0 terser@5.44.0: dependencies: @@ -30663,7 +30667,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest@29.7.0(@types/node@22.18.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.6)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.2.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.0)(jest@29.7.0(@types/node@22.18.6)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.6)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -30681,6 +30685,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.28.4) + esbuild: 0.25.0 ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.6)(typescript@5.8.3): dependencies: @@ -31758,7 +31763,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@7.4.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))): + webpack-dev-middleware@7.4.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)): dependencies: colorette: 2.0.20 memfs: 4.14.0 @@ -31767,9 +31772,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.2 optionalDependencies: - webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) + webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0) - webpack-dev-server@5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))): + webpack-dev-server@5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -31797,10 +31802,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + webpack-dev-middleware: 7.4.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) ws: 8.18.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) + webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0) transitivePeerDependencies: - bufferutil - debug @@ -31817,7 +31822,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)): + webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0): dependencies: '@types/estree': 1.0.8 '@webassemblyjs/ast': 1.14.1 @@ -31839,7 +31844,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.3 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.0)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: