diff --git a/.changeset/calm-tools-work.md b/.changeset/calm-tools-work.md new file mode 100644 index 00000000000..75f04056919 --- /dev/null +++ b/.changeset/calm-tools-work.md @@ -0,0 +1,5 @@ +--- +'@tanstack/octane-query': minor +--- + +Add the official TanStack Query adapter for Octane. diff --git a/.changeset/config.json b/.changeset/config.json index 984e1d89f1c..b3e26951bdf 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -13,6 +13,7 @@ "@tanstack/angular-query-experimental", "@tanstack/angular-query-persist-client", "@tanstack/eslint-plugin-query", + "@tanstack/octane-query", "@tanstack/preact-query", "@tanstack/preact-query-devtools", "@tanstack/preact-query-persist-client", diff --git a/docs/config.json b/docs/config.json index a68832565dc..d8a0a39f6d7 100644 --- a/docs/config.json +++ b/docs/config.json @@ -217,6 +217,23 @@ "to": "framework/preact/graphql" } ] + }, + { + "label": "octane", + "children": [ + { + "label": "Overview", + "to": "framework/octane/overview" + }, + { + "label": "Installation", + "to": "framework/octane/installation" + }, + { + "label": "Quick Start", + "to": "framework/octane/quick-start" + } + ] } ] }, @@ -949,6 +966,19 @@ "to": "framework/preact/guides/does-this-replace-client-state" } ] + }, + { + "label": "octane", + "children": [ + { + "label": "Suspense and Error Boundaries", + "to": "framework/octane/guides/suspense" + }, + { + "label": "Server Rendering and Hydration", + "to": "framework/octane/guides/ssr" + } + ] } ] }, @@ -1427,6 +1457,15 @@ "to": "framework/preact/reference/functions/HydrationBoundary" } ] + }, + { + "label": "octane", + "children": [ + { + "label": "Octane Reference", + "to": "framework/octane/reference/index" + } + ] } ] }, diff --git a/docs/framework/octane/guides/ssr.md b/docs/framework/octane/guides/ssr.md new file mode 100644 index 00000000000..ba6b18a410d --- /dev/null +++ b/docs/framework/octane/guides/ssr.md @@ -0,0 +1,63 @@ +--- +id: ssr +title: Server Rendering and Hydration +--- + +Octane Query supports both prefetched hydration and render-time Suspense on the +server. The binding re-exports Query Core's `dehydrate` and `hydrate` functions, +and `HydrationBoundary` accepts dehydrated queries, including pending queries +that resolve in a later stream chunk. + +## Per-request clients + +Create a new `QueryClient` for every server request. Never share one server +client between users. + +```ts +import { QueryClient, dehydrate, hydrate } from '@tanstack/octane-query' + +export async function loadQueryState() { + const queryClient = new QueryClient({ + defaultOptions: { + queries: { staleTime: 60_000 }, + }, + }) + + await queryClient.prefetchQuery({ + queryKey: ['todos'], + queryFn: fetchTodos, + }) + + return { + queryClient, + state: dehydrate(queryClient), + } +} + +export function restoreQueryState(state: unknown) { + const queryClient = new QueryClient() + hydrate(queryClient, state) + return queryClient +} +``` + +Serialize the dehydrated state through the application's SSR pipeline, restore +it before the browser renders query consumers, and provide the browser client +with `QueryClientProvider`. Use `HydrationBoundary` when only a subtree owns a +dehydrated state payload. + +The adapter owns Query's Octane binding and hydration behavior. Routing, +serialization, and response streaming remain responsibilities of the +application's TanStack Start or other SSR pipeline. + +## Render-time Suspense + +Suspense hooks can start a query during server rendering. Octane tracks each +thenable with the compiler-provided hook slot, so sequential suspense calls and +streamed continuations resume at the correct call site. Wrap those consumers in +an Octane Suspense boundary and let the SSR renderer stream the resolved +content. + +For persisted browser caches, wrap consumers in `IsRestoringProvider` while the +restore is in progress. Query observers will avoid fetching until restoration +finishes. diff --git a/docs/framework/octane/guides/suspense.md b/docs/framework/octane/guides/suspense.md new file mode 100644 index 00000000000..219b64fb975 --- /dev/null +++ b/docs/framework/octane/guides/suspense.md @@ -0,0 +1,43 @@ +--- +id: suspense +title: Suspense and Error Boundaries +--- + +Use `useSuspenseQuery`, `useSuspenseInfiniteQuery`, or +`useSuspenseQueries` when pending work should be handled by an Octane Suspense +boundary. These hooks integrate with Octane's `use(thenable)` behavior and +return results whose `data` is defined after the boundary resolves. + +```tsrx +import { ErrorBoundary, Suspense } from 'octane' +import { useSuspenseQuery } from '@tanstack/octane-query' + +function Profile() @{ + const profile = useSuspenseQuery({ + queryKey: ['profile'], + queryFn: fetchProfile, + }) + +

{profile.data.name}

+} + +function Page() @{ +

{error.message}

}> + {'Loading...'}

}> + +
+
+} +``` + +Octane's `@pending` and `@catch` directives can be used instead of the +component boundaries. + +By default, a suspense query only throws an error when no cached data is +available. Set `throwOnError` on non-suspense queries or mutations when their +errors should reach the nearest error boundary. + +Use `QueryErrorResetBoundary` or `useQueryErrorResetBoundary` to coordinate a +boundary retry with the Query cache. Reset the Query boundary when the Octane +error boundary retries so the failed query can fetch again instead of +immediately throwing the same error. diff --git a/docs/framework/octane/installation.md b/docs/framework/octane/installation.md new file mode 100644 index 00000000000..1a77bfef821 --- /dev/null +++ b/docs/framework/octane/installation.md @@ -0,0 +1,25 @@ +--- +id: installation +title: Installation +--- + +Install the official adapter and Octane: + +```bash +pnpm add @tanstack/octane-query octane +``` + +Or use the equivalent command for npm, Yarn, or Bun. + +Octane 0.1.13 or newer is required. `octane` is a peer dependency. +`@tanstack/query-core` is included by the adapter and all of its public APIs are +re-exported from +`@tanstack/octane-query`. + +## Compiler requirement + +The adapter publishes TSRX source so Octane can compile the correct client and +server output. Use Octane's standard Vite integration in the consuming app. +The package is not a precompiled Node.js runtime entry point. + +The adapter requires Node.js 22 or newer for its package tooling. diff --git a/docs/framework/octane/overview.md b/docs/framework/octane/overview.md new file mode 100644 index 00000000000..0d3c3bfdeb1 --- /dev/null +++ b/docs/framework/octane/overview.md @@ -0,0 +1,52 @@ +--- +id: overview +title: Overview +--- + +`@tanstack/octane-query` is the official Octane adapter for TanStack Query. It +uses `@tanstack/query-core` unchanged and binds Query observers to Octane's +hooks, context, Suspense, and component lifecycle. + +Most binding-level code can move from React Query by changing the import. The +adapter includes queries, infinite queries, parallel queries, mutations, +prefetch hooks, cache status hooks, Suspense hooks, error reset boundaries, +restoration state, and hydration. It also re-exports every Query Core API. + +```tsrx +import { + QueryClient, + QueryClientProvider, + useQuery, +} from '@tanstack/octane-query' + +const queryClient = new QueryClient() + +function Todos() @{ + const query = useQuery({ + queryKey: ['todos'], + queryFn: fetchTodos, + }) + + @if (query.isPending) { + {'Loading'} + } @else if (query.isError) { + {query.error.message} + } @else { + + } +} + +function App() @{ + + + +} +``` + +Octane hooks receive compiler-injected call-site slots. The adapter derives +stable sub-slots for the Query observer, subscription, and effects, so call the +hooks normally and let the Octane compiler transform them. + +Start with [Installation](./installation.md), then [Quick Start](./quick-start.md). +See [Suspense and Error Boundaries](./guides/suspense.md) and [Server Rendering +and Hydration](./guides/ssr.md) for the framework-specific behavior. diff --git a/docs/framework/octane/quick-start.md b/docs/framework/octane/quick-start.md new file mode 100644 index 00000000000..e96fa509900 --- /dev/null +++ b/docs/framework/octane/quick-start.md @@ -0,0 +1,60 @@ +--- +id: quick-start +title: Quick Start +--- + +Create one `QueryClient` for the browser application, provide it above query +consumers, and call the Octane hooks from component bodies. + +```tsrx +import { + QueryClient, + QueryClientProvider, + useMutation, + useQuery, + useQueryClient, +} from '@tanstack/octane-query' +import { addTodo, getTodos } from './api' + +const queryClient = new QueryClient() + +function Todos() @{ + const client = useQueryClient() + const todos = useQuery({ + queryKey: ['todos'], + queryFn: getTodos, + }) + const addTodoMutation = useMutation({ + mutationFn: addTodo, + onSuccess: async () => { + await client.invalidateQueries({ queryKey: ['todos'] }) + }, + }) + + @if (todos.isPending) { +

{'Loading...'}

+ } @else if (todos.isError) { +

{todos.error.message}

+ } @else { + + + } +} + +function App() @{ + + + +} +``` + +Query option objects, keys, invalidation, retries, caching, and mutations use +the same TanStack Query contracts as the other framework adapters. The Octane +adapter changes the rendering and subscription layer, not Query Core. diff --git a/docs/framework/octane/reference/functions/infiniteQueryOptions.md b/docs/framework/octane/reference/functions/infiniteQueryOptions.md new file mode 100644 index 00000000000..564cc27340a --- /dev/null +++ b/docs/framework/octane/reference/functions/infiniteQueryOptions.md @@ -0,0 +1,126 @@ +--- +id: infiniteQueryOptions +title: infiniteQueryOptions +--- + +# Function: infiniteQueryOptions() + +## Call Signature + +```ts +function infiniteQueryOptions(options): UseInfiniteQueryOptions & object & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:76 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`DefinedInitialDataInfiniteOptions`](../type-aliases/DefinedInitialDataInfiniteOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +### Returns + +[`UseInfiniteQueryOptions`](../interfaces/UseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> & `object` & `object` + +## Call Signature + +```ts +function infiniteQueryOptions(options): OmitKeyof, "queryFn"> & object & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:100 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`UnusedSkipTokenInfiniteOptions`](../type-aliases/UnusedSkipTokenInfiniteOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +### Returns + +`OmitKeyof`\<[`UseInfiniteQueryOptions`](../interfaces/UseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\>, `"queryFn"`\> & `object` & `object` + +## Call Signature + +```ts +function infiniteQueryOptions(options): UseInfiniteQueryOptions & object & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:124 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`UndefinedInitialDataInfiniteOptions`](../type-aliases/UndefinedInitialDataInfiniteOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +### Returns + +[`UseInfiniteQueryOptions`](../interfaces/UseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> & `object` & `object` diff --git a/docs/framework/octane/reference/functions/mutationOptions.md b/docs/framework/octane/reference/functions/mutationOptions.md new file mode 100644 index 00000000000..c297d4a9dbe --- /dev/null +++ b/docs/framework/octane/reference/functions/mutationOptions.md @@ -0,0 +1,78 @@ +--- +id: mutationOptions +title: mutationOptions +--- + +# Function: mutationOptions() + +## Call Signature + +```ts +function mutationOptions(options): WithRequired, "mutationKey">; +``` + +Defined in: packages/octane-query/src/mutationOptions.ts:5 + +### Type Parameters + +#### TData + +`TData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TVariables + +`TVariables` = `void` + +#### TOnMutateResult + +`TOnMutateResult` = `unknown` + +### Parameters + +#### options + +`WithRequired`\<[`UseMutationOptions`](../interfaces/UseMutationOptions.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>, `"mutationKey"`\> + +### Returns + +`WithRequired`\<[`UseMutationOptions`](../interfaces/UseMutationOptions.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>, `"mutationKey"`\> + +## Call Signature + +```ts +function mutationOptions(options): Omit, "mutationKey">; +``` + +Defined in: packages/octane-query/src/mutationOptions.ts:19 + +### Type Parameters + +#### TData + +`TData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TVariables + +`TVariables` = `void` + +#### TOnMutateResult + +`TOnMutateResult` = `unknown` + +### Parameters + +#### options + +`Omit`\<[`UseMutationOptions`](../interfaces/UseMutationOptions.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>, `"mutationKey"`\> + +### Returns + +`Omit`\<[`UseMutationOptions`](../interfaces/UseMutationOptions.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>, `"mutationKey"`\> diff --git a/docs/framework/octane/reference/functions/queryOptions.md b/docs/framework/octane/reference/functions/queryOptions.md new file mode 100644 index 00000000000..0eaa0dd323a --- /dev/null +++ b/docs/framework/octane/reference/functions/queryOptions.md @@ -0,0 +1,114 @@ +--- +id: queryOptions +title: queryOptions +--- + +# Function: queryOptions() + +## Call Signature + +```ts +function queryOptions(options): Omit, "queryFn"> & object & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:53 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`DefinedInitialDataOptions`](../type-aliases/DefinedInitialDataOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +### Returns + +`Omit`\<[`UseQueryOptions`](../interfaces/UseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>, `"queryFn"`\> & `object` & `object` + +## Call Signature + +```ts +function queryOptions(options): OmitKeyof, "queryFn"> & object & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:64 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`UnusedSkipTokenOptions`](../type-aliases/UnusedSkipTokenOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +### Returns + +`OmitKeyof`\<[`UseQueryOptions`](../interfaces/UseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>, `"queryFn"`\> & `object` & `object` + +## Call Signature + +```ts +function queryOptions(options): UseQueryOptions & object & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:75 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`UndefinedInitialDataOptions`](../type-aliases/UndefinedInitialDataOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +### Returns + +[`UseQueryOptions`](../interfaces/UseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> & `object` & `object` diff --git a/docs/framework/octane/reference/functions/useInfiniteQuery.md b/docs/framework/octane/reference/functions/useInfiniteQuery.md new file mode 100644 index 00000000000..2d90a95204f --- /dev/null +++ b/docs/framework/octane/reference/functions/useInfiniteQuery.md @@ -0,0 +1,138 @@ +--- +id: useInfiniteQuery +title: useInfiniteQuery +--- + +# Function: useInfiniteQuery() + +## Call Signature + +```ts +function useInfiniteQuery(options, queryClient?): DefinedUseInfiniteQueryResult; +``` + +Defined in: packages/octane-query/src/useInfiniteQuery.ts:21 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`DefinedInitialDataInfiniteOptions`](../type-aliases/DefinedInitialDataInfiniteOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`DefinedUseInfiniteQueryResult`](../type-aliases/DefinedUseInfiniteQueryResult.md)\<`TData`, `TError`\> + +## Call Signature + +```ts +function useInfiniteQuery(options, queryClient?): UseInfiniteQueryResult; +``` + +Defined in: packages/octane-query/src/useInfiniteQuery.ts:38 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`UndefinedInitialDataInfiniteOptions`](../type-aliases/UndefinedInitialDataInfiniteOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`UseInfiniteQueryResult`](../type-aliases/UseInfiniteQueryResult.md)\<`TData`, `TError`\> + +## Call Signature + +```ts +function useInfiniteQuery(options, queryClient?): UseInfiniteQueryResult; +``` + +Defined in: packages/octane-query/src/useInfiniteQuery.ts:55 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +#### TPageParam + +`TPageParam` = `unknown` + +### Parameters + +#### options + +[`UseInfiniteQueryOptions`](../interfaces/UseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`UseInfiniteQueryResult`](../type-aliases/UseInfiniteQueryResult.md)\<`TData`, `TError`\> diff --git a/docs/framework/octane/reference/functions/useIsFetching.md b/docs/framework/octane/reference/functions/useIsFetching.md new file mode 100644 index 00000000000..3b027d771ae --- /dev/null +++ b/docs/framework/octane/reference/functions/useIsFetching.md @@ -0,0 +1,26 @@ +--- +id: useIsFetching +title: useIsFetching +--- + +# Function: useIsFetching() + +```ts +function useIsFetching(filters?, queryClient?): number; +``` + +Defined in: packages/octane-query/src/useIsFetching.ts:8 + +## Parameters + +### filters? + +`QueryFilters`\ + +### queryClient? + +`QueryClient` + +## Returns + +`number` diff --git a/docs/framework/octane/reference/functions/useIsMutating.md b/docs/framework/octane/reference/functions/useIsMutating.md new file mode 100644 index 00000000000..b31853f334d --- /dev/null +++ b/docs/framework/octane/reference/functions/useIsMutating.md @@ -0,0 +1,26 @@ +--- +id: useIsMutating +title: useIsMutating +--- + +# Function: useIsMutating() + +```ts +function useIsMutating(filters?, queryClient?): number; +``` + +Defined in: packages/octane-query/src/useMutationState.ts:73 + +## Parameters + +### filters? + +`MutationFilters`\<`unknown`, `Error`, `unknown`, `unknown`\> + +### queryClient? + +`QueryClient` + +## Returns + +`number` diff --git a/docs/framework/octane/reference/functions/useIsRestoring.md b/docs/framework/octane/reference/functions/useIsRestoring.md new file mode 100644 index 00000000000..148632fb7d3 --- /dev/null +++ b/docs/framework/octane/reference/functions/useIsRestoring.md @@ -0,0 +1,16 @@ +--- +id: useIsRestoring +title: useIsRestoring +--- + +# Function: useIsRestoring() + +```ts +function useIsRestoring(): boolean; +``` + +Defined in: packages/octane-query/src/isRestoring.ts:8 + +## Returns + +`boolean` diff --git a/docs/framework/octane/reference/functions/useMutation.md b/docs/framework/octane/reference/functions/useMutation.md new file mode 100644 index 00000000000..613975227e8 --- /dev/null +++ b/docs/framework/octane/reference/functions/useMutation.md @@ -0,0 +1,44 @@ +--- +id: useMutation +title: useMutation +--- + +# Function: useMutation() + +```ts +function useMutation(options, queryClient?): UseMutationResult; +``` + +Defined in: packages/octane-query/src/useMutation.ts:23 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `Error` + +### TVariables + +`TVariables` = `void` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` + +## Parameters + +### options + +[`UseMutationOptions`](../interfaces/UseMutationOptions.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\> + +### queryClient? + +`QueryClient` + +## Returns + +[`UseMutationResult`](../type-aliases/UseMutationResult.md)\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\> diff --git a/docs/framework/octane/reference/functions/useMutationState.md b/docs/framework/octane/reference/functions/useMutationState.md new file mode 100644 index 00000000000..cc11c36cc07 --- /dev/null +++ b/docs/framework/octane/reference/functions/useMutationState.md @@ -0,0 +1,32 @@ +--- +id: useMutationState +title: useMutationState +--- + +# Function: useMutationState() + +```ts +function useMutationState(options?, queryClient?): TResult[]; +``` + +Defined in: packages/octane-query/src/useMutationState.ts:27 + +## Type Parameters + +### TResult + +`TResult` = `MutationState`\<`unknown`, `Error`, `unknown`, `unknown`\> + +## Parameters + +### options? + +`MutationStateOptions`\<`TResult`\> + +### queryClient? + +`QueryClient` + +## Returns + +`TResult`[] diff --git a/docs/framework/octane/reference/functions/usePrefetchInfiniteQuery.md b/docs/framework/octane/reference/functions/usePrefetchInfiniteQuery.md new file mode 100644 index 00000000000..7704aed510c --- /dev/null +++ b/docs/framework/octane/reference/functions/usePrefetchInfiniteQuery.md @@ -0,0 +1,48 @@ +--- +id: usePrefetchInfiniteQuery +title: usePrefetchInfiniteQuery +--- + +# Function: usePrefetchInfiniteQuery() + +```ts +function usePrefetchInfiniteQuery(options, queryClient?): void; +``` + +Defined in: packages/octane-query/src/usePrefetch.ts:31 + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `Error` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### TPageParam + +`TPageParam` = `unknown` + +## Parameters + +### options + +`FetchInfiniteQueryOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +### queryClient? + +`QueryClient` + +## Returns + +`void` diff --git a/docs/framework/octane/reference/functions/usePrefetchQuery.md b/docs/framework/octane/reference/functions/usePrefetchQuery.md new file mode 100644 index 00000000000..da76e630f49 --- /dev/null +++ b/docs/framework/octane/reference/functions/usePrefetchQuery.md @@ -0,0 +1,44 @@ +--- +id: usePrefetchQuery +title: usePrefetchQuery +--- + +# Function: usePrefetchQuery() + +```ts +function usePrefetchQuery(options, queryClient?): void; +``` + +Defined in: packages/octane-query/src/usePrefetch.ts:13 + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `Error` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +## Parameters + +### options + +[`UsePrefetchQueryOptions`](../interfaces/UsePrefetchQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +### queryClient? + +`QueryClient` + +## Returns + +`void` diff --git a/docs/framework/octane/reference/functions/useQueries.md b/docs/framework/octane/reference/functions/useQueries.md new file mode 100644 index 00000000000..e1015f2f484 --- /dev/null +++ b/docs/framework/octane/reference/functions/useQueries.md @@ -0,0 +1,47 @@ +--- +id: useQueries +title: useQueries +--- + +# Function: useQueries() + +```ts +function useQueries(options, queryClient?): TCombinedResult; +``` + +Defined in: packages/octane-query/src/useQueries.ts:38 + +## Type Parameters + +### T + +`T` *extends* `any`[] + +### TCombinedResult + +`TCombinedResult` = `T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseQueryResult`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseQueryResult`\<`Head`\>, `GetUseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseQueryResult`\<`Head`\>, `GetUseQueryResult`\<`Head`\>, `GetUseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...(...)[]`\] *extends* \[\] ? \[\] : ... *extends* ... ? ... : ... : \[`...{ [K in (...)]: (...) }[]`\] : \[...\{ \[K in string \| number \| symbol\]: GetUseQueryResult\\]\> \}\[\]\] : \{ \[K in string \| number \| symbol\]: GetUseQueryResult\\]\> \} + +## Parameters + +### options + +#### combine? + +(`result`) => `TCombinedResult` + +#### queries + + \| readonly \[`T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseQueryOptionsForUseQueries`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseQueryOptionsForUseQueries`\<`Head`\>, `GetUseQueryOptionsForUseQueries`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...(...)[]`\] *extends* \[\] ? \[\] : ... *extends* ... ? ... : ... : readonly ...[] *extends* \[`...(...)[]`\] ? \[`...(...)[]`\] : ... *extends* ... ? ... : ... : readonly `unknown`[] *extends* `T` ? `T` : `T` *extends* `UseQueryOptionsForUseQueries`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] ? `UseQueryOptionsForUseQueries`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] : `UseQueryOptionsForUseQueries`\<`unknown`, `Error`, `unknown`, readonly ...[]\>[]\] + \| readonly \[\{ \[K in string \| number \| symbol\]: GetUseQueryOptionsForUseQueries\\]\> \}\] + +#### subscribed? + +`boolean` + +### queryClient? + +`QueryClient` + +## Returns + +`TCombinedResult` diff --git a/docs/framework/octane/reference/functions/useQuery.md b/docs/framework/octane/reference/functions/useQuery.md new file mode 100644 index 00000000000..af40f908fa6 --- /dev/null +++ b/docs/framework/octane/reference/functions/useQuery.md @@ -0,0 +1,126 @@ +--- +id: useQuery +title: useQuery +--- + +# Function: useQuery() + +## Call Signature + +```ts +function useQuery(options, queryClient?): DefinedUseQueryResult, TError>; +``` + +Defined in: packages/octane-query/src/useQuery.ts:17 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`DefinedInitialDataOptions`](../type-aliases/DefinedInitialDataOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`DefinedUseQueryResult`](../type-aliases/DefinedUseQueryResult.md)\<`NoInfer`\<`TData`\>, `TError`\> + +## Call Signature + +```ts +function useQuery(options, queryClient?): UseQueryResult, TError>; +``` + +Defined in: packages/octane-query/src/useQuery.ts:27 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`UndefinedInitialDataOptions`](../type-aliases/UndefinedInitialDataOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`UseQueryResult`](../type-aliases/UseQueryResult.md)\<`NoInfer`\<`TData`\>, `TError`\> + +## Call Signature + +```ts +function useQuery(options, queryClient?): UseQueryResult, TError>; +``` + +Defined in: packages/octane-query/src/useQuery.ts:37 + +### Type Parameters + +#### TQueryFnData + +`TQueryFnData` = `unknown` + +#### TError + +`TError` = `Error` + +#### TData + +`TData` = `TQueryFnData` + +#### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### Parameters + +#### options + +[`UseQueryOptions`](../interfaces/UseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +#### queryClient? + +`QueryClient` + +### Returns + +[`UseQueryResult`](../type-aliases/UseQueryResult.md)\<`NoInfer`\<`TData`\>, `TError`\> diff --git a/docs/framework/octane/reference/functions/useQueryClient.md b/docs/framework/octane/reference/functions/useQueryClient.md new file mode 100644 index 00000000000..4ee235d598b --- /dev/null +++ b/docs/framework/octane/reference/functions/useQueryClient.md @@ -0,0 +1,22 @@ +--- +id: useQueryClient +title: useQueryClient +--- + +# Function: useQueryClient() + +```ts +function useQueryClient(queryClient?): QueryClient; +``` + +Defined in: packages/octane-query/src/context.ts:25 + +## Parameters + +### queryClient? + +`QueryClient` + +## Returns + +`QueryClient` diff --git a/docs/framework/octane/reference/functions/useQueryErrorResetBoundary.md b/docs/framework/octane/reference/functions/useQueryErrorResetBoundary.md new file mode 100644 index 00000000000..8e3434a5d6e --- /dev/null +++ b/docs/framework/octane/reference/functions/useQueryErrorResetBoundary.md @@ -0,0 +1,16 @@ +--- +id: useQueryErrorResetBoundary +title: useQueryErrorResetBoundary +--- + +# Function: useQueryErrorResetBoundary() + +```ts +function useQueryErrorResetBoundary(): QueryErrorResetBoundaryValue; +``` + +Defined in: packages/octane-query/src/errorResetBoundary.ts:30 + +## Returns + +[`QueryErrorResetBoundaryValue`](../interfaces/QueryErrorResetBoundaryValue.md) diff --git a/docs/framework/octane/reference/functions/useSuspenseInfiniteQuery.md b/docs/framework/octane/reference/functions/useSuspenseInfiniteQuery.md new file mode 100644 index 00000000000..f6cdfc683bc --- /dev/null +++ b/docs/framework/octane/reference/functions/useSuspenseInfiniteQuery.md @@ -0,0 +1,48 @@ +--- +id: useSuspenseInfiniteQuery +title: useSuspenseInfiniteQuery +--- + +# Function: useSuspenseInfiniteQuery() + +```ts +function useSuspenseInfiniteQuery(options, queryClient?): UseSuspenseInfiniteQueryResult; +``` + +Defined in: packages/octane-query/src/useSuspenseQuery.ts:56 + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` + +### TError + +`TError` = `Error` + +### TData + +`TData` = `InfiniteData`\<`TQueryFnData`, `unknown`\> + +### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +### TPageParam + +`TPageParam` = `unknown` + +## Parameters + +### options + +[`UseSuspenseInfiniteQueryOptions`](../interfaces/UseSuspenseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> + +### queryClient? + +`QueryClient` + +## Returns + +[`UseSuspenseInfiniteQueryResult`](../type-aliases/UseSuspenseInfiniteQueryResult.md)\<`TData`, `TError`\> diff --git a/docs/framework/octane/reference/functions/useSuspenseQueries.md b/docs/framework/octane/reference/functions/useSuspenseQueries.md new file mode 100644 index 00000000000..26dcca4e0fd --- /dev/null +++ b/docs/framework/octane/reference/functions/useSuspenseQueries.md @@ -0,0 +1,83 @@ +--- +id: useSuspenseQueries +title: useSuspenseQueries +--- + +# Function: useSuspenseQueries() + +## Call Signature + +```ts +function useSuspenseQueries(options, queryClient?): TCombinedResult; +``` + +Defined in: packages/octane-query/src/useSuspenseQueries.ts:12 + +### Type Parameters + +#### T + +`T` *extends* `any`[] + +#### TCombinedResult + +`TCombinedResult` = `T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...(...)[]`\] *extends* \[\] ? \[\] : ... *extends* ... ? ... : ... : \[`...{ [K in (...)]: (...) }[]`\] : \[...\{ \[K in string \| number \| symbol\]: GetUseSuspenseQueryResult\\]\> \}\[\]\] : \{ \[K in string \| number \| symbol\]: GetUseSuspenseQueryResult\\]\> \} + +### Parameters + +#### options + +##### combine? + +(`result`) => `TCombinedResult` + +##### queries + + \| readonly \[`T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseSuspenseQueryOptions`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryOptions`\<`Head`\>, `GetUseSuspenseQueryOptions`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...(...)[]`\] *extends* \[\] ? \[\] : ... *extends* ... ? ... : ... : ...[] *extends* \[`...(...)[]`\] ? \[`...(...)[]`\] : ... *extends* ... ? ... : ... : `unknown`[] *extends* `T` ? `T` : `T` *extends* [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] ? [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] : [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`unknown`, `Error`, `unknown`, readonly ...[]\>[]\] + \| readonly \[\{ \[K in string \| number \| symbol\]: GetUseSuspenseQueryOptions\\]\> \}\] + +#### queryClient? + +`QueryClient` + +### Returns + +`TCombinedResult` + +## Call Signature + +```ts +function useSuspenseQueries(options, queryClient?): TCombinedResult; +``` + +Defined in: packages/octane-query/src/useSuspenseQueries.ts:25 + +### Type Parameters + +#### T + +`T` *extends* `any`[] + +#### TCombinedResult + +`TCombinedResult` = `T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>, `GetUseSuspenseQueryResult`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...(...)[]`\] *extends* \[\] ? \[\] : ... *extends* ... ? ... : ... : \[`...{ [K in (...)]: (...) }[]`\] : \[...\{ \[K in string \| number \| symbol\]: GetUseSuspenseQueryResult\\]\> \}\[\]\] : \{ \[K in string \| number \| symbol\]: GetUseSuspenseQueryResult\\]\> \} + +### Parameters + +#### options + +##### combine? + +(`result`) => `TCombinedResult` + +##### queries + +readonly \[`T` *extends* \[\] ? \[\] : `T` *extends* \[`Head`\] ? \[`GetUseSuspenseQueryOptions`\<`Head`\>\] : `T` *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...Tails[]`\] *extends* \[`Head`\] ? \[`GetUseSuspenseQueryOptions`\<`Head`\>, `GetUseSuspenseQueryOptions`\<`Head`\>\] : \[`...Tails[]`\] *extends* \[`Head`, `...Tails[]`\] ? \[`...Tails[]`\] *extends* \[\] ? \[\] : \[`...(...)[]`\] *extends* \[...\] ? \[..., ..., ...\] : ... *extends* ... ? ... : ... : `unknown`[] *extends* \[`...Tails[]`\] ? \[`...Tails[]`\] : \[`...(...)[]`\] *extends* ...[] ? ...[] : ...[] : `unknown`[] *extends* `T` ? `T` : `T` *extends* [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] ? [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>[] : [`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`unknown`, `Error`, `unknown`, readonly `unknown`[]\>[]\] + +#### queryClient? + +`QueryClient` + +### Returns + +`TCombinedResult` diff --git a/docs/framework/octane/reference/functions/useSuspenseQuery.md b/docs/framework/octane/reference/functions/useSuspenseQuery.md new file mode 100644 index 00000000000..5a331e24bf2 --- /dev/null +++ b/docs/framework/octane/reference/functions/useSuspenseQuery.md @@ -0,0 +1,44 @@ +--- +id: useSuspenseQuery +title: useSuspenseQuery +--- + +# Function: useSuspenseQuery() + +```ts +function useSuspenseQuery(options, queryClient?): UseSuspenseQueryResult; +``` + +Defined in: packages/octane-query/src/useSuspenseQuery.ts:25 + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `Error` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[] + +## Parameters + +### options + +[`UseSuspenseQueryOptions`](../interfaces/UseSuspenseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\> + +### queryClient? + +`QueryClient` + +## Returns + +[`UseSuspenseQueryResult`](../type-aliases/UseSuspenseQueryResult.md)\<`TData`, `TError`\> diff --git a/docs/framework/octane/reference/index.md b/docs/framework/octane/reference/index.md new file mode 100644 index 00000000000..c7aea70c1cc --- /dev/null +++ b/docs/framework/octane/reference/index.md @@ -0,0 +1,83 @@ +--- +id: "@tanstack/octane-query" +title: "@tanstack/octane-query" +--- + +# @tanstack/octane-query + +## Interfaces + +- [HydrationBoundaryProps](interfaces/HydrationBoundaryProps.md) +- [QueryClientProviderProps](interfaces/QueryClientProviderProps.md) +- [QueryErrorResetBoundaryProps](interfaces/QueryErrorResetBoundaryProps.md) +- [QueryErrorResetBoundaryValue](interfaces/QueryErrorResetBoundaryValue.md) +- [UseBaseQueryOptions](interfaces/UseBaseQueryOptions.md) +- [UseInfiniteQueryOptions](interfaces/UseInfiniteQueryOptions.md) +- [UseMutationOptions](interfaces/UseMutationOptions.md) +- [UsePrefetchQueryOptions](interfaces/UsePrefetchQueryOptions.md) +- [UseQueryOptions](interfaces/UseQueryOptions.md) +- [UseSuspenseInfiniteQueryOptions](interfaces/UseSuspenseInfiniteQueryOptions.md) +- [UseSuspenseQueryOptions](interfaces/UseSuspenseQueryOptions.md) + +## Type Aliases + +- [AnyUseBaseQueryOptions](type-aliases/AnyUseBaseQueryOptions.md) +- [AnyUseInfiniteQueryOptions](type-aliases/AnyUseInfiniteQueryOptions.md) +- [AnyUseMutationOptions](type-aliases/AnyUseMutationOptions.md) +- [AnyUseQueryOptions](type-aliases/AnyUseQueryOptions.md) +- [AnyUseSuspenseInfiniteQueryOptions](type-aliases/AnyUseSuspenseInfiniteQueryOptions.md) +- [AnyUseSuspenseQueryOptions](type-aliases/AnyUseSuspenseQueryOptions.md) +- [DefinedInitialDataInfiniteOptions](type-aliases/DefinedInitialDataInfiniteOptions.md) +- [DefinedInitialDataOptions](type-aliases/DefinedInitialDataOptions.md) +- [DefinedUseInfiniteQueryResult](type-aliases/DefinedUseInfiniteQueryResult.md) +- [DefinedUseQueryResult](type-aliases/DefinedUseQueryResult.md) +- [QueriesOptions](type-aliases/QueriesOptions.md) +- [QueriesResults](type-aliases/QueriesResults.md) +- [QueryErrorClearResetFunction](type-aliases/QueryErrorClearResetFunction.md) +- [QueryErrorIsResetFunction](type-aliases/QueryErrorIsResetFunction.md) +- [QueryErrorResetBoundaryFunction](type-aliases/QueryErrorResetBoundaryFunction.md) +- [QueryErrorResetFunction](type-aliases/QueryErrorResetFunction.md) +- [SuspenseQueriesOptions](type-aliases/SuspenseQueriesOptions.md) +- [SuspenseQueriesResults](type-aliases/SuspenseQueriesResults.md) +- [UndefinedInitialDataInfiniteOptions](type-aliases/UndefinedInitialDataInfiniteOptions.md) +- [UndefinedInitialDataOptions](type-aliases/UndefinedInitialDataOptions.md) +- [UnusedSkipTokenInfiniteOptions](type-aliases/UnusedSkipTokenInfiniteOptions.md) +- [UnusedSkipTokenOptions](type-aliases/UnusedSkipTokenOptions.md) +- [UseBaseMutationResult](type-aliases/UseBaseMutationResult.md) +- [UseBaseQueryResult](type-aliases/UseBaseQueryResult.md) +- [UseInfiniteQueryResult](type-aliases/UseInfiniteQueryResult.md) +- [UseMutateAsyncFunction](type-aliases/UseMutateAsyncFunction.md) +- [UseMutateFunction](type-aliases/UseMutateFunction.md) +- [UseMutationResult](type-aliases/UseMutationResult.md) +- [UseQueryResult](type-aliases/UseQueryResult.md) +- [UseSuspenseInfiniteQueryResult](type-aliases/UseSuspenseInfiniteQueryResult.md) +- [UseSuspenseQueryResult](type-aliases/UseSuspenseQueryResult.md) + +## Variables + +- [HydrationBoundary](variables/HydrationBoundary.md) +- [IsRestoringProvider](variables/IsRestoringProvider.md) +- [QueryClientContext](variables/QueryClientContext.md) +- [QueryClientProvider](variables/QueryClientProvider.md) +- [QueryErrorResetBoundary](variables/QueryErrorResetBoundary.md) + +## Functions + +- [infiniteQueryOptions](functions/infiniteQueryOptions.md) +- [mutationOptions](functions/mutationOptions.md) +- [queryOptions](functions/queryOptions.md) +- [useInfiniteQuery](functions/useInfiniteQuery.md) +- [useIsFetching](functions/useIsFetching.md) +- [useIsMutating](functions/useIsMutating.md) +- [useIsRestoring](functions/useIsRestoring.md) +- [useMutation](functions/useMutation.md) +- [useMutationState](functions/useMutationState.md) +- [usePrefetchInfiniteQuery](functions/usePrefetchInfiniteQuery.md) +- [usePrefetchQuery](functions/usePrefetchQuery.md) +- [useQueries](functions/useQueries.md) +- [useQuery](functions/useQuery.md) +- [useQueryClient](functions/useQueryClient.md) +- [useQueryErrorResetBoundary](functions/useQueryErrorResetBoundary.md) +- [useSuspenseInfiniteQuery](functions/useSuspenseInfiniteQuery.md) +- [useSuspenseQueries](functions/useSuspenseQueries.md) +- [useSuspenseQuery](functions/useSuspenseQuery.md) diff --git a/docs/framework/octane/reference/interfaces/HydrationBoundaryProps.md b/docs/framework/octane/reference/interfaces/HydrationBoundaryProps.md new file mode 100644 index 00000000000..f2f764d0817 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/HydrationBoundaryProps.md @@ -0,0 +1,57 @@ +--- +id: HydrationBoundaryProps +title: HydrationBoundaryProps +--- + +# Interface: HydrationBoundaryProps + +Defined in: packages/octane-query/src/types.ts:260 + +## Properties + +### children? + +```ts +optional children: unknown; +``` + +Defined in: packages/octane-query/src/types.ts:268 + +*** + +### options? + +```ts +optional options: OmitKeyof & object; +``` + +Defined in: packages/octane-query/src/types.ts:262 + +#### Type Declaration + +##### defaultOptions? + +```ts +optional defaultOptions: OmitKeyof<{ +}, "mutations">; +``` + +*** + +### queryClient? + +```ts +optional queryClient: QueryClient; +``` + +Defined in: packages/octane-query/src/types.ts:269 + +*** + +### state + +```ts +state: DehydratedState | null | undefined; +``` + +Defined in: packages/octane-query/src/types.ts:261 diff --git a/docs/framework/octane/reference/interfaces/QueryClientProviderProps.md b/docs/framework/octane/reference/interfaces/QueryClientProviderProps.md new file mode 100644 index 00000000000..347f11548f9 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/QueryClientProviderProps.md @@ -0,0 +1,28 @@ +--- +id: QueryClientProviderProps +title: QueryClientProviderProps +--- + +# Interface: QueryClientProviderProps + +Defined in: packages/octane-query/src/types.ts:255 + +## Properties + +### children? + +```ts +optional children: unknown; +``` + +Defined in: packages/octane-query/src/types.ts:257 + +*** + +### client + +```ts +client: QueryClient; +``` + +Defined in: packages/octane-query/src/types.ts:256 diff --git a/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryProps.md b/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryProps.md new file mode 100644 index 00000000000..947e7d3beea --- /dev/null +++ b/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryProps.md @@ -0,0 +1,18 @@ +--- +id: QueryErrorResetBoundaryProps +title: QueryErrorResetBoundaryProps +--- + +# Interface: QueryErrorResetBoundaryProps + +Defined in: packages/octane-query/src/types.ts:286 + +## Properties + +### children + +```ts +children: unknown; +``` + +Defined in: packages/octane-query/src/types.ts:287 diff --git a/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryValue.md b/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryValue.md new file mode 100644 index 00000000000..b4bcc8edfed --- /dev/null +++ b/docs/framework/octane/reference/interfaces/QueryErrorResetBoundaryValue.md @@ -0,0 +1,38 @@ +--- +id: QueryErrorResetBoundaryValue +title: QueryErrorResetBoundaryValue +--- + +# Interface: QueryErrorResetBoundaryValue + +Defined in: packages/octane-query/src/types.ts:276 + +## Properties + +### clearReset + +```ts +clearReset: QueryErrorClearResetFunction; +``` + +Defined in: packages/octane-query/src/types.ts:277 + +*** + +### isReset + +```ts +isReset: QueryErrorIsResetFunction; +``` + +Defined in: packages/octane-query/src/types.ts:278 + +*** + +### reset + +```ts +reset: QueryErrorResetFunction; +``` + +Defined in: packages/octane-query/src/types.ts:279 diff --git a/docs/framework/octane/reference/interfaces/UseBaseQueryOptions.md b/docs/framework/octane/reference/interfaces/UseBaseQueryOptions.md new file mode 100644 index 00000000000..b5014943599 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseBaseQueryOptions.md @@ -0,0 +1,47 @@ +--- +id: UseBaseQueryOptions +title: UseBaseQueryOptions +--- + +# Interface: UseBaseQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:34 + +## Extends + +- `QueryObserverOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryData`, `TQueryKey`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryData + +`TQueryData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +## Properties + +### subscribed? + +```ts +optional subscribed: boolean; +``` + +Defined in: packages/octane-query/src/types.ts:51 + +Set this to `false` to unsubscribe this observer from updates to the query cache. +Defaults to `true`. diff --git a/docs/framework/octane/reference/interfaces/UseInfiniteQueryOptions.md b/docs/framework/octane/reference/interfaces/UseInfiniteQueryOptions.md new file mode 100644 index 00000000000..718e35ca379 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseInfiniteQueryOptions.md @@ -0,0 +1,47 @@ +--- +id: UseInfiniteQueryOptions +title: UseInfiniteQueryOptions +--- + +# Interface: UseInfiniteQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:108 + +## Extends + +- `OmitKeyof`\<`InfiniteQueryObserverOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\>, `"suspense"`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` + +## Properties + +### subscribed? + +```ts +optional subscribed: boolean; +``` + +Defined in: packages/octane-query/src/types.ts:128 + +Set this to `false` to unsubscribe this observer from updates to the query cache. +Defaults to `true`. diff --git a/docs/framework/octane/reference/interfaces/UseMutationOptions.md b/docs/framework/octane/reference/interfaces/UseMutationOptions.md new file mode 100644 index 00000000000..c7f48c2ce86 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseMutationOptions.md @@ -0,0 +1,30 @@ +--- +id: UseMutationOptions +title: UseMutationOptions +--- + +# Interface: UseMutationOptions\ + +Defined in: packages/octane-query/src/types.ts:197 + +## Extends + +- `OmitKeyof`\<`MutationObserverOptions`\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>, `"_defaulted"`\> + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TVariables + +`TVariables` = `void` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` diff --git a/docs/framework/octane/reference/interfaces/UsePrefetchQueryOptions.md b/docs/framework/octane/reference/interfaces/UsePrefetchQueryOptions.md new file mode 100644 index 00000000000..6d669e6cef1 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UsePrefetchQueryOptions.md @@ -0,0 +1,40 @@ +--- +id: UsePrefetchQueryOptions +title: UsePrefetchQueryOptions +--- + +# Interface: UsePrefetchQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:54 + +## Extends + +- `OmitKeyof`\<`FetchQueryOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>, `"queryFn"`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +## Properties + +### queryFn? + +```ts +optional queryFn: QueryFunction; +``` + +Defined in: packages/octane-query/src/types.ts:63 diff --git a/docs/framework/octane/reference/interfaces/UseQueryOptions.md b/docs/framework/octane/reference/interfaces/UseQueryOptions.md new file mode 100644 index 00000000000..cdd1d84918e --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseQueryOptions.md @@ -0,0 +1,49 @@ +--- +id: UseQueryOptions +title: UseQueryOptions +--- + +# Interface: UseQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:70 + +## Extends + +- `OmitKeyof`\<[`UseBaseQueryOptions`](UseBaseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryFnData`, `TQueryKey`\>, `"suspense"`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +## Properties + +### subscribed? + +```ts +optional subscribed: boolean; +``` + +Defined in: packages/octane-query/src/types.ts:51 + +Set this to `false` to unsubscribe this observer from updates to the query cache. +Defaults to `true`. + +#### Inherited from + +```ts +OmitKeyof.subscribed +``` diff --git a/docs/framework/octane/reference/interfaces/UseSuspenseInfiniteQueryOptions.md b/docs/framework/octane/reference/interfaces/UseSuspenseInfiniteQueryOptions.md new file mode 100644 index 00000000000..0988ad117e8 --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseSuspenseInfiniteQueryOptions.md @@ -0,0 +1,63 @@ +--- +id: UseSuspenseInfiniteQueryOptions +title: UseSuspenseInfiniteQueryOptions +--- + +# Interface: UseSuspenseInfiniteQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:133 + +## Extends + +- `OmitKeyof`\<[`UseInfiniteQueryOptions`](UseInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\>, `"queryFn"` \| `"enabled"` \| `"throwOnError"` \| `"placeholderData"`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` + +## Properties + +### queryFn? + +```ts +optional queryFn: QueryFunction; +``` + +Defined in: packages/octane-query/src/types.ts:143 + +*** + +### subscribed? + +```ts +optional subscribed: boolean; +``` + +Defined in: packages/octane-query/src/types.ts:128 + +Set this to `false` to unsubscribe this observer from updates to the query cache. +Defaults to `true`. + +#### Inherited from + +```ts +OmitKeyof.subscribed +``` diff --git a/docs/framework/octane/reference/interfaces/UseSuspenseQueryOptions.md b/docs/framework/octane/reference/interfaces/UseSuspenseQueryOptions.md new file mode 100644 index 00000000000..ba692b0845c --- /dev/null +++ b/docs/framework/octane/reference/interfaces/UseSuspenseQueryOptions.md @@ -0,0 +1,59 @@ +--- +id: UseSuspenseQueryOptions +title: UseSuspenseQueryOptions +--- + +# Interface: UseSuspenseQueryOptions\ + +Defined in: packages/octane-query/src/types.ts:86 + +## Extends + +- `OmitKeyof`\<[`UseQueryOptions`](UseQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>, `"queryFn"` \| `"enabled"` \| `"throwOnError"` \| `"placeholderData"`\> + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +## Properties + +### queryFn? + +```ts +optional queryFn: QueryFunction; +``` + +Defined in: packages/octane-query/src/types.ts:95 + +*** + +### subscribed? + +```ts +optional subscribed: boolean; +``` + +Defined in: packages/octane-query/src/types.ts:51 + +Set this to `false` to unsubscribe this observer from updates to the query cache. +Defaults to `true`. + +#### Inherited from + +```ts +OmitKeyof.subscribed +``` diff --git a/docs/framework/octane/reference/type-aliases/AnyUseBaseQueryOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseBaseQueryOptions.md new file mode 100644 index 00000000000..60a06d14f5c --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseBaseQueryOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseBaseQueryOptions +title: AnyUseBaseQueryOptions +--- + +# Type Alias: AnyUseBaseQueryOptions + +```ts +type AnyUseBaseQueryOptions = UseBaseQueryOptions; +``` + +Defined in: packages/octane-query/src/types.ts:27 diff --git a/docs/framework/octane/reference/type-aliases/AnyUseInfiniteQueryOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseInfiniteQueryOptions.md new file mode 100644 index 00000000000..4898cc0f069 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseInfiniteQueryOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseInfiniteQueryOptions +title: AnyUseInfiniteQueryOptions +--- + +# Type Alias: AnyUseInfiniteQueryOptions + +```ts +type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions; +``` + +Defined in: packages/octane-query/src/types.ts:101 diff --git a/docs/framework/octane/reference/type-aliases/AnyUseMutationOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseMutationOptions.md new file mode 100644 index 00000000000..e32b0001531 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseMutationOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseMutationOptions +title: AnyUseMutationOptions +--- + +# Type Alias: AnyUseMutationOptions + +```ts +type AnyUseMutationOptions = UseMutationOptions; +``` + +Defined in: packages/octane-query/src/types.ts:196 diff --git a/docs/framework/octane/reference/type-aliases/AnyUseQueryOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseQueryOptions.md new file mode 100644 index 00000000000..f4b2100c16b --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseQueryOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseQueryOptions +title: AnyUseQueryOptions +--- + +# Type Alias: AnyUseQueryOptions + +```ts +type AnyUseQueryOptions = UseQueryOptions; +``` + +Defined in: packages/octane-query/src/types.ts:69 diff --git a/docs/framework/octane/reference/type-aliases/AnyUseSuspenseInfiniteQueryOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseSuspenseInfiniteQueryOptions.md new file mode 100644 index 00000000000..7d8095797dd --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseSuspenseInfiniteQueryOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseSuspenseInfiniteQueryOptions +title: AnyUseSuspenseInfiniteQueryOptions +--- + +# Type Alias: AnyUseSuspenseInfiniteQueryOptions + +```ts +type AnyUseSuspenseInfiniteQueryOptions = UseSuspenseInfiniteQueryOptions; +``` + +Defined in: packages/octane-query/src/types.ts:131 diff --git a/docs/framework/octane/reference/type-aliases/AnyUseSuspenseQueryOptions.md b/docs/framework/octane/reference/type-aliases/AnyUseSuspenseQueryOptions.md new file mode 100644 index 00000000000..da414c634b6 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/AnyUseSuspenseQueryOptions.md @@ -0,0 +1,12 @@ +--- +id: AnyUseSuspenseQueryOptions +title: AnyUseSuspenseQueryOptions +--- + +# Type Alias: AnyUseSuspenseQueryOptions + +```ts +type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions; +``` + +Defined in: packages/octane-query/src/types.ts:80 diff --git a/docs/framework/octane/reference/type-aliases/DefinedInitialDataInfiniteOptions.md b/docs/framework/octane/reference/type-aliases/DefinedInitialDataInfiniteOptions.md new file mode 100644 index 00000000000..041dc3deaaf --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/DefinedInitialDataInfiniteOptions.md @@ -0,0 +1,45 @@ +--- +id: DefinedInitialDataInfiniteOptions +title: DefinedInitialDataInfiniteOptions +--- + +# Type Alias: DefinedInitialDataInfiniteOptions\ + +```ts +type DefinedInitialDataInfiniteOptions = UseInfiniteQueryOptions & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:57 + +## Type Declaration + +### initialData + +```ts +initialData: + | NonUndefinedGuard> + | () => NonUndefinedGuard> + | undefined; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `InfiniteData`\<`TQueryFnData`\> + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/DefinedInitialDataOptions.md b/docs/framework/octane/reference/type-aliases/DefinedInitialDataOptions.md new file mode 100644 index 00000000000..556f75939b2 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/DefinedInitialDataOptions.md @@ -0,0 +1,46 @@ +--- +id: DefinedInitialDataOptions +title: DefinedInitialDataOptions +--- + +# Type Alias: DefinedInitialDataOptions\ + +```ts +type DefinedInitialDataOptions = Omit, "queryFn"> & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:41 + +## Type Declaration + +### initialData + +```ts +initialData: + | NonUndefinedGuard +| () => NonUndefinedGuard; +``` + +### queryFn? + +```ts +optional queryFn: QueryFunction; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` diff --git a/docs/framework/octane/reference/type-aliases/DefinedUseInfiniteQueryResult.md b/docs/framework/octane/reference/type-aliases/DefinedUseInfiniteQueryResult.md new file mode 100644 index 00000000000..49c4e0033fa --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/DefinedUseInfiniteQueryResult.md @@ -0,0 +1,22 @@ +--- +id: DefinedUseInfiniteQueryResult +title: DefinedUseInfiniteQueryResult +--- + +# Type Alias: DefinedUseInfiniteQueryResult\ + +```ts +type DefinedUseInfiniteQueryResult = DefinedInfiniteQueryObserverResult; +``` + +Defined in: packages/octane-query/src/types.ts:183 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/DefinedUseQueryResult.md b/docs/framework/octane/reference/type-aliases/DefinedUseQueryResult.md new file mode 100644 index 00000000000..efcb72988c5 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/DefinedUseQueryResult.md @@ -0,0 +1,22 @@ +--- +id: DefinedUseQueryResult +title: DefinedUseQueryResult +--- + +# Type Alias: DefinedUseQueryResult\ + +```ts +type DefinedUseQueryResult = DefinedQueryObserverResult; +``` + +Defined in: packages/octane-query/src/types.ts:173 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/QueriesOptions.md b/docs/framework/octane/reference/type-aliases/QueriesOptions.md new file mode 100644 index 00000000000..f5ef47df08e --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueriesOptions.md @@ -0,0 +1,28 @@ +--- +id: QueriesOptions +title: QueriesOptions +--- + +# Type Alias: QueriesOptions\ + +```ts +type QueriesOptions = TDepth["length"] extends MAXIMUM_DEPTH ? UseQueryOptionsForUseQueries[] : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseQueryOptionsForUseQueries] : T extends [infer Head, ...(infer Tails)] ? QueriesOptions<[...Tails], [...TResults, GetUseQueryOptionsForUseQueries], [...TDepth, 1]> : ReadonlyArray extends T ? T : T extends UseQueryOptionsForUseQueries[] ? UseQueryOptionsForUseQueries[] : UseQueryOptionsForUseQueries[]; +``` + +Defined in: packages/octane-query/src/queries-types.ts:126 + +QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param + +## Type Parameters + +### T + +`T` *extends* `any`[] + +### TResults + +`TResults` *extends* `any`[] = \[\] + +### TDepth + +`TDepth` *extends* `ReadonlyArray`\<`number`\> = \[\] diff --git a/docs/framework/octane/reference/type-aliases/QueriesResults.md b/docs/framework/octane/reference/type-aliases/QueriesResults.md new file mode 100644 index 00000000000..ac721e440ab --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueriesResults.md @@ -0,0 +1,28 @@ +--- +id: QueriesResults +title: QueriesResults +--- + +# Type Alias: QueriesResults\ + +```ts +type QueriesResults = TDepth["length"] extends MAXIMUM_DEPTH ? UseQueryResult[] : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseQueryResult] : T extends [infer Head, ...(infer Tails)] ? QueriesResults<[...Tails], [...TResults, GetUseQueryResult], [...TDepth, 1]> : { [K in keyof T]: GetUseQueryResult }; +``` + +Defined in: packages/octane-query/src/queries-types.ts:168 + +QueriesResults reducer recursively maps type param to results + +## Type Parameters + +### T + +`T` *extends* `any`[] + +### TResults + +`TResults` *extends* `any`[] = \[\] + +### TDepth + +`TDepth` *extends* `ReadonlyArray`\<`number`\> = \[\] diff --git a/docs/framework/octane/reference/type-aliases/QueryErrorClearResetFunction.md b/docs/framework/octane/reference/type-aliases/QueryErrorClearResetFunction.md new file mode 100644 index 00000000000..565c62765d0 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueryErrorClearResetFunction.md @@ -0,0 +1,16 @@ +--- +id: QueryErrorClearResetFunction +title: QueryErrorClearResetFunction +--- + +# Type Alias: QueryErrorClearResetFunction() + +```ts +type QueryErrorClearResetFunction = () => void; +``` + +Defined in: packages/octane-query/src/types.ts:274 + +## Returns + +`void` diff --git a/docs/framework/octane/reference/type-aliases/QueryErrorIsResetFunction.md b/docs/framework/octane/reference/type-aliases/QueryErrorIsResetFunction.md new file mode 100644 index 00000000000..2ee160af3e3 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueryErrorIsResetFunction.md @@ -0,0 +1,16 @@ +--- +id: QueryErrorIsResetFunction +title: QueryErrorIsResetFunction +--- + +# Type Alias: QueryErrorIsResetFunction() + +```ts +type QueryErrorIsResetFunction = () => boolean; +``` + +Defined in: packages/octane-query/src/types.ts:273 + +## Returns + +`boolean` diff --git a/docs/framework/octane/reference/type-aliases/QueryErrorResetBoundaryFunction.md b/docs/framework/octane/reference/type-aliases/QueryErrorResetBoundaryFunction.md new file mode 100644 index 00000000000..3ee99074fb7 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueryErrorResetBoundaryFunction.md @@ -0,0 +1,22 @@ +--- +id: QueryErrorResetBoundaryFunction +title: QueryErrorResetBoundaryFunction +--- + +# Type Alias: QueryErrorResetBoundaryFunction() + +```ts +type QueryErrorResetBoundaryFunction = (value) => unknown; +``` + +Defined in: packages/octane-query/src/types.ts:282 + +## Parameters + +### value + +[`QueryErrorResetBoundaryValue`](../interfaces/QueryErrorResetBoundaryValue.md) + +## Returns + +`unknown` diff --git a/docs/framework/octane/reference/type-aliases/QueryErrorResetFunction.md b/docs/framework/octane/reference/type-aliases/QueryErrorResetFunction.md new file mode 100644 index 00000000000..be4e4f96a87 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/QueryErrorResetFunction.md @@ -0,0 +1,16 @@ +--- +id: QueryErrorResetFunction +title: QueryErrorResetFunction +--- + +# Type Alias: QueryErrorResetFunction() + +```ts +type QueryErrorResetFunction = () => void; +``` + +Defined in: packages/octane-query/src/types.ts:272 + +## Returns + +`void` diff --git a/docs/framework/octane/reference/type-aliases/SuspenseQueriesOptions.md b/docs/framework/octane/reference/type-aliases/SuspenseQueriesOptions.md new file mode 100644 index 00000000000..acd37543813 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/SuspenseQueriesOptions.md @@ -0,0 +1,28 @@ +--- +id: SuspenseQueriesOptions +title: SuspenseQueriesOptions +--- + +# Type Alias: SuspenseQueriesOptions\ + +```ts +type SuspenseQueriesOptions = TDepth["length"] extends MAXIMUM_DEPTH ? UseSuspenseQueryOptions[] : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseSuspenseQueryOptions] : T extends [infer Head, ...(infer Tails)] ? SuspenseQueriesOptions<[...Tails], [...TResults, GetUseSuspenseQueryOptions], [...TDepth, 1]> : unknown[] extends T ? T : T extends UseSuspenseQueryOptions[] ? UseSuspenseQueryOptions[] : UseSuspenseQueryOptions[]; +``` + +Defined in: packages/octane-query/src/suspense-queries-types.ts:108 + +SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param + +## Type Parameters + +### T + +`T` *extends* `any`[] + +### TResults + +`TResults` *extends* `any`[] = \[\] + +### TDepth + +`TDepth` *extends* `ReadonlyArray`\<`number`\> = \[\] diff --git a/docs/framework/octane/reference/type-aliases/SuspenseQueriesResults.md b/docs/framework/octane/reference/type-aliases/SuspenseQueriesResults.md new file mode 100644 index 00000000000..6681e596544 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/SuspenseQueriesResults.md @@ -0,0 +1,28 @@ +--- +id: SuspenseQueriesResults +title: SuspenseQueriesResults +--- + +# Type Alias: SuspenseQueriesResults\ + +```ts +type SuspenseQueriesResults = TDepth["length"] extends MAXIMUM_DEPTH ? UseSuspenseQueryResult[] : T extends [] ? [] : T extends [infer Head] ? [...TResults, GetUseSuspenseQueryResult] : T extends [infer Head, ...(infer Tails)] ? SuspenseQueriesResults<[...Tails], [...TResults, GetUseSuspenseQueryResult], [...TDepth, 1]> : { [K in keyof T]: GetUseSuspenseQueryResult }; +``` + +Defined in: packages/octane-query/src/suspense-queries-types.ts:145 + +SuspenseQueriesResults reducer recursively maps type param to results + +## Type Parameters + +### T + +`T` *extends* `any`[] + +### TResults + +`TResults` *extends* `any`[] = \[\] + +### TDepth + +`TDepth` *extends* `ReadonlyArray`\<`number`\> = \[\] diff --git a/docs/framework/octane/reference/type-aliases/UndefinedInitialDataInfiniteOptions.md b/docs/framework/octane/reference/type-aliases/UndefinedInitialDataInfiniteOptions.md new file mode 100644 index 00000000000..32a19efaa97 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UndefinedInitialDataInfiniteOptions.md @@ -0,0 +1,44 @@ +--- +id: UndefinedInitialDataInfiniteOptions +title: UndefinedInitialDataInfiniteOptions +--- + +# Type Alias: UndefinedInitialDataInfiniteOptions\ + +```ts +type UndefinedInitialDataInfiniteOptions = UseInfiniteQueryOptions & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:14 + +## Type Declaration + +### initialData? + +```ts +optional initialData: + | NonUndefinedGuard> +| InitialDataFunction>>; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `InfiniteData`\<`TQueryFnData`\> + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/UndefinedInitialDataOptions.md b/docs/framework/octane/reference/type-aliases/UndefinedInitialDataOptions.md new file mode 100644 index 00000000000..53a2e3d2c24 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UndefinedInitialDataOptions.md @@ -0,0 +1,40 @@ +--- +id: UndefinedInitialDataOptions +title: UndefinedInitialDataOptions +--- + +# Type Alias: UndefinedInitialDataOptions\ + +```ts +type UndefinedInitialDataOptions = UseQueryOptions & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:14 + +## Type Declaration + +### initialData? + +```ts +optional initialData: + | InitialDataFunction> +| NonUndefinedGuard; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` diff --git a/docs/framework/octane/reference/type-aliases/UnusedSkipTokenInfiniteOptions.md b/docs/framework/octane/reference/type-aliases/UnusedSkipTokenInfiniteOptions.md new file mode 100644 index 00000000000..36083495628 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UnusedSkipTokenInfiniteOptions.md @@ -0,0 +1,42 @@ +--- +id: UnusedSkipTokenInfiniteOptions +title: UnusedSkipTokenInfiniteOptions +--- + +# Type Alias: UnusedSkipTokenInfiniteOptions\ + +```ts +type UnusedSkipTokenInfiniteOptions = OmitKeyof, "queryFn"> & object; +``` + +Defined in: packages/octane-query/src/infiniteQueryOptions.ts:35 + +## Type Declaration + +### queryFn? + +```ts +optional queryFn: Exclude["queryFn"], SkipToken | undefined>; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `InfiniteData`\<`TQueryFnData`\> + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/UnusedSkipTokenOptions.md b/docs/framework/octane/reference/type-aliases/UnusedSkipTokenOptions.md new file mode 100644 index 00000000000..1e490ada1f5 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UnusedSkipTokenOptions.md @@ -0,0 +1,38 @@ +--- +id: UnusedSkipTokenOptions +title: UnusedSkipTokenOptions +--- + +# Type Alias: UnusedSkipTokenOptions\ + +```ts +type UnusedSkipTokenOptions = OmitKeyof, "queryFn"> & object; +``` + +Defined in: packages/octane-query/src/queryOptions.ts:26 + +## Type Declaration + +### queryFn? + +```ts +optional queryFn: Exclude["queryFn"], SkipToken | undefined>; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` diff --git a/docs/framework/octane/reference/type-aliases/UseBaseMutationResult.md b/docs/framework/octane/reference/type-aliases/UseBaseMutationResult.md new file mode 100644 index 00000000000..29216799f85 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseBaseMutationResult.md @@ -0,0 +1,40 @@ +--- +id: UseBaseMutationResult +title: UseBaseMutationResult +--- + +# Type Alias: UseBaseMutationResult\ + +```ts +type UseBaseMutationResult = Override, { + mutate: UseMutateFunction; +}> & object; +``` + +Defined in: packages/octane-query/src/types.ts:225 + +## Type Declaration + +### mutateAsync + +```ts +mutateAsync: UseMutateAsyncFunction; +``` + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TVariables + +`TVariables` = `unknown` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/UseBaseQueryResult.md b/docs/framework/octane/reference/type-aliases/UseBaseQueryResult.md new file mode 100644 index 00000000000..377fbde19e4 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseBaseQueryResult.md @@ -0,0 +1,22 @@ +--- +id: UseBaseQueryResult +title: UseBaseQueryResult +--- + +# Type Alias: UseBaseQueryResult\ + +```ts +type UseBaseQueryResult = QueryObserverResult; +``` + +Defined in: packages/octane-query/src/types.ts:155 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/UseInfiniteQueryResult.md b/docs/framework/octane/reference/type-aliases/UseInfiniteQueryResult.md new file mode 100644 index 00000000000..117307752d1 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseInfiniteQueryResult.md @@ -0,0 +1,22 @@ +--- +id: UseInfiniteQueryResult +title: UseInfiniteQueryResult +--- + +# Type Alias: UseInfiniteQueryResult\ + +```ts +type UseInfiniteQueryResult = InfiniteQueryObserverResult; +``` + +Defined in: packages/octane-query/src/types.ts:178 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/UseMutateAsyncFunction.md b/docs/framework/octane/reference/type-aliases/UseMutateAsyncFunction.md new file mode 100644 index 00000000000..8ab1e16c4fa --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseMutateAsyncFunction.md @@ -0,0 +1,30 @@ +--- +id: UseMutateAsyncFunction +title: UseMutateAsyncFunction +--- + +# Type Alias: UseMutateAsyncFunction\ + +```ts +type UseMutateAsyncFunction = MutateFunction; +``` + +Defined in: packages/octane-query/src/types.ts:218 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TVariables + +`TVariables` = `void` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/UseMutateFunction.md b/docs/framework/octane/reference/type-aliases/UseMutateFunction.md new file mode 100644 index 00000000000..8d1cdf00c78 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseMutateFunction.md @@ -0,0 +1,40 @@ +--- +id: UseMutateFunction +title: UseMutateFunction +--- + +# Type Alias: UseMutateFunction()\ + +```ts +type UseMutateFunction = (...args) => void; +``` + +Defined in: packages/octane-query/src/types.ts:207 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TVariables + +`TVariables` = `void` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` + +## Parameters + +### args + +...`Parameters`\<`MutateFunction`\<`TData`, `TError`, `TVariables`, `TOnMutateResult`\>\> + +## Returns + +`void` diff --git a/docs/framework/octane/reference/type-aliases/UseMutationResult.md b/docs/framework/octane/reference/type-aliases/UseMutationResult.md new file mode 100644 index 00000000000..15a33c9fff0 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseMutationResult.md @@ -0,0 +1,30 @@ +--- +id: UseMutationResult +title: UseMutationResult +--- + +# Type Alias: UseMutationResult\ + +```ts +type UseMutationResult = UseBaseMutationResult; +``` + +Defined in: packages/octane-query/src/types.ts:242 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TVariables + +`TVariables` = `unknown` + +### TOnMutateResult + +`TOnMutateResult` = `unknown` diff --git a/docs/framework/octane/reference/type-aliases/UseQueryResult.md b/docs/framework/octane/reference/type-aliases/UseQueryResult.md new file mode 100644 index 00000000000..346e9814bd6 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseQueryResult.md @@ -0,0 +1,22 @@ +--- +id: UseQueryResult +title: UseQueryResult +--- + +# Type Alias: UseQueryResult\ + +```ts +type UseQueryResult = UseBaseQueryResult; +``` + +Defined in: packages/octane-query/src/types.ts:160 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/UseSuspenseInfiniteQueryResult.md b/docs/framework/octane/reference/type-aliases/UseSuspenseInfiniteQueryResult.md new file mode 100644 index 00000000000..f7e8c495007 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseSuspenseInfiniteQueryResult.md @@ -0,0 +1,22 @@ +--- +id: UseSuspenseInfiniteQueryResult +title: UseSuspenseInfiniteQueryResult +--- + +# Type Alias: UseSuspenseInfiniteQueryResult\ + +```ts +type UseSuspenseInfiniteQueryResult = OmitKeyof, "isPlaceholderData" | "promise">; +``` + +Defined in: packages/octane-query/src/types.ts:188 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/type-aliases/UseSuspenseQueryResult.md b/docs/framework/octane/reference/type-aliases/UseSuspenseQueryResult.md new file mode 100644 index 00000000000..06fae636577 --- /dev/null +++ b/docs/framework/octane/reference/type-aliases/UseSuspenseQueryResult.md @@ -0,0 +1,22 @@ +--- +id: UseSuspenseQueryResult +title: UseSuspenseQueryResult +--- + +# Type Alias: UseSuspenseQueryResult\ + +```ts +type UseSuspenseQueryResult = DistributiveOmit, "isPlaceholderData" | "promise">; +``` + +Defined in: packages/octane-query/src/types.ts:165 + +## Type Parameters + +### TData + +`TData` = `unknown` + +### TError + +`TError` = `DefaultError` diff --git a/docs/framework/octane/reference/variables/HydrationBoundary.md b/docs/framework/octane/reference/variables/HydrationBoundary.md new file mode 100644 index 00000000000..4b8f67ec988 --- /dev/null +++ b/docs/framework/octane/reference/variables/HydrationBoundary.md @@ -0,0 +1,12 @@ +--- +id: HydrationBoundary +title: HydrationBoundary +--- + +# Variable: HydrationBoundary + +```ts +const HydrationBoundary: ComponentBody; +``` + +Defined in: packages/octane-query/src/HydrationBoundary.tsrx.d.ts:4 diff --git a/docs/framework/octane/reference/variables/IsRestoringProvider.md b/docs/framework/octane/reference/variables/IsRestoringProvider.md new file mode 100644 index 00000000000..bf4b4de0963 --- /dev/null +++ b/docs/framework/octane/reference/variables/IsRestoringProvider.md @@ -0,0 +1,15 @@ +--- +id: IsRestoringProvider +title: IsRestoringProvider +--- + +# Variable: IsRestoringProvider + +```ts +const IsRestoringProvider: ComponentBody<{ + children?: any; + value: boolean; +}, any> = IsRestoringContext.Provider; +``` + +Defined in: packages/octane-query/src/isRestoring.ts:13 diff --git a/docs/framework/octane/reference/variables/QueryClientContext.md b/docs/framework/octane/reference/variables/QueryClientContext.md new file mode 100644 index 00000000000..542c842dfb8 --- /dev/null +++ b/docs/framework/octane/reference/variables/QueryClientContext.md @@ -0,0 +1,12 @@ +--- +id: QueryClientContext +title: QueryClientContext +--- + +# Variable: QueryClientContext + +```ts +const QueryClientContext: Context; +``` + +Defined in: packages/octane-query/src/context.ts:6 diff --git a/docs/framework/octane/reference/variables/QueryClientProvider.md b/docs/framework/octane/reference/variables/QueryClientProvider.md new file mode 100644 index 00000000000..8f3b3408799 --- /dev/null +++ b/docs/framework/octane/reference/variables/QueryClientProvider.md @@ -0,0 +1,12 @@ +--- +id: QueryClientProvider +title: QueryClientProvider +--- + +# Variable: QueryClientProvider + +```ts +const QueryClientProvider: ComponentBody; +``` + +Defined in: packages/octane-query/src/QueryClientProvider.tsrx.d.ts:4 diff --git a/docs/framework/octane/reference/variables/QueryErrorResetBoundary.md b/docs/framework/octane/reference/variables/QueryErrorResetBoundary.md new file mode 100644 index 00000000000..38a520150e1 --- /dev/null +++ b/docs/framework/octane/reference/variables/QueryErrorResetBoundary.md @@ -0,0 +1,12 @@ +--- +id: QueryErrorResetBoundary +title: QueryErrorResetBoundary +--- + +# Variable: QueryErrorResetBoundary + +```ts +const QueryErrorResetBoundary: QueryErrorResetBoundaryComponent; +``` + +Defined in: packages/octane-query/src/QueryErrorResetBoundary.tsrx.d.ts:11 diff --git a/knip.json b/knip.json index 2bbf42195f9..f72adf480b3 100644 --- a/knip.json +++ b/knip.json @@ -1,6 +1,6 @@ { "$schema": "https://unpkg.com/knip@6/schema.json", - "ignore": ["scripts/*.{j,t}s", "**/root.*.config.*", "**/ts-fixture/file.ts"], + "ignore": ["scripts/*.{j,t}s", "**/ts-fixture/file.ts"], "ignoreDependencies": [ "@types/react", "@types/react-dom", @@ -8,6 +8,7 @@ "react-dom" ], "ignoreWorkspaces": ["examples/**", "integrations/**"], + "tags": ["-knipignore"], "workspaces": { "packages/angular-query-experimental": { "entry": [ @@ -22,6 +23,12 @@ "packages/lit-query": { "ignore": ["src/tests/**"] }, + "packages/octane-query": { + "entry": [ + "tests/_fixtures/async-diff.tsrx", + "tests/_fixtures/cached-diff.tsrx" + ] + }, "packages/vue-query": { "ignoreDependencies": ["vue2", "vue2.7"] } diff --git a/package.json b/package.json index 80e2e88104a..53f5ae012f8 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test:pr": "nx affected --targets=test:sherif,test:knip,test:docs,test:eslint,test:lib,test:types,test:build,build", "test:ci": "nx run-many --targets=test:sherif,test:knip,test:docs,test:eslint,test:lib,test:types,test:build,build", "test:eslint": "nx affected --target=test:eslint", - "test:sherif": "sherif -i typescript -p \"./integrations/*\" -p \"./examples/*\"", + "test:sherif": "sherif -i typescript -i vite@^8.0.16 -p \"./integrations/*\" -p \"./examples/*\"", "test:size": "size-limit", "test:lib": "nx affected --target=test:lib --exclude=examples/**", "test:lib:dev": "pnpm run test:lib && nx watch --all -- pnpm run test:lib", @@ -62,7 +62,7 @@ "eslint": "^9.36.0", "eslint-plugin-react-hooks": "^6.1.1", "jsdom": "^27.0.0", - "knip": "^6.0.2", + "knip": "^6.29.0", "markdown-link-extractor": "^4.0.2", "nx": "22.1.3", "premove": "^4.0.0", diff --git a/packages/lit-query/src/createQueriesController.ts b/packages/lit-query/src/createQueriesController.ts index 2af3b312004..e852f735160 100644 --- a/packages/lit-query/src/createQueriesController.ts +++ b/packages/lit-query/src/createQueriesController.ts @@ -127,7 +127,7 @@ type GetCreateQueriesResult = T extends { > : QueryObserverResult -export type CreateQueriesOptions< +type CreateQueriesOptions< T extends Array, TResults extends Array = [], TDepth extends ReadonlyArray = [], diff --git a/packages/octane-query/README.md b/packages/octane-query/README.md new file mode 100644 index 00000000000..ef55489875a --- /dev/null +++ b/packages/octane-query/README.md @@ -0,0 +1,71 @@ +# TanStack Query for Octane + +Official Octane bindings for [TanStack Query](https://tanstack.com/query). +The package reuses `@tanstack/query-core` and exposes the same query, mutation, +suspense, hydration, and error-reset primitives as the React adapter through +Octane hooks and components. It requires Octane 0.1.13 or newer. + +```tsrx +import { + QueryClient, + QueryClientProvider, + useQuery, +} from '@tanstack/octane-query' + +const queryClient = new QueryClient() + +function Todos() @{ + const query = useQuery({ + queryKey: ['todos'], + queryFn: fetchTodos, + }) + + @if (query.isPending) { + {'Loading'} + } @else if (query.isError) { + {query.error.message} + } @else { +
    {query.data as unknown}
+ } +} + +function App() @{ + + + +} +``` + +## API coverage + +- Queries: `useQuery`, `useInfiniteQuery`, `useSuspenseQuery`, + `useSuspenseInfiniteQuery`, `useQueries`, `useSuspenseQueries`, + `usePrefetchQuery`, and `usePrefetchInfiniteQuery` +- Mutations and status: `useMutation`, `useMutationState`, `useIsFetching`, and + `useIsMutating` +- Context and boundaries: `QueryClientProvider`, `useQueryClient`, + `QueryClientContext`, `HydrationBoundary`, `IsRestoringProvider`, + `useIsRestoring`, `QueryErrorResetBoundary`, and + `useQueryErrorResetBoundary` +- Query Core: every export from `@tanstack/query-core`, including + `QueryClient`, `dehydrate`, and `hydrate` + +The separate React companion packages, including React Query Devtools and +`@tanstack/react-query-persist-client`, are not part of this adapter. + +## Suspense, errors, and hydration + +Suspense hooks integrate with Octane's `use(thenable)` semantics. Catch pending +and error states with Octane's `Suspense` and `ErrorBoundary` components or its +`@pending` and `@catch` directives. Use `QueryErrorResetBoundary` or +`useQueryErrorResetBoundary` when a retry must reset a failed query. + +For server rendering, create a `QueryClient` per request. The adapter re-exports +Query Core's `dehydrate` and `hydrate`, and `HydrationBoundary` also accepts +streamed dehydrated queries. `IsRestoringProvider` can pause fetching while a +persisted cache is restored. + +The package publishes TSRX source so the Octane compiler can produce the +correct client and server output. Its manifest marks the binding hooks as +manually slotted; consumers should use the standard Octane Vite integration. +It is a compiler-source package, not a direct Node.js runtime entry point. diff --git a/packages/octane-query/octane-compiler.d.ts b/packages/octane-query/octane-compiler.d.ts new file mode 100644 index 00000000000..e8d69c1aa91 --- /dev/null +++ b/packages/octane-query/octane-compiler.d.ts @@ -0,0 +1,22 @@ +declare module 'octane/compiler' { + export interface SourceMap { + version: number + sources: Array + sourcesContent?: Array + names: Array + mappings: string + file?: string + sourceRoot?: string + } + + export interface CompileResult { + code: string + map?: SourceMap | null + } + + export function compile( + source: string, + filename: string, + options?: { mode?: 'client' | 'server' }, + ): CompileResult +} diff --git a/packages/octane-query/package.json b/packages/octane-query/package.json new file mode 100644 index 00000000000..fac0b7be637 --- /dev/null +++ b/packages/octane-query/package.json @@ -0,0 +1,86 @@ +{ + "name": "@tanstack/octane-query", + "version": "5.101.4", + "description": "Hooks for managing, caching and syncing asynchronous and remote data in Octane", + "author": "tannerlinsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/TanStack/query.git", + "directory": "packages/octane-query" + }, + "homepage": "https://tanstack.com/query", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "octane", + "query", + "tanstack" + ], + "scripts": { + "clean": "premove ./coverage ./dist-ts", + "compile": "tsc --build", + "test:eslint": "eslint --concurrency=auto --ignore-pattern \"tests/differential/.react-cache/**\" ./src ./tests ./scripts", + "test:types": "npm-run-all --serial test:types:*", + "test:types:ts54": "node ../../node_modules/typescript54/lib/tsc.js --build tsconfig.legacy.json", + "test:types:ts55": "node ../../node_modules/typescript55/lib/tsc.js --build tsconfig.legacy.json", + "test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js --build tsconfig.legacy.json", + "test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js --build tsconfig.legacy.json", + "test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js --build tsconfig.legacy.json", + "test:types:ts59": "node ../../node_modules/typescript59/lib/tsc.js --build tsconfig.legacy.json", + "test:types:tscurrent": "tsc --build", + "test:types:ts60": "node ../../node_modules/typescript60/lib/tsc.js --build tsconfig.legacy.json", + "test:lib": "vitest", + "test:lib:dev": "pnpm run test:lib --watch", + "test:build": "publint --strict && node scripts/check-package.mjs && node scripts/check-tsrx.mjs", + "build": "tsc --noEmit -p tsconfig.prod.json && node scripts/check-tsrx.mjs" + }, + "type": "module", + "types": "./src/index.ts", + "module": "./src/index.ts", + "exports": { + ".": { + "@tanstack/custom-condition": "./src/index.ts", + "types": "./src/index.ts", + "module": "./src/index.ts" + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "files": [ + "src", + "!src/__tests__", + "README.md" + ], + "engines": { + "node": ">=22" + }, + "octane": { + "hookSlots": { + "manual": [ + "src" + ] + } + }, + "dependencies": { + "@tanstack/query-core": "workspace:*" + }, + "devDependencies": { + "@tanstack/react-query": "workspace:*", + "@tsrx/react": "^0.2.45", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "esbuild": "^0.27.2", + "npm-run-all2": "^5.0.0", + "octane": "catalog:", + "react": "^19.2.1", + "react-dom": "^19.2.1", + "vite": "^8.0.16", + "vitest": "^4.0.18" + }, + "peerDependencies": { + "octane": "^0.1.13" + } +} diff --git a/packages/octane-query/scripts/check-package.mjs b/packages/octane-query/scripts/check-package.mjs new file mode 100644 index 00000000000..f72914d6cdc --- /dev/null +++ b/packages/octane-query/scripts/check-package.mjs @@ -0,0 +1,158 @@ +import { spawnSync } from 'node:child_process' +import { + mkdir, + mkdtemp, + readFile, + rename, + rm, + writeFile, +} from 'node:fs/promises' +import { dirname, isAbsolute, join } from 'node:path' +import { fileURLToPath } from 'node:url' +import process from 'node:process' +import { compile } from 'octane/compiler' +import { build } from 'vite' + +const packageRoot = fileURLToPath(new URL('..', import.meta.url)) +const temporaryDirectory = await mkdtemp(join(packageRoot, '.pack-smoke-')) +const packageManager = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm' + +function run(command, args) { + const result = spawnSync(command, args, { + cwd: packageRoot, + encoding: 'utf8', + }) + if (result.status !== 0) { + throw new Error(result.stderr || `${command} failed`) + } + return result.stdout +} + +try { + const packedResult = JSON.parse( + run(packageManager, [ + 'pack', + '--pack-destination', + temporaryDirectory, + '--json', + ]), + ) + const tarballPath = isAbsolute(packedResult.filename) + ? packedResult.filename + : join(temporaryDirectory, packedResult.filename) + run('tar', ['-xzf', tarballPath, '-C', temporaryDirectory]) + + const extractedRoot = join( + temporaryDirectory, + 'node_modules/@tanstack/octane-query', + ) + await mkdir(dirname(extractedRoot), { recursive: true }) + await rename(join(temporaryDirectory, 'package'), extractedRoot) + const packedManifest = JSON.parse( + await readFile(join(extractedRoot, 'package.json'), 'utf8'), + ) + const requiredFiles = [ + 'README.md', + 'src/index.ts', + 'src/HydrationBoundary.tsrx', + 'src/HydrationBoundary.tsrx.d.ts', + 'src/QueryClientProvider.tsrx', + 'src/QueryClientProvider.tsrx.d.ts', + 'src/QueryErrorResetBoundary.tsrx', + 'src/QueryErrorResetBoundary.tsrx.d.ts', + ] + + for (const file of requiredFiles) { + await readFile(join(extractedRoot, file)) + } + + if (packedResult.files.some((file) => file.path.includes('/__tests__/'))) { + throw new Error('Packed package contains source tests') + } + if (packedManifest.dependencies['@tanstack/query-core'] === 'workspace:*') { + throw new Error( + 'Packed manifest contains an unresolved workspace dependency', + ) + } + if ( + JSON.stringify(packedManifest.octane?.hookSlots?.manual) !== + JSON.stringify(['src']) + ) { + throw new Error( + 'Packed manifest is missing the manual Octane slot contract', + ) + } + + const consumerPath = join(temporaryDirectory, 'consumer.tsrx') + await writeFile( + consumerPath, + `import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/octane-query' + +const client = new QueryClient() + +function Result() @{ + const query = useQuery({ queryKey: ['pack-smoke'], queryFn: () => Promise.resolve('ok') }) + {String(query.data ?? query.status)} +} + +export function App() @{ + + + +} +`, + ) + + const compiledModes = new Set() + const compilerPlugin = { + name: 'tanstack-octane-query:pack-smoke-compiler', + enforce: 'pre', + transform(code, id, options) { + const filename = id.split('?', 1)[0] + if (!filename.endsWith('.tsrx')) { + return null + } + const mode = options?.ssr ? 'server' : 'client' + compiledModes.add(mode) + return compile(code, filename, { mode }) + }, + } + const sharedConfig = { + configFile: false, + logLevel: 'silent', + root: temporaryDirectory, + plugins: [compilerPlugin], + resolve: { + alias: { + '@tanstack/query-core': join(packageRoot, '../query-core/src/index.ts'), + }, + conditions: ['module'], + }, + } + + await build({ + ...sharedConfig, + build: { + write: false, + lib: { entry: consumerPath, formats: ['es'] }, + }, + }) + await build({ + ...sharedConfig, + build: { + write: false, + ssr: consumerPath, + }, + ssr: { + noExternal: ['@tanstack/octane-query'], + }, + }) + + if (!compiledModes.has('client') || !compiledModes.has('server')) { + throw new Error( + 'Packed consumer was not compiled in client and server modes', + ) + } +} finally { + await rm(temporaryDirectory, { force: true, recursive: true }) +} diff --git a/packages/octane-query/scripts/check-tsrx.mjs b/packages/octane-query/scripts/check-tsrx.mjs new file mode 100644 index 00000000000..892bdcfcb5c --- /dev/null +++ b/packages/octane-query/scripts/check-tsrx.mjs @@ -0,0 +1,17 @@ +import { readFile } from 'node:fs/promises' +import { fileURLToPath } from 'node:url' +import { compile } from 'octane/compiler' + +const componentUrls = [ + new URL('../src/HydrationBoundary.tsrx', import.meta.url), + new URL('../src/QueryClientProvider.tsrx', import.meta.url), + new URL('../src/QueryErrorResetBoundary.tsrx', import.meta.url), +] + +for (const componentUrl of componentUrls) { + const filename = fileURLToPath(componentUrl) + const source = await readFile(componentUrl, 'utf8') + + compile(source, filename, { mode: 'client' }) + compile(source, filename, { mode: 'server' }) +} diff --git a/packages/octane-query/src/HydrationBoundary.tsrx b/packages/octane-query/src/HydrationBoundary.tsrx new file mode 100644 index 00000000000..f30e3680c79 --- /dev/null +++ b/packages/octane-query/src/HydrationBoundary.tsrx @@ -0,0 +1,83 @@ +// HydrationBoundary — hydrates dehydrated query state into the client, then +// renders its children. Full port of react-query's HydrationBoundary.tsx: +// +// - NEW queries hydrate IN RENDER (after SSR, hydration must land before the +// children render; during a transition, prerender as much as is safe). +// - EXISTING queries hydrate in an EFFECT: during a transition we must not +// update live queries/observers until the transition commits — an aborted +// transition must not clobber committed data (octane has transitions, so +// upstream's abort-safety applies here too). +// - A dehydrated query counts as NEWER than the cache when its dataUpdatedAt +// is ahead, OR when it carries a streaming `promise` and was dehydrated +// after the cached data settled (`dehydratedAt > dataUpdatedAt`) — that's +// what lets later stream chunks re-hydrate an already-settled query. +import { useRef, useMemo, useEffect } from 'octane'; +import { hydrate } from '@tanstack/query-core'; +import { resolveClient } from './context.ts'; +import type { OctaneNode } from 'octane'; +import type { DehydratedState, HydrateOptions, QueryClient } from '@tanstack/query-core'; + +type HydrationBoundaryProps = { + state?: unknown; + options?: HydrateOptions; + queryClient?: QueryClient; + children?: OctaneNode; +}; + +export function HydrationBoundary(props: HydrationBoundaryProps) @{ + const client = resolveClient(props.queryClient); + const state = props.state; + + const optionsRef = useRef(props.options); + useEffect(() => { + optionsRef.current = props.options; + }); + + // "In render" on purpose (the memo is a perf cache, not a semantic barrier) — + // hydrate new queries now, queue existing ones for the commit effect. + const hydrationQueue = useMemo(() => { + if (state && typeof state === 'object') { + const queryCache = client.getQueryCache(); + const queries = (state as DehydratedState).queries || []; + + const newQueries = []; + const existingQueries = []; + for (const dehydratedQuery of queries) { + const existingQuery = queryCache.get(dehydratedQuery.queryHash); + if (!existingQuery) { + newQueries.push(dehydratedQuery); + } else { + const hydrationIsNewer = + dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt || + dehydratedQuery.promise && existingQuery.state.status !== 'pending' && + existingQuery.state.fetchStatus !== 'fetching' && + dehydratedQuery.dehydratedAt !== undefined && + dehydratedQuery.dehydratedAt > existingQuery.state.dataUpdatedAt; + if (hydrationIsNewer) { + existingQueries.push(dehydratedQuery); + } + } + } + + if (newQueries.length > 0) { + // hydrate() is idempotent for queries — safe to run in render. + hydrate(client, { queries: newQueries }, optionsRef.current); + } + if (existingQueries.length > 0) { + return existingQueries; + } + } + return undefined; + }, [client, state]); + + // Existing-query hydration lands at commit time (transition abort-safe). + useEffect(() => { + if (hydrationQueue) { + hydrate(client, { queries: hydrationQueue }, optionsRef.current); + } + }, [client, hydrationQueue]); + + <> + {props.children} + +} diff --git a/packages/octane-query/src/HydrationBoundary.tsrx.d.ts b/packages/octane-query/src/HydrationBoundary.tsrx.d.ts new file mode 100644 index 00000000000..2661827c23b --- /dev/null +++ b/packages/octane-query/src/HydrationBoundary.tsrx.d.ts @@ -0,0 +1,4 @@ +import type { ComponentBody } from 'octane' +import type { HydrationBoundaryProps } from './types' + +export declare const HydrationBoundary: ComponentBody diff --git a/packages/octane-query/src/QueryClientProvider.tsrx b/packages/octane-query/src/QueryClientProvider.tsrx new file mode 100644 index 00000000000..7073131c1d2 --- /dev/null +++ b/packages/octane-query/src/QueryClientProvider.tsrx @@ -0,0 +1,23 @@ +import { useEffect } from 'octane'; +import { QueryClientContext } from './context.ts'; +import type { OctaneNode } from 'octane'; +import type { QueryClient } from '@tanstack/query-core'; + +type QueryClientProviderProps = { + client: QueryClient; + children?: OctaneNode; +}; + +// QueryClientProvider — provides the QueryClient via context and mounts/unmounts +// it with the component. It's authored in .tsrx because it's a COMPONENT that +// renders a context Provider with children + a mount effect, which only the +// octane compiler can emit (the binding's hooks stay plain TS). +export function QueryClientProvider(props: QueryClientProviderProps) @{ + useEffect(() => { + props.client.mount(); + return () => { + props.client.unmount(); + }; + }, [props.client]); + {props.children} +} diff --git a/packages/octane-query/src/QueryClientProvider.tsrx.d.ts b/packages/octane-query/src/QueryClientProvider.tsrx.d.ts new file mode 100644 index 00000000000..b70e3a34afe --- /dev/null +++ b/packages/octane-query/src/QueryClientProvider.tsrx.d.ts @@ -0,0 +1,4 @@ +import type { ComponentBody } from 'octane' +import type { QueryClientProviderProps } from './types' + +export declare const QueryClientProvider: ComponentBody diff --git a/packages/octane-query/src/QueryErrorResetBoundary.tsrx b/packages/octane-query/src/QueryErrorResetBoundary.tsrx new file mode 100644 index 00000000000..fba6c306b8b --- /dev/null +++ b/packages/octane-query/src/QueryErrorResetBoundary.tsrx @@ -0,0 +1,26 @@ +import { useState, isChildrenBlock } from 'octane'; +import { QueryErrorResetBoundaryContext, createValue } from './errorResetBoundary.ts'; +import type { OctaneNode } from 'octane'; + +type QueryErrorResetBoundaryProps = { + children?: OctaneNode | ((value: ReturnType) => OctaneNode); +}; + +// QueryErrorResetBoundary — provides a fresh reset coordinator to its subtree. +// Place it above an error boundary; call `.reset()` from the boundary's retry so +// the query refetches instead of immediately re-throwing. Children may be a +// render prop receiving the boundary value — upstream's documented primary form: +// `{({ reset }) => } +// ` (react-query QueryErrorResetBoundary.tsx renders +// `typeof children === 'function' ? children(value) : children`; octane +// additionally excludes compiled children-blocks via isChildrenBlock). +export function QueryErrorResetBoundary(props: QueryErrorResetBoundaryProps) @{ + const [value] = useState(() => createValue()); + const resolved = + typeof props.children === 'function' && !isChildrenBlock(props.children) + ? props.children(value) + : props.children; + {resolved} +} diff --git a/packages/octane-query/src/QueryErrorResetBoundary.tsrx.d.ts b/packages/octane-query/src/QueryErrorResetBoundary.tsrx.d.ts new file mode 100644 index 00000000000..b8c91689b44 --- /dev/null +++ b/packages/octane-query/src/QueryErrorResetBoundary.tsrx.d.ts @@ -0,0 +1,11 @@ +import type { ComponentBody } from 'octane' +import type { + QueryErrorResetBoundaryFunction, + QueryErrorResetBoundaryProps, +} from './types' + +export interface QueryErrorResetBoundaryComponent extends ComponentBody { + (props: { children: QueryErrorResetBoundaryFunction }): void +} + +export declare const QueryErrorResetBoundary: QueryErrorResetBoundaryComponent diff --git a/packages/octane-query/src/__tests__/types.test-d.ts b/packages/octane-query/src/__tests__/types.test-d.ts new file mode 100644 index 00000000000..51ea573f9c2 --- /dev/null +++ b/packages/octane-query/src/__tests__/types.test-d.ts @@ -0,0 +1,62 @@ +import { expectTypeOf, it } from 'vitest' +import { + QueryErrorResetBoundary, + useQueries, + useSuspenseQueries, +} from '../index' +import type { QueryErrorResetBoundaryValue } from '../index' + +it('infers each useQueries tuple entry', () => { + const result = useQueries({ + queries: [ + { + queryKey: ['count'], + queryFn: async () => 1, + }, + { + queryKey: ['label'], + queryFn: async () => 'ready', + }, + ], + }) + + expectTypeOf(result[0].data).toEqualTypeOf() + expectTypeOf(result[1].data).toEqualTypeOf() +}) + +it('infers each useSuspenseQueries tuple entry as defined', () => { + const result = useSuspenseQueries({ + queries: [ + { + queryKey: ['count'], + queryFn: async () => 1, + }, + { + queryKey: ['label'], + queryFn: async () => 'ready', + }, + ], + }) + + expectTypeOf(result[0].data).toEqualTypeOf() + expectTypeOf(result[1].data).toEqualTypeOf() +}) + +it('contextually types the query error reset render prop', () => { + QueryErrorResetBoundary({ + children: ({ clearReset, isReset, reset }) => { + expectTypeOf(clearReset).toEqualTypeOf<() => void>() + expectTypeOf(isReset).toEqualTypeOf<() => boolean>() + expectTypeOf(reset).toEqualTypeOf<() => void>() + return undefined + }, + }) +}) + +it('exports the query error reset boundary value type', () => { + expectTypeOf().toEqualTypeOf<{ + clearReset: () => void + isReset: () => boolean + reset: () => void + }>() +}) diff --git a/packages/octane-query/src/context.ts b/packages/octane-query/src/context.ts new file mode 100644 index 00000000000..cfd7eb7e4b1 --- /dev/null +++ b/packages/octane-query/src/context.ts @@ -0,0 +1,35 @@ +import { createContext, useContext } from 'octane' +import type { QueryClient } from '@tanstack/query-core' + +// The QueryClient context — read by useQuery/useMutation/useQueryClient. Mirrors +// react-query's QueryClientContext. +export const QueryClientContext = createContext( + undefined, +) + +// Resolve the client: an explicitly-passed one wins, else the context value. +// `useContext` is keyed by context identity (not a per-call-site slot), so it's +// safe to call from this binding code without a compiler-injected slot. +export function resolveClient( + queryClient: QueryClient | undefined, +): QueryClient { + const ctxClient = useContext(QueryClientContext) + const client = queryClient ?? ctxClient + if (!client) { + throw new Error('No QueryClient set, use QueryClientProvider to set one') + } + return client +} + +// Signature matches @tanstack/react-query's QueryClientProvider.tsx. +export function useQueryClient(queryClient?: QueryClient): QueryClient + +export function useQueryClient(...args: Array): QueryClient { + // Args are `[queryClient?, slot?]`; the slot (symbol) is appended by the + // compiler. An explicit client is the first non-symbol arg. + const queryClient = + args.length && typeof args[0] !== 'symbol' + ? (args[0] as QueryClient) + : undefined + return resolveClient(queryClient) +} diff --git a/packages/octane-query/src/errorResetBoundary.ts b/packages/octane-query/src/errorResetBoundary.ts new file mode 100644 index 00000000000..d790a1e2231 --- /dev/null +++ b/packages/octane-query/src/errorResetBoundary.ts @@ -0,0 +1,26 @@ +import { createContext, useContext } from 'octane' +import type { QueryErrorResetBoundaryValue } from './types' + +export function createValue(): QueryErrorResetBoundaryValue { + let isReset = false + return { + clearReset: () => { + isReset = false + }, + reset: () => { + isReset = true + }, + isReset: () => isReset, + } +} + +// The reset coordinator for error-boundary retries. While "reset", a thrown query +// error is NOT re-thrown (so the boundary's retry refetches instead of looping). +// The default value means: without a ``, `isReset()` is +// always false — identical to having no boundary. +export const QueryErrorResetBoundaryContext = + createContext(createValue()) + +export function useQueryErrorResetBoundary(): QueryErrorResetBoundaryValue { + return useContext(QueryErrorResetBoundaryContext) +} diff --git a/packages/octane-query/src/index.ts b/packages/octane-query/src/index.ts new file mode 100644 index 00000000000..7c6babdd09e --- /dev/null +++ b/packages/octane-query/src/index.ts @@ -0,0 +1,77 @@ +// @tanstack/octane-query — TanStack Query for the Octane renderer. +// +// Reuses @tanstack/query-core verbatim (QueryClient, observers, caches — all +// framework-agnostic) and reimplements the React binding on octane's hooks. The +// public surface matches @tanstack/react-query, so most query code works by +// changing the import. +export * from '@tanstack/query-core' + +export { useQuery } from './useQuery' +export { useMutation } from './useMutation' +export { useInfiniteQuery } from './useInfiniteQuery' +export { useSuspenseQuery, useSuspenseInfiniteQuery } from './useSuspenseQuery' +export { useSuspenseQueries } from './useSuspenseQueries' +export { usePrefetchQuery, usePrefetchInfiniteQuery } from './usePrefetch' +export { useQueries } from './useQueries' +export { queryOptions } from './queryOptions' +export { infiniteQueryOptions } from './infiniteQueryOptions' +export { mutationOptions } from './mutationOptions' +export { useIsFetching } from './useIsFetching' +export { useMutationState, useIsMutating } from './useMutationState' +export { useQueryClient, QueryClientContext } from './context' +export { QueryClientProvider } from './QueryClientProvider.tsrx' +export { HydrationBoundary } from './HydrationBoundary.tsrx' +export { IsRestoringProvider, useIsRestoring } from './isRestoring' +export { QueryErrorResetBoundary } from './QueryErrorResetBoundary.tsrx' +export { useQueryErrorResetBoundary } from './errorResetBoundary' + +// The binding-level type surface (1:1 with @tanstack/react-query's exports). +export type { + AnyUseBaseQueryOptions, + UseBaseQueryOptions, + UsePrefetchQueryOptions, + AnyUseQueryOptions, + UseQueryOptions, + AnyUseSuspenseQueryOptions, + UseSuspenseQueryOptions, + AnyUseInfiniteQueryOptions, + UseInfiniteQueryOptions, + AnyUseSuspenseInfiniteQueryOptions, + UseSuspenseInfiniteQueryOptions, + UseBaseQueryResult, + UseQueryResult, + UseSuspenseQueryResult, + DefinedUseQueryResult, + UseInfiniteQueryResult, + DefinedUseInfiniteQueryResult, + UseSuspenseInfiniteQueryResult, + AnyUseMutationOptions, + UseMutationOptions, + UseMutateFunction, + UseMutateAsyncFunction, + UseBaseMutationResult, + UseMutationResult, + QueryClientProviderProps, + HydrationBoundaryProps, + QueryErrorResetFunction, + QueryErrorIsResetFunction, + QueryErrorClearResetFunction, + QueryErrorResetBoundaryValue, + QueryErrorResetBoundaryFunction, + QueryErrorResetBoundaryProps, +} from './types' +export type { + DefinedInitialDataOptions, + UndefinedInitialDataOptions, + UnusedSkipTokenOptions, +} from './queryOptions' +export type { + DefinedInitialDataInfiniteOptions, + UndefinedInitialDataInfiniteOptions, + UnusedSkipTokenInfiniteOptions, +} from './infiniteQueryOptions' +export type { QueriesOptions, QueriesResults } from './queries-types' +export type { + SuspenseQueriesOptions, + SuspenseQueriesResults, +} from './suspense-queries-types' diff --git a/packages/octane-query/src/infiniteQueryOptions.ts b/packages/octane-query/src/infiniteQueryOptions.ts new file mode 100644 index 00000000000..9b7a2fdd6cb --- /dev/null +++ b/packages/octane-query/src/infiniteQueryOptions.ts @@ -0,0 +1,150 @@ +// Verbatim port of @tanstack/react-query's infiniteQueryOptions.ts — a typed identity helper +import type { + DataTag, + DefaultError, + InfiniteData, + InitialDataFunction, + NonUndefinedGuard, + OmitKeyof, + QueryKey, + SkipToken, +} from '@tanstack/query-core' +import type { UseInfiniteQueryOptions } from './types' + +export type UndefinedInitialDataInfiniteOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +> = UseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam +> & { + initialData?: + | undefined + | NonUndefinedGuard> + | InitialDataFunction< + NonUndefinedGuard> + > +} + +export type UnusedSkipTokenInfiniteOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +> = OmitKeyof< + UseInfiniteQueryOptions, + 'queryFn' +> & { + queryFn?: Exclude< + UseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >['queryFn'], + SkipToken | undefined + > +} + +export type DefinedInitialDataInfiniteOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +> = UseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam +> & { + initialData: + | NonUndefinedGuard> + | (() => NonUndefinedGuard>) + | undefined +} + +export function infiniteQueryOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: DefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, +): DefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam +> & { + queryKey: DataTag, TError> +} + +export function infiniteQueryOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UnusedSkipTokenInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, +): UnusedSkipTokenInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam +> & { + queryKey: DataTag, TError> +} + +export function infiniteQueryOptions< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UndefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, +): UndefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam +> & { + queryKey: DataTag, TError> +} + +export function infiniteQueryOptions(options: unknown) { + return options +} diff --git a/packages/octane-query/src/internal.ts b/packages/octane-query/src/internal.ts new file mode 100644 index 00000000000..c93270321c9 --- /dev/null +++ b/packages/octane-query/src/internal.ts @@ -0,0 +1,186 @@ +// Shared internals for the binding hooks. +import { shouldThrowError } from '@tanstack/query-core' +import { use, useId, useRef } from 'octane' + +// Derive a stable, distinct sub-slot from a wrapper's compiler-injected slot, so +// a hook composing multiple base hooks gives each one its own identity. Tags are +// namespaced per hook (e.g. ':oq:obs', ':ms:cb') to avoid cross-hook collisions. +// Memoized: subSlot runs on EVERY hook call every render, and the naive form +// pays a string concat + global symbol-registry lookup each time. The cache is +// keyed by the slot symbol itself; the minted value is byte-identical to the +// uncached Symbol.for result, so identity is preserved across HMR re-evals and +// the per-package copies of this helper. Key universe is bounded: slots are +// per-call-site module constants (never minted per render). +const subSlotCache = new Map>() +export function subSlot( + slot: symbol | undefined, + tag: string, +): symbol | undefined { + if (slot === undefined) return undefined + let byTag = subSlotCache.get(slot) + if (byTag === undefined) subSlotCache.set(slot, (byTag = new Map())) + let sym = byTag.get(tag) + if (sym === undefined) + byTag.set(tag, (sym = Symbol.for((slot.description ?? '') + ':' + tag))) + return sym +} + +// Split the compiler-injected trailing slot off a hook's runtime args, returning +// the user args (everything before it) and the slot. +export function splitSlot(args: Array): [Array, symbol | undefined] { + const tail = args[args.length - 1] + const slot = typeof tail === 'symbol' ? tail : undefined + return [slot !== undefined ? args.slice(0, -1) : args, slot] +} + +// react-query's default suspense throwOnError: only throw if there's no data. +export const defaultThrowOnError = (_error: unknown, query: any): boolean => + query.state.data === undefined + +// react-query's ensureSuspenseTimers: a suspense query gets a >=1s staleTime/gcTime +// floor so it can't immediately refetch and re-trigger the fallback in a loop. +export function ensureSuspenseTimers(defaultedOptions: any): void { + if (defaultedOptions.suspense) { + const MIN = 1000 + const clamp = (value: any) => + value === 'static' ? value : Math.max(value ?? MIN, MIN) + const orig = defaultedOptions.staleTime + defaultedOptions.staleTime = + typeof orig === 'function' + ? (...args: Array) => clamp(orig(...args)) + : clamp(orig) + if (typeof defaultedOptions.gcTime === 'number') { + defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, MIN) + } + } +} + +// prevent-error-boundary-retry: when a query opts into throwing, don't retry on +// mount so an already-errored cached query re-throws immediately — UNLESS the +// reset boundary has been reset, in which case a retry is expected. +export function ensurePreventErrorBoundaryRetry( + options: any, + errorResetBoundary: { isReset: () => boolean }, + query: any, +): void { + const throwOnError = + query?.state.error && typeof options.throwOnError === 'function' + ? shouldThrowError(options.throwOnError, [query.state.error, query]) + : options.throwOnError + if ( + options.suspense || + options.experimental_prefetchInRender || + throwOnError + ) { + if (!errorResetBoundary.isReset()) { + options.retryOnMount = false + } + } +} + +export const shouldSuspend = (defaultedOptions: any, result: any): boolean => + defaultedOptions?.suspense && result.isPending + +// A pending result that will actually fetch (not blocked by persistence restore). +export const willFetch = (result: any, isRestoring: boolean): boolean => + result.isLoading && result.isFetching && !isRestoring + +// react-query's suspense fetch: kick the optimistic fetch and — CRUCIALLY — clear +// the reset boundary on error. Without the clearReset, a boundary reset→retry +// that fails AGAIN leaves `isReset()` true at replay, `getHasError` returns +// false, and a suspense component falls through to render with undefined data +// instead of re-throwing to the boundary. The returned promise resolves even on +// error (the replay surfaces the error through the error-boundary throw). +export function fetchOptimistic( + defaultedOptions: any, + observer: any, + errorResetBoundary: { clearReset: () => void }, +): Promise { + return observer.fetchOptimistic(defaultedOptions).catch(() => { + errorResetBoundary.clearReset() + }) +} + +type SuspensePromise = PromiseLike & { + status?: 'pending' | 'fulfilled' | 'rejected' +} + +interface SuspensePromiseCache { + key: unknown + promise: SuspensePromise | undefined +} + +// The server runtime accepts an explicit replay site key. Octane's universal +// public type currently exposes only the client-compatible one-argument form. +const useWithSiteKey = use as unknown as ( + usable: PromiseLike, + siteKey?: symbol | string, +) => unknown + +/** + * Suspend through a stable `use()` occurrence for one query-hook call site. + * + * `use()` tracks thenables by dynamic call order. A component with two + * sequential suspense queries initially reaches only the first query; when it + * resolves, the first query no longer needs to suspend and the second query is + * reached for the first time. If the first call simply skips `use()`, the + * second query takes its call-order position and replay reuses the first + * query's fulfilled promise, exposing the second query's still-pending result. + * + * Retain the promise that suspended this query hook and keep reading it after + * it settles. That reserves the query hook's dynamic call-order position on + * the client. Streaming SSR replays fresh hook passes, so an unconditional + * `useId()` gives each query-hook instance a deterministic server replay key, + * including when a custom hook is called more than once. A new query key or + * retry replaces a settled promise; re-renders during the same pending fetch + * reuse the in-flight promise. + */ +export function useSuspensePromise( + needsSuspense: boolean, + key: unknown, + createPromise: () => PromiseLike, + slot: symbol | undefined, +): void { + const siteKey = useId(subSlot(slot, 'id')) + const cache = useRef( + { key: undefined, promise: undefined }, + slot, + ).current + if ( + needsSuspense && + (cache.promise === undefined || + cache.key !== key || + cache.promise.status !== 'pending') + ) { + cache.key = key + cache.promise = createPromise() + } + if (cache.promise !== undefined) { + useWithSiteKey(cache.promise, siteKey) + } +} + +// react-query's getHasError: only throw if the query errored, the boundary isn't +// reset, the query isn't refetching, and the options opt into throwing. +export function getHasError({ + result, + errorResetBoundary, + throwOnError, + query, + suspense, +}: { + result: any + errorResetBoundary: { isReset: () => boolean } + throwOnError: any + query: any + suspense: any +}): boolean { + return ( + result.isError && + !errorResetBoundary.isReset() && + !result.isFetching && + query && + ((suspense && result.data === undefined) || + shouldThrowError(throwOnError, [result.error, query])) + ) +} diff --git a/packages/octane-query/src/isRestoring.ts b/packages/octane-query/src/isRestoring.ts new file mode 100644 index 00000000000..007f1e2bc40 --- /dev/null +++ b/packages/octane-query/src/isRestoring.ts @@ -0,0 +1,13 @@ +import { createContext, useContext } from 'octane' + +// IsRestoring — true while a persisted client is being restored from storage. While +// restoring, queries read the cache but don't subscribe/fetch (they wait for the +// restore to finish). Defaults to false, so without a provider it's inert. +const IsRestoringContext = createContext(false) + +export function useIsRestoring(): boolean { + return useContext(IsRestoringContext) +} + +// `…` — octane's built-in context Provider. +export const IsRestoringProvider = IsRestoringContext.Provider diff --git a/packages/octane-query/src/mutationOptions.ts b/packages/octane-query/src/mutationOptions.ts new file mode 100644 index 00000000000..3499348d263 --- /dev/null +++ b/packages/octane-query/src/mutationOptions.ts @@ -0,0 +1,42 @@ +// Verbatim port of @tanstack/react-query's mutationOptions.ts — a typed identity helper +import type { DefaultError, WithRequired } from '@tanstack/query-core' +import type { UseMutationOptions } from './types' + +export function mutationOptions< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +>( + options: WithRequired< + UseMutationOptions, + 'mutationKey' + >, +): WithRequired< + UseMutationOptions, + 'mutationKey' +> +export function mutationOptions< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +>( + options: Omit< + UseMutationOptions, + 'mutationKey' + >, +): Omit< + UseMutationOptions, + 'mutationKey' +> +export function mutationOptions< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +>( + options: UseMutationOptions, +): UseMutationOptions { + return options +} diff --git a/packages/octane-query/src/queries-types.ts b/packages/octane-query/src/queries-types.ts new file mode 100644 index 00000000000..651413f1569 --- /dev/null +++ b/packages/octane-query/src/queries-types.ts @@ -0,0 +1,184 @@ +// The useQueries option/result tuple types — a 1:1 port of the type block in +// @tanstack/react-query's useQueries.ts (pure query-core generics, no React). +// `GetUseQueryOptionsForUseQueries` / `GetUseQueryResult` recursively unwrap +// per-entry generics so tuple inputs infer per-index option/result types. +import type { + DefinedUseQueryResult, + UseQueryOptions, + UseQueryResult, +} from './types' +import type { + DefaultError, + OmitKeyof, + QueriesPlaceholderDataFunction, + QueryFunction, + QueryKey, + ThrowOnError, +} from '@tanstack/query-core' + +// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`. +// `placeholderData` function always gets undefined passed +type UseQueryOptionsForUseQueries< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = OmitKeyof< + UseQueryOptions, + 'placeholderData' | 'subscribed' +> & { + placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction +} + +// Avoid TS depth-limit error in case of large array literal +type MAXIMUM_DEPTH = 20 + +// Widen the type of the symbol to enable type inference even if skipToken is not immutable. +type SkipTokenForUseQueries = symbol + +export type GetUseQueryOptionsForUseQueries = + // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData } + T extends { + queryFnData: infer TQueryFnData + error?: infer TError + data: infer TData + } + ? UseQueryOptionsForUseQueries + : T extends { queryFnData: infer TQueryFnData; error?: infer TError } + ? UseQueryOptionsForUseQueries + : T extends { data: infer TData; error?: infer TError } + ? UseQueryOptionsForUseQueries + : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData] + T extends [infer TQueryFnData, infer TError, infer TData] + ? UseQueryOptionsForUseQueries + : T extends [infer TQueryFnData, infer TError] + ? UseQueryOptionsForUseQueries + : T extends [infer TQueryFnData] + ? UseQueryOptionsForUseQueries + : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided + T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + select?: (data: any) => infer TData + throwOnError?: ThrowOnError + } + ? UseQueryOptionsForUseQueries< + TQueryFnData, + unknown extends TError ? DefaultError : TError, + unknown extends TData ? TQueryFnData : TData, + TQueryKey + > + : // Fallback + UseQueryOptionsForUseQueries + +// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult +type GetDefinedOrUndefinedQueryResult = T extends { + initialData?: infer TInitialData +} + ? unknown extends TInitialData + ? UseQueryResult + : TInitialData extends TData + ? DefinedUseQueryResult + : TInitialData extends () => infer TInitialDataResult + ? unknown extends TInitialDataResult + ? UseQueryResult + : TInitialDataResult extends TData + ? DefinedUseQueryResult + : UseQueryResult + : UseQueryResult + : UseQueryResult + +type GetUseQueryResult = + // Part 1: responsible for mapping explicit type parameter to function result, if object + T extends { queryFnData: any; error?: infer TError; data: infer TData } + ? GetDefinedOrUndefinedQueryResult + : T extends { queryFnData: infer TQueryFnData; error?: infer TError } + ? GetDefinedOrUndefinedQueryResult + : T extends { data: infer TData; error?: infer TError } + ? GetDefinedOrUndefinedQueryResult + : // Part 2: responsible for mapping explicit type parameter to function result, if tuple + T extends [any, infer TError, infer TData] + ? GetDefinedOrUndefinedQueryResult + : T extends [infer TQueryFnData, infer TError] + ? GetDefinedOrUndefinedQueryResult + : T extends [infer TQueryFnData] + ? GetDefinedOrUndefinedQueryResult + : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided + T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + select?: (data: any) => infer TData + throwOnError?: ThrowOnError + } + ? GetDefinedOrUndefinedQueryResult< + T, + unknown extends TData ? TQueryFnData : TData, + unknown extends TError ? DefaultError : TError + > + : // Fallback + UseQueryResult + +/** + * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param + */ +export type QueriesOptions< + T extends Array, + TResults extends Array = [], + TDepth extends ReadonlyArray = [], +> = TDepth['length'] extends MAXIMUM_DEPTH + ? Array + : T extends [] + ? [] + : T extends [infer Head] + ? [...TResults, GetUseQueryOptionsForUseQueries] + : T extends [infer Head, ...infer Tails] + ? QueriesOptions< + [...Tails], + [...TResults, GetUseQueryOptionsForUseQueries], + [...TDepth, 1] + > + : ReadonlyArray extends T + ? T + : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type! + // use this to infer the param types in the case of Array.map() argument + T extends Array< + UseQueryOptionsForUseQueries< + infer TQueryFnData, + infer TError, + infer TData, + infer TQueryKey + > + > + ? Array< + UseQueryOptionsForUseQueries< + TQueryFnData, + TError, + TData, + TQueryKey + > + > + : // Fallback + Array + +/** + * QueriesResults reducer recursively maps type param to results + */ +export type QueriesResults< + T extends Array, + TResults extends Array = [], + TDepth extends ReadonlyArray = [], +> = TDepth['length'] extends MAXIMUM_DEPTH + ? Array + : T extends [] + ? [] + : T extends [infer Head] + ? [...TResults, GetUseQueryResult] + : T extends [infer Head, ...infer Tails] + ? QueriesResults< + [...Tails], + [...TResults, GetUseQueryResult], + [...TDepth, 1] + > + : { [K in keyof T]: GetUseQueryResult } diff --git a/packages/octane-query/src/queryOptions.ts b/packages/octane-query/src/queryOptions.ts new file mode 100644 index 00000000000..b42e41d1a5b --- /dev/null +++ b/packages/octane-query/src/queryOptions.ts @@ -0,0 +1,88 @@ +// Verbatim port of @tanstack/react-query's queryOptions.ts — a typed identity helper +import type { + DataTag, + DefaultError, + InitialDataFunction, + NonUndefinedGuard, + OmitKeyof, + QueryFunction, + QueryKey, + SkipToken, +} from '@tanstack/query-core' +import type { UseQueryOptions } from './types' + +export type UndefinedInitialDataOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = UseQueryOptions & { + initialData?: + | undefined + | InitialDataFunction> + | NonUndefinedGuard +} + +export type UnusedSkipTokenOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = OmitKeyof< + UseQueryOptions, + 'queryFn' +> & { + queryFn?: Exclude< + UseQueryOptions['queryFn'], + SkipToken | undefined + > +} + +export type DefinedInitialDataOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = Omit, 'queryFn'> & { + initialData: + | NonUndefinedGuard + | (() => NonUndefinedGuard) + queryFn?: QueryFunction +} + +export function queryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: DefinedInitialDataOptions, +): DefinedInitialDataOptions & { + queryKey: DataTag +} + +export function queryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UnusedSkipTokenOptions, +): UnusedSkipTokenOptions & { + queryKey: DataTag +} + +export function queryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UndefinedInitialDataOptions, +): UndefinedInitialDataOptions & { + queryKey: DataTag +} + +export function queryOptions(options: unknown) { + return options +} diff --git a/packages/octane-query/src/suspense-queries-types.ts b/packages/octane-query/src/suspense-queries-types.ts new file mode 100644 index 00000000000..eeff73b00bd --- /dev/null +++ b/packages/octane-query/src/suspense-queries-types.ts @@ -0,0 +1,161 @@ +// The useSuspenseQueries option/result tuple types — a 1:1 port of the type +// block in @tanstack/react-query's useSuspenseQueries.ts (pure query-core +// generics, no React). +import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types' +import type { + DefaultError, + QueryFunction, + ThrowOnError, +} from '@tanstack/query-core' + +// Avoid TS depth-limit error in case of large array literal +type MAXIMUM_DEPTH = 20 + +// Widen the type of the symbol to enable type inference even if skipToken is not immutable. +type SkipTokenForUseQueries = symbol + +export type GetUseSuspenseQueryOptions = + // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData } + T extends { + queryFnData: infer TQueryFnData + error?: infer TError + data: infer TData + } + ? UseSuspenseQueryOptions + : T extends { queryFnData: infer TQueryFnData; error?: infer TError } + ? UseSuspenseQueryOptions + : T extends { data: infer TData; error?: infer TError } + ? UseSuspenseQueryOptions + : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData] + T extends [infer TQueryFnData, infer TError, infer TData] + ? UseSuspenseQueryOptions + : T extends [infer TQueryFnData, infer TError] + ? UseSuspenseQueryOptions + : T extends [infer TQueryFnData] + ? UseSuspenseQueryOptions + : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided + T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + select?: (data: any) => infer TData + throwOnError?: ThrowOnError + } + ? UseSuspenseQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey + > + : T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + throwOnError?: ThrowOnError + } + ? UseSuspenseQueryOptions< + TQueryFnData, + TError, + TQueryFnData, + TQueryKey + > + : // Fallback + UseSuspenseQueryOptions + +type GetUseSuspenseQueryResult = + // Part 1: responsible for mapping explicit type parameter to function result, if object + T extends { queryFnData: any; error?: infer TError; data: infer TData } + ? UseSuspenseQueryResult + : T extends { queryFnData: infer TQueryFnData; error?: infer TError } + ? UseSuspenseQueryResult + : T extends { data: infer TData; error?: infer TError } + ? UseSuspenseQueryResult + : // Part 2: responsible for mapping explicit type parameter to function result, if tuple + T extends [any, infer TError, infer TData] + ? UseSuspenseQueryResult + : T extends [infer TQueryFnData, infer TError] + ? UseSuspenseQueryResult + : T extends [infer TQueryFnData] + ? UseSuspenseQueryResult + : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided + T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + select?: (data: any) => infer TData + throwOnError?: ThrowOnError + } + ? UseSuspenseQueryResult< + unknown extends TData ? TQueryFnData : TData, + unknown extends TError ? DefaultError : TError + > + : T extends { + queryFn?: + | QueryFunction + | SkipTokenForUseQueries + throwOnError?: ThrowOnError + } + ? UseSuspenseQueryResult< + TQueryFnData, + unknown extends TError ? DefaultError : TError + > + : // Fallback + UseSuspenseQueryResult + +/** + * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param + */ +export type SuspenseQueriesOptions< + T extends Array, + TResults extends Array = [], + TDepth extends ReadonlyArray = [], +> = TDepth['length'] extends MAXIMUM_DEPTH + ? Array + : T extends [] + ? [] + : T extends [infer Head] + ? [...TResults, GetUseSuspenseQueryOptions] + : T extends [infer Head, ...infer Tails] + ? SuspenseQueriesOptions< + [...Tails], + [...TResults, GetUseSuspenseQueryOptions], + [...TDepth, 1] + > + : Array extends T + ? T + : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type! + // use this to infer the param types in the case of Array.map() argument + T extends Array< + UseSuspenseQueryOptions< + infer TQueryFnData, + infer TError, + infer TData, + infer TQueryKey + > + > + ? Array< + UseSuspenseQueryOptions + > + : // Fallback + Array + +/** + * SuspenseQueriesResults reducer recursively maps type param to results + */ +export type SuspenseQueriesResults< + T extends Array, + TResults extends Array = [], + TDepth extends ReadonlyArray = [], +> = TDepth['length'] extends MAXIMUM_DEPTH + ? Array + : T extends [] + ? [] + : T extends [infer Head] + ? [...TResults, GetUseSuspenseQueryResult] + : T extends [infer Head, ...infer Tails] + ? SuspenseQueriesResults< + [...Tails], + [...TResults, GetUseSuspenseQueryResult], + [...TDepth, 1] + > + : { [K in keyof T]: GetUseSuspenseQueryResult } diff --git a/packages/octane-query/src/types.ts b/packages/octane-query/src/types.ts new file mode 100644 index 00000000000..8c79c4e0ec8 --- /dev/null +++ b/packages/octane-query/src/types.ts @@ -0,0 +1,288 @@ +// The binding-level type surface — a 1:1 port of @tanstack/react-query's +// types.ts (it is built entirely on query-core generics; nothing here is +// React-specific), plus the component prop / context-value types at the bottom +// (where upstream's React.ReactNode becomes octane's `unknown` renderable). +import type { + DefaultError, + DefinedInfiniteQueryObserverResult, + DefinedQueryObserverResult, + DehydratedState, + DistributiveOmit, + FetchQueryOptions, + HydrateOptions, + InfiniteQueryObserverOptions, + InfiniteQueryObserverResult, + MutateFunction, + MutationObserverOptions, + MutationObserverResult, + OmitKeyof, + Override, + QueryClient, + QueryKey, + QueryObserverOptions, + QueryObserverResult, + SkipToken, +} from '@tanstack/query-core' + +export type AnyUseBaseQueryOptions = UseBaseQueryOptions< + any, + any, + any, + any, + any +> +export interface UseBaseQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> extends QueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey +> { + /** + * Set this to `false` to unsubscribe this observer from updates to the query cache. + * Defaults to `true`. + */ + subscribed?: boolean +} + +export interface UsePrefetchQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> extends OmitKeyof< + FetchQueryOptions, + 'queryFn' +> { + queryFn?: Exclude< + FetchQueryOptions['queryFn'], + SkipToken + > +} + +export type AnyUseQueryOptions = UseQueryOptions +export interface UseQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> extends OmitKeyof< + UseBaseQueryOptions, + 'suspense' +> {} + +export type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions< + any, + any, + any, + any +> +export interface UseSuspenseQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> extends OmitKeyof< + UseQueryOptions, + 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData' +> { + queryFn?: Exclude< + UseQueryOptions['queryFn'], + SkipToken + > +} + +export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions< + any, + any, + any, + any, + any +> +export interface UseInfiniteQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +> extends OmitKeyof< + InfiniteQueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + 'suspense' +> { + /** + * Set this to `false` to unsubscribe this observer from updates to the query cache. + * Defaults to `true`. + */ + subscribed?: boolean +} + +export type AnyUseSuspenseInfiniteQueryOptions = + UseSuspenseInfiniteQueryOptions +export interface UseSuspenseInfiniteQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +> extends OmitKeyof< + UseInfiniteQueryOptions, + 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData' +> { + queryFn?: Exclude< + UseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >['queryFn'], + SkipToken + > +} + +export type UseBaseQueryResult< + TData = unknown, + TError = DefaultError, +> = QueryObserverResult + +export type UseQueryResult< + TData = unknown, + TError = DefaultError, +> = UseBaseQueryResult + +export type UseSuspenseQueryResult< + TData = unknown, + TError = DefaultError, +> = DistributiveOmit< + DefinedQueryObserverResult, + 'isPlaceholderData' | 'promise' +> + +export type DefinedUseQueryResult< + TData = unknown, + TError = DefaultError, +> = DefinedQueryObserverResult + +export type UseInfiniteQueryResult< + TData = unknown, + TError = DefaultError, +> = InfiniteQueryObserverResult + +export type DefinedUseInfiniteQueryResult< + TData = unknown, + TError = DefaultError, +> = DefinedInfiniteQueryObserverResult + +export type UseSuspenseInfiniteQueryResult< + TData = unknown, + TError = DefaultError, +> = OmitKeyof< + DefinedInfiniteQueryObserverResult, + 'isPlaceholderData' | 'promise' +> + +export type AnyUseMutationOptions = UseMutationOptions +export interface UseMutationOptions< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +> extends OmitKeyof< + MutationObserverOptions, + '_defaulted' +> {} + +export type UseMutateFunction< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +> = ( + ...args: Parameters< + MutateFunction + > +) => void + +export type UseMutateAsyncFunction< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +> = MutateFunction + +export type UseBaseMutationResult< + TData = unknown, + TError = DefaultError, + TVariables = unknown, + TOnMutateResult = unknown, +> = Override< + MutationObserverResult, + { mutate: UseMutateFunction } +> & { + mutateAsync: UseMutateAsyncFunction< + TData, + TError, + TVariables, + TOnMutateResult + > +} + +export type UseMutationResult< + TData = unknown, + TError = DefaultError, + TVariables = unknown, + TOnMutateResult = unknown, +> = UseBaseMutationResult + +// --------------------------------------------------------------------------- +// Component prop + context-value types (octane: children are renderables, so +// upstream's React.ReactNode becomes `unknown`; render-prop children are also +// accepted where upstream accepts them). +// --------------------------------------------------------------------------- + +export interface QueryClientProviderProps { + client: QueryClient + children?: unknown +} + +export interface HydrationBoundaryProps { + state: DehydratedState | null | undefined + options?: OmitKeyof & { + defaultOptions?: OmitKeyof< + Exclude, + 'mutations' + > + } + children?: unknown + queryClient?: QueryClient +} + +export type QueryErrorResetFunction = () => void +export type QueryErrorIsResetFunction = () => boolean +export type QueryErrorClearResetFunction = () => void + +export interface QueryErrorResetBoundaryValue { + clearReset: QueryErrorClearResetFunction + isReset: QueryErrorIsResetFunction + reset: QueryErrorResetFunction +} + +export type QueryErrorResetBoundaryFunction = ( + value: QueryErrorResetBoundaryValue, +) => unknown + +export interface QueryErrorResetBoundaryProps { + children: QueryErrorResetBoundaryFunction | unknown +} diff --git a/packages/octane-query/src/useBaseQuery.ts b/packages/octane-query/src/useBaseQuery.ts new file mode 100644 index 00000000000..c47ba1371d8 --- /dev/null +++ b/packages/octane-query/src/useBaseQuery.ts @@ -0,0 +1,168 @@ +// `useBaseQuery` — the shared core of `useQuery` (and friends), reimplemented on +// octane's hooks. Mirrors @tanstack/react-query's useBaseQuery: it creates a +// query Observer, subscribes to it via useSyncExternalStore, and pushes option +// changes through useEffect. The single compiler-injected slot is split into +// distinct sub-slots for each internal base hook, the same way the zustand +// `traditional` binding does. +import { useCallback, useEffect, useState, useSyncExternalStore } from 'octane' +import { environmentManager, noop, notifyManager } from '@tanstack/query-core' +import { resolveClient } from './context' +import { useIsRestoring } from './isRestoring' +import { useQueryErrorResetBoundary } from './errorResetBoundary' +import { + ensurePreventErrorBoundaryRetry, + ensureSuspenseTimers, + fetchOptimistic, + getHasError, + shouldSuspend, + subSlot, + useSuspensePromise, + willFetch, +} from './internal' + +export function useBaseQuery( + options: any, + Observer: any, + queryClient: any, + slot: symbol | undefined, +): any { + if (process.env.NODE_ENV !== 'production') { + if (typeof options !== 'object' || Array.isArray(options)) { + throw new Error( + 'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object', + ) + } + } + + const oq = (tag: string) => subSlot(slot, 'oq:' + tag) + const client = resolveClient(queryClient) + const isRestoring = useIsRestoring() + const errorResetBoundary = useQueryErrorResetBoundary() + const defaultedOptions = client.defaultQueryOptions(options) + + ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.( + defaultedOptions, + ) + + const query = client.getQueryCache().get(defaultedOptions.queryHash) + + if (process.env.NODE_ENV !== 'production') { + if (!defaultedOptions.queryFn) { + console.error( + `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`, + ) + } + } + + // `subscribed: false` makes a passive query (read the cache, never subscribe). + // While restoring a persisted client, queries also stay passive. + const subscribed = options.subscribed !== false + defaultedOptions._optimisticResults = isRestoring + ? 'isRestoring' + : subscribed + ? 'optimistic' + : undefined + + ensureSuspenseTimers(defaultedOptions) + ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query) + // Clear the reset boundary on mount (so a fresh mount can throw again). + useEffect( + () => { + errorResetBoundary.clearReset() + }, + [errorResetBoundary], + oq('clr'), + ) + + // Probed BEFORE creating the Observer — the constructor can create the entry. + const isNewCacheEntry = !client + .getQueryCache() + .get(defaultedOptions.queryHash) + + const [observer] = useState( + () => new Observer(client, defaultedOptions), + oq('obs'), + ) + + const result = observer.getOptimisticResult(defaultedOptions) + + const shouldSubscribe = !isRestoring && subscribed + useSyncExternalStore( + useCallback( + (onStoreChange: () => void) => { + const unsubscribe = shouldSubscribe + ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) + : noop + observer.updateResult() + return unsubscribe + }, + [observer, shouldSubscribe], + oq('cb'), + ), + () => observer.getCurrentResult(), + () => observer.getCurrentResult(), + oq('uses'), + ) + + useEffect( + () => { + observer.setOptions(defaultedOptions) + }, + [defaultedOptions, observer], + oq('eff'), + ) + + // Suspend on a promise retained for this query-hook call site. Keeping the + // settled promise in the dynamic use() sequence prevents a later sequential + // query from taking this query's replay position. fetchOptimistic clears the + // reset boundary on error; the replay surfaces that error through the + // error-boundary throw below. + useSuspensePromise( + shouldSuspend(defaultedOptions, result), + defaultedOptions.queryHash, + () => fetchOptimistic(defaultedOptions, observer, errorResetBoundary), + oq('sus'), + ) + + // Error boundary: throw so the nearest @try/@catch (or ) handles + // it, when the query errored and the options opt into throwing. + if ( + getHasError({ + result, + errorResetBoundary, + throwOnError: defaultedOptions.throwOnError, + query, + suspense: defaultedOptions.suspense, + }) + ) { + throw result.error + } + + ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.( + defaultedOptions, + result, + ) + + // experimental_prefetchInRender: kick the fetch during render so + // `result.promise` settles even if the component unmounts, and finalize the + // observer's thenable (via updateResult) when the data lands. + if ( + defaultedOptions.experimental_prefetchInRender && + !environmentManager.isServer() && + willFetch(result, isRestoring) + ) { + const promise = isNewCacheEntry + ? // Fetch immediately on render so `.promise` resolves even on unmount. + fetchOptimistic(defaultedOptions, observer, errorResetBoundary) + : // Subscribe to the cache promise to finalize the current thenable. + query?.promise + + promise?.catch(noop).finally(() => { + observer.updateResult() + }) + } + + return !defaultedOptions.notifyOnChangeProps + ? observer.trackResult(result) + : result +} diff --git a/packages/octane-query/src/useInfiniteQuery.ts b/packages/octane-query/src/useInfiniteQuery.ts new file mode 100644 index 00000000000..895da60424e --- /dev/null +++ b/packages/octane-query/src/useInfiniteQuery.ts @@ -0,0 +1,75 @@ +import { InfiniteQueryObserver } from '@tanstack/query-core' +import { useBaseQuery } from './useBaseQuery' +import { splitSlot } from './internal' +import type { + DefaultError, + InfiniteData, + QueryClient, + QueryKey, +} from '@tanstack/query-core' +import type { + DefinedUseInfiniteQueryResult, + UseInfiniteQueryOptions, + UseInfiniteQueryResult, +} from './types' +import type { + DefinedInitialDataInfiniteOptions, + UndefinedInitialDataInfiniteOptions, +} from './infiniteQueryOptions' + +// Overloads match @tanstack/react-query's useInfiniteQuery.ts. +export function useInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: DefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): DefinedUseInfiniteQueryResult + +export function useInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UndefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): UseInfiniteQueryResult + +export function useInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): UseInfiniteQueryResult + +export function useInfiniteQuery(options: any, ...rest: Array): any { + const [user, slot] = splitSlot(rest) + return useBaseQuery(options, InfiniteQueryObserver, user[0], slot) +} diff --git a/packages/octane-query/src/useIsFetching.ts b/packages/octane-query/src/useIsFetching.ts new file mode 100644 index 00000000000..df699564245 --- /dev/null +++ b/packages/octane-query/src/useIsFetching.ts @@ -0,0 +1,29 @@ +import { notifyManager } from '@tanstack/query-core' +import { useCallback, useSyncExternalStore } from 'octane' +import { resolveClient } from './context' +import { splitSlot, subSlot } from './internal' +import type { QueryClient, QueryFilters } from '@tanstack/query-core' + +// Signature matches @tanstack/react-query's useIsFetching.ts. +export function useIsFetching( + filters?: QueryFilters, + queryClient?: QueryClient, +): number + +export function useIsFetching(...args: Array): number { + const [user, slot] = splitSlot(args) + const filters = user[0] + const client = resolveClient(user[1]) + const queryCache = client.getQueryCache() + return useSyncExternalStore( + useCallback( + (onStoreChange: () => void) => + queryCache.subscribe(notifyManager.batchCalls(onStoreChange)), + [queryCache], + subSlot(slot, 'if:cb'), + ), + () => client.isFetching(filters), + () => client.isFetching(filters), + subSlot(slot, 'if:uses'), + ) +} diff --git a/packages/octane-query/src/useMutation.ts b/packages/octane-query/src/useMutation.ts new file mode 100644 index 00000000000..7a9c8d6c1d3 --- /dev/null +++ b/packages/octane-query/src/useMutation.ts @@ -0,0 +1,78 @@ +// `useMutation` — reimplemented on octane's hooks, mirroring +// @tanstack/react-query: a MutationObserver subscribed via useSyncExternalStore, +// with a stable `mutate` callback. The single compiler-injected slot is split +// into distinct sub-slots for each internal base hook. +import { useCallback, useEffect, useState, useSyncExternalStore } from 'octane' +import { + MutationObserver, + noop, + notifyManager, + shouldThrowError, +} from '@tanstack/query-core' +import { resolveClient } from './context' +import { splitSlot, subSlot as subSlotBase } from './internal' +import type { DefaultError, QueryClient } from '@tanstack/query-core' +import type { UseMutationOptions, UseMutationResult } from './types' + +// Namespaced per-hook (':om:') on top of the shared helper — the minted symbols +// are byte-identical to the previous private copy, so slot identity is stable. +const subSlot = (slot: symbol | undefined, tag: string) => + subSlotBase(slot, 'om:' + tag) + +// Signature matches @tanstack/react-query's useMutation.ts. +export function useMutation< + TData = unknown, + TError = DefaultError, + TVariables = void, + TOnMutateResult = unknown, +>( + options: UseMutationOptions, + queryClient?: QueryClient, +): UseMutationResult + +export function useMutation(options: any, ...rest: Array): any { + const [user, slot] = splitSlot(rest) + const client = resolveClient(user[0]) + + const [observer] = useState( + () => new MutationObserver(client, options), + subSlot(slot, 'obs'), + ) + + useEffect( + () => { + observer.setOptions(options) + }, + [observer, options], + subSlot(slot, 'eff'), + ) + + const result = useSyncExternalStore( + useCallback( + (onStoreChange: () => void) => + observer.subscribe(notifyManager.batchCalls(onStoreChange)), + [observer], + subSlot(slot, 'cb'), + ), + () => observer.getCurrentResult(), + () => observer.getCurrentResult(), + subSlot(slot, 'uses'), + ) + + const mutate = useCallback( + (variables: any, mutateOptions: any) => { + observer.mutate(variables, mutateOptions).catch(noop) + }, + [observer], + subSlot(slot, 'mut'), + ) + + if ( + result.error && + shouldThrowError(observer.options.throwOnError, [result.error]) + ) { + throw result.error + } + + return { ...result, mutate, mutateAsync: result.mutate } +} diff --git a/packages/octane-query/src/useMutationState.ts b/packages/octane-query/src/useMutationState.ts new file mode 100644 index 00000000000..4f8e7a0157f --- /dev/null +++ b/packages/octane-query/src/useMutationState.ts @@ -0,0 +1,88 @@ +import { notifyManager, replaceEqualDeep } from '@tanstack/query-core' +import { useCallback, useEffect, useRef, useSyncExternalStore } from 'octane' +import { resolveClient } from './context' +import { splitSlot, subSlot } from './internal' +import type { + Mutation, + MutationFilters, + MutationState, + QueryClient, +} from '@tanstack/query-core' + +// Per upstream useMutationState.ts (kept module-private there too). +type MutationStateOptions = { + filters?: MutationFilters + select?: (mutation: Mutation) => TResult +} + +function getResult(mutationCache: any, options: any): Array { + return mutationCache + .findAll(options.filters) + .map((mutation: any) => + options.select ? options.select(mutation) : mutation.state, + ) +} + +// Signatures match @tanstack/react-query's useMutationState.ts. +export function useMutationState( + options?: MutationStateOptions, + queryClient?: QueryClient, +): Array + +export function useMutationState(...args: Array): Array { + const [user, slot] = splitSlot(args) + const options = user[0] ?? {} + const mutationCache = resolveClient(user[1]).getMutationCache() + + const optionsRef = useRef(options, subSlot(slot, 'ms:opt')) + const result = useRef | null>(null, subSlot(slot, 'ms:res')) + if (result.current === null) { + result.current = getResult(mutationCache, options) + } + useEffect( + () => { + optionsRef.current = options + }, + undefined, + subSlot(slot, 'ms:eff'), + ) + + return useSyncExternalStore( + useCallback( + (onStoreChange: () => void) => + mutationCache.subscribe(() => { + const next = replaceEqualDeep( + result.current, + getResult(mutationCache, optionsRef.current), + ) + if (result.current !== next) { + result.current = next + notifyManager.schedule(onStoreChange) + } + }), + [mutationCache], + subSlot(slot, 'ms:cb'), + ), + () => result.current as Array, + () => result.current as Array, + subSlot(slot, 'ms:uses'), + ) +} + +// Signature matches @tanstack/react-query's useMutationState.ts. +export function useIsMutating( + filters?: MutationFilters, + queryClient?: QueryClient, +): number + +export function useIsMutating(...args: Array): number { + const [user, slot] = splitSlot(args) + const filters = user[0] + const client = resolveClient(user[1]) + // Forward this hook's slot to useMutationState (it owns the base hooks). + return (useMutationState as (...a: Array) => Array)( + { filters: { ...filters, status: 'pending' } }, + client, + slot, + ).length +} diff --git a/packages/octane-query/src/usePrefetch.ts b/packages/octane-query/src/usePrefetch.ts new file mode 100644 index 00000000000..3d32ffd94be --- /dev/null +++ b/packages/octane-query/src/usePrefetch.ts @@ -0,0 +1,57 @@ +import { resolveClient } from './context' +import { splitSlot } from './internal' +import type { + DefaultError, + FetchInfiniteQueryOptions, + QueryClient, + QueryKey, +} from '@tanstack/query-core' +import type { UsePrefetchQueryOptions } from './types' + +// Signatures match @tanstack/react-query's usePrefetchQuery.tsx / +// usePrefetchInfiniteQuery.tsx. +export function usePrefetchQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UsePrefetchQueryOptions, + queryClient?: QueryClient, +): void + +export function usePrefetchQuery(options: any, ...rest: Array): void { + const [user] = splitSlot(rest) + const client = resolveClient(user[0]) + if (!client.getQueryState(options.queryKey)) { + client.prefetchQuery(options) + } +} + +export function usePrefetchInfiniteQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: FetchInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): void + +export function usePrefetchInfiniteQuery( + options: any, + ...rest: Array +): void { + const [user] = splitSlot(rest) + const client = resolveClient(user[0]) + if (!client.getQueryState(options.queryKey)) { + client.prefetchInfiniteQuery(options) + } +} diff --git a/packages/octane-query/src/useQueries.ts b/packages/octane-query/src/useQueries.ts new file mode 100644 index 00000000000..06494567f45 --- /dev/null +++ b/packages/octane-query/src/useQueries.ts @@ -0,0 +1,167 @@ +import { + QueriesObserver, + QueryObserver, + noop, + notifyManager, +} from '@tanstack/query-core' +import { + useCallback, + useEffect, + useMemo, + useState, + useSyncExternalStore, +} from 'octane' +import { resolveClient } from './context' +import { useIsRestoring } from './isRestoring' +import { useQueryErrorResetBoundary } from './errorResetBoundary' +import { + ensurePreventErrorBoundaryRetry, + ensureSuspenseTimers, + fetchOptimistic, + getHasError, + shouldSuspend, + splitSlot, + subSlot, + useSuspensePromise, +} from './internal' +import type { QueryClient } from '@tanstack/query-core' +import type { + GetUseQueryOptionsForUseQueries, + QueriesOptions, + QueriesResults, +} from './queries-types' + +// Signature matches @tanstack/react-query's useQueries.ts — per-entry tuple +// inference via QueriesOptions/QueriesResults, with `combine` re-typing the +// aggregate result. The untyped implementation signature also accepts the +// compiler-injected trailing slot symbol. +export function useQueries< + T extends Array, + TCombinedResult = QueriesResults, +>( + options: { + queries: + | readonly [...QueriesOptions] + | readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries }] + combine?: (result: QueriesResults) => TCombinedResult + subscribed?: boolean + }, + queryClient?: QueryClient, +): TCombinedResult + +export function useQueries(options: any, ...rest: Array): any { + const [user, slot] = splitSlot(rest) + const client = resolveClient(user[0]) + const isRestoring = useIsRestoring() + const errorResetBoundary = useQueryErrorResetBoundary() + const { queries, ...restOptions } = options + const qs = (tag: string) => subSlot(slot, 'qs:' + tag) + + const defaultedQueries = useMemo( + () => + queries.map((opts: any) => { + const defaulted = client.defaultQueryOptions(opts) + defaulted._optimisticResults = isRestoring + ? 'isRestoring' + : 'optimistic' + return defaulted + }), + [queries, client, isRestoring], + qs('memo'), + ) + defaultedQueries.forEach((queryOptions: any) => { + ensureSuspenseTimers(queryOptions) + ensurePreventErrorBoundaryRetry( + queryOptions, + errorResetBoundary, + client.getQueryCache().get(queryOptions.queryHash), + ) + }) + useEffect( + () => { + errorResetBoundary.clearReset() + }, + [errorResetBoundary], + qs('clr'), + ) + + const [observer] = useState( + () => new QueriesObserver(client, defaultedQueries, restOptions), + qs('obs'), + ) + + const [optimisticResult, getCombinedResult, trackResult] = + observer.getOptimisticResult(defaultedQueries, restOptions.combine) + + const shouldSubscribe = !isRestoring && restOptions.subscribed !== false + useSyncExternalStore( + useCallback( + (onStoreChange: () => void) => + shouldSubscribe + ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) + : noop, + [observer, shouldSubscribe], + qs('cb'), + ), + () => observer.getCurrentResult(), + () => observer.getCurrentResult(), + qs('uses'), + ) + + useEffect( + () => { + observer.setQueries(defaultedQueries, restOptions) + }, + [defaultedQueries, restOptions, observer], + qs('eff'), + ) + + // If any query should suspend, await their optimistic fetches as one retained + // suspense promise. Retaining it gives a sequential useQueries call the same + // stable replay position as useBaseQuery above. + const suspenseIndexes: Array = [] + for (let index = 0; index < optimisticResult.length; index++) { + if (shouldSuspend(defaultedQueries[index], optimisticResult[index])) { + suspenseIndexes.push(index) + } + } + useSuspensePromise( + suspenseIndexes.length > 0, + JSON.stringify( + suspenseIndexes.map((index) => defaultedQueries[index].queryHash), + ), + () => + Promise.all( + suspenseIndexes.map((index) => { + const opts = defaultedQueries[index] + // fetchOptimistic clears the reset boundary on error (upstream + // suspense.ts) so a reset→retry→fail-again re-throws to the boundary. + return fetchOptimistic( + opts, + new QueryObserver(client, opts), + errorResetBoundary, + ) + }), + ), + qs('sus'), + ) + + const firstError = optimisticResult.find((result: any, index: number) => { + const query = defaultedQueries[index] + return ( + query && + getHasError({ + result, + errorResetBoundary, + throwOnError: query.throwOnError, + query: client.getQueryCache().get(query.queryHash), + suspense: query.suspense, + }) + ) + }) + if (firstError?.error) { + throw firstError.error + } + + return getCombinedResult(trackResult()) +} diff --git a/packages/octane-query/src/useQuery.ts b/packages/octane-query/src/useQuery.ts new file mode 100644 index 00000000000..96636f55b12 --- /dev/null +++ b/packages/octane-query/src/useQuery.ts @@ -0,0 +1,54 @@ +import { QueryObserver } from '@tanstack/query-core' +import { useBaseQuery } from './useBaseQuery' +import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core' +import type { + DefinedUseQueryResult, + UseQueryOptions, + UseQueryResult, +} from './types' +import type { + DefinedInitialDataOptions, + UndefinedInitialDataOptions, +} from './queryOptions' + +// Overloads match @tanstack/react-query's useQuery.ts: `initialData` narrows the +// result to DefinedUseQueryResult. The untyped implementation signature also +// accepts the compiler-injected trailing slot symbol (never visible to users). +export function useQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: DefinedInitialDataOptions, + queryClient?: QueryClient, +): DefinedUseQueryResult, TError> + +export function useQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UndefinedInitialDataOptions, + queryClient?: QueryClient, +): UseQueryResult, TError> + +export function useQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UseQueryOptions, + queryClient?: QueryClient, +): UseQueryResult, TError> + +export function useQuery(options: any, ...rest: Array): any { + // `[queryClient?, slot?]` — the slot (symbol) is the compiler-injected trailing + // arg; an explicit client is the first non-symbol arg. + const tail = rest[rest.length - 1] + const slot = typeof tail === 'symbol' ? tail : undefined + const queryClient = typeof rest[0] !== 'symbol' ? rest[0] : undefined + return useBaseQuery(options, QueryObserver, queryClient, slot) +} diff --git a/packages/octane-query/src/useSuspenseQueries.ts b/packages/octane-query/src/useSuspenseQueries.ts new file mode 100644 index 00000000000..ab735557518 --- /dev/null +++ b/packages/octane-query/src/useSuspenseQueries.ts @@ -0,0 +1,58 @@ +import { skipToken } from '@tanstack/query-core' +import { defaultThrowOnError } from './internal' +import { useQueries } from './useQueries' +import type { QueryClient } from '@tanstack/query-core' +import type { + GetUseSuspenseQueryOptions, + SuspenseQueriesOptions, + SuspenseQueriesResults, +} from './suspense-queries-types' + +// Signature matches @tanstack/react-query's useSuspenseQueries.ts. +export function useSuspenseQueries< + T extends Array, + TCombinedResult = SuspenseQueriesResults, +>( + options: { + queries: + | readonly [...SuspenseQueriesOptions] + | readonly [...{ [K in keyof T]: GetUseSuspenseQueryOptions }] + combine?: (result: SuspenseQueriesResults) => TCombinedResult + }, + queryClient?: QueryClient, +): TCombinedResult + +export function useSuspenseQueries< + T extends Array, + TCombinedResult = SuspenseQueriesResults, +>( + options: { + queries: readonly [...SuspenseQueriesOptions] + combine?: (result: SuspenseQueriesResults) => TCombinedResult + }, + queryClient?: QueryClient, +): TCombinedResult + +export function useSuspenseQueries(options: any, ...rest: Array): any { + return useQueries( + { + ...options, + queries: options.queries.map((query: any) => { + if ( + process.env.NODE_ENV !== 'production' && + query.queryFn === skipToken + ) { + console.error('skipToken is not allowed for useSuspenseQueries') + } + return { + ...query, + suspense: true, + throwOnError: defaultThrowOnError, + enabled: true, + placeholderData: undefined, + } + }), + }, + ...rest, + ) +} diff --git a/packages/octane-query/src/useSuspenseQuery.ts b/packages/octane-query/src/useSuspenseQuery.ts new file mode 100644 index 00000000000..83c593e08c0 --- /dev/null +++ b/packages/octane-query/src/useSuspenseQuery.ts @@ -0,0 +1,94 @@ +import { + InfiniteQueryObserver, + QueryObserver, + skipToken, +} from '@tanstack/query-core' +import { useBaseQuery } from './useBaseQuery' +import { defaultThrowOnError, splitSlot } from './internal' +import type { + DefaultError, + InfiniteData, + QueryClient, + QueryKey, +} from '@tanstack/query-core' +import type { + UseSuspenseInfiniteQueryOptions, + UseSuspenseInfiniteQueryResult, + UseSuspenseQueryOptions, + UseSuspenseQueryResult, +} from './types' + +// Signatures match @tanstack/react-query's useSuspenseQuery.ts / +// useSuspenseInfiniteQuery.ts (data is always defined; no placeholderData / +// enabled / throwOnError options). The untyped implementation signature also +// accepts the compiler-injected trailing slot symbol. +export function useSuspenseQuery< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +>( + options: UseSuspenseQueryOptions, + queryClient?: QueryClient, +): UseSuspenseQueryResult + +export function useSuspenseQuery(options: any, ...rest: Array): any { + const [user, slot] = splitSlot(rest) + if (process.env.NODE_ENV !== 'production') { + if (options.queryFn === skipToken) { + console.error('skipToken is not allowed for useSuspenseQuery') + } + } + return useBaseQuery( + { + ...options, + enabled: true, + suspense: true, + throwOnError: defaultThrowOnError, + placeholderData: undefined, + }, + QueryObserver, + user[0], + slot, + ) +} + +export function useSuspenseInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UseSuspenseInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): UseSuspenseInfiniteQueryResult + +export function useSuspenseInfiniteQuery( + options: any, + ...rest: Array +): any { + const [user, slot] = splitSlot(rest) + if (process.env.NODE_ENV !== 'production') { + if (options.queryFn === skipToken) { + console.error('skipToken is not allowed for useSuspenseInfiniteQuery') + } + } + return useBaseQuery( + { + ...options, + enabled: true, + suspense: true, + throwOnError: defaultThrowOnError, + }, + InfiniteQueryObserver, + user[0], + slot, + ) +} diff --git a/packages/octane-query/tests/_fixtures/app.tsrx b/packages/octane-query/tests/_fixtures/app.tsrx new file mode 100644 index 00000000000..8dfdd9bd10d --- /dev/null +++ b/packages/octane-query/tests/_fixtures/app.tsrx @@ -0,0 +1,56 @@ +import { + QueryClientProvider, + useQuery, + useMutation, + useQueryClient, +} from '@tanstack/octane-query'; + +// Reads a query through the CONTEXT client (no explicit client arg). +export function Reader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ queryKey: ['k'], queryFn: props.queryFn, retry: false }); +
{(q.isPending + ? 'pending' + : q.isError + ? 'error:' + (q.error as Error).message + : 'data:' + q.data) as string}
+} + +export function App(props: { client: unknown; queryFn: () => Promise }) @{ + + + +} + +// useQueryClient resolves the provided client. +export function ClientProbe(props: { onClient: (c: unknown) => void }) @{ + const client = useQueryClient(); + props.onClient(client); + ok +} + +export function ProbeApp(props: { client: unknown; onClient: (c: unknown) => void }) @{ + + + +} + +// Mutation lifecycle. +export function Mutator(props: { mutationFn: (v: string) => Promise }) @{ + const m = useMutation({ mutationFn: props.mutationFn }); +
+ {(m.isIdle + ? 'idle' + : m.isPending + ? 'pending' + : m.isError + ? 'error' + : 'data:' + m.data) as string} + +
+} + +export function MutApp(props: { client: unknown; mutationFn: (v: string) => Promise }) @{ + + + +} diff --git a/packages/octane-query/tests/_fixtures/async-diff.tsrx b/packages/octane-query/tests/_fixtures/async-diff.tsrx new file mode 100644 index 00000000000..5b58f446c65 --- /dev/null +++ b/packages/octane-query/tests/_fixtures/async-diff.tsrx @@ -0,0 +1,50 @@ +import { useState } from 'octane'; +import { + QueryClient, + QueryClientProvider, + useMutation, + useQuery, +} from '@tanstack/octane-query'; + +function delayed(value: T, ms: number): Promise { + return new Promise((resolve) => setTimeout(() => resolve(value), ms)); +} + +function AsyncReader() @{ + const q = useQuery({ + queryKey: ['a'], + queryFn: () => delayed('fetched', 10), + retry: false, + }); +
{'data=' + q.data + ' status=' + q.status + ' pending=' + q.isPending + ' fetching=' + + q.isFetching + + ' success=' + + q.isSuccess as string}
+} + +export function AsyncApp() @{ + const [client] = useState( + () => new QueryClient({ defaultOptions: { queries: { retry: false } } }), + ); + + + +} + +function MutationReader() @{ + const mutation = useMutation({ + mutationFn: (value: string) => delayed('done:' + value, 10), + }); +
+ +
{'status=' + mutation.status + ' data=' + mutation.data + ' vars=' + + mutation.variables as string}
+
+} + +export function MutationApp() @{ + const [client] = useState(() => new QueryClient()); + + + +} diff --git a/packages/octane-query/tests/_fixtures/boundaries.tsrx b/packages/octane-query/tests/_fixtures/boundaries.tsrx new file mode 100644 index 00000000000..f0869369bb8 --- /dev/null +++ b/packages/octane-query/tests/_fixtures/boundaries.tsrx @@ -0,0 +1,53 @@ +import { ErrorBoundary } from 'octane'; +import { + QueryClientProvider, + QueryErrorResetBoundary, + useQueryErrorResetBoundary, + IsRestoringProvider, + useQuery, +} from '@tanstack/octane-query'; + +// --- IsRestoring: a restoring subtree reads cache but doesn't subscribe/fetch --- +function RestoreReader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ queryKey: ['r'], queryFn: props.queryFn, retry: false }); +
{(q.isPending ? 'pending' : 'data:' + q.data) as string}
+} + +export function RestoringApp(props: { + client: unknown; + restoring: boolean; + queryFn: () => Promise; +}) @{ + + + + + +} + +// --- QueryErrorResetBoundary: reset() lets a throwOnError query retry --- +function ErrReader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ queryKey: ['e'], queryFn: props.queryFn, retry: false, throwOnError: true }); + {'data:' + q.data as string} +} + +function Boundary(props: { queryFn: () => Promise }) @{ + const errReset = useQueryErrorResetBoundary(); + const onRetry = (reset: () => void) => () => { + errReset.reset(); + reset(); + }; + } + > + + +} + +export function ResetApp(props: { client: unknown; queryFn: () => Promise }) @{ + + + + + +} diff --git a/packages/octane-query/tests/_fixtures/cached-diff.tsrx b/packages/octane-query/tests/_fixtures/cached-diff.tsrx new file mode 100644 index 00000000000..35023bde249 --- /dev/null +++ b/packages/octane-query/tests/_fixtures/cached-diff.tsrx @@ -0,0 +1,26 @@ +import { + QueryClient, + QueryClientProvider, + useQuery, +} from '@tanstack/octane-query'; + +const client = new QueryClient(); + +export function Cached() @{ + const q = useQuery({ + queryKey: ['c'], + queryFn: () => Promise.resolve('fetched'), + initialData: 'seed', + staleTime: Infinity, + }); +
{'data=' + q.data + ' status=' + q.status + ' pending=' + q.isPending + ' fetching=' + + q.isFetching + + ' success=' + + q.isSuccess as string}
+} + +export function CachedApp() @{ + + + +} diff --git a/packages/octane-query/tests/_fixtures/extra.tsrx b/packages/octane-query/tests/_fixtures/extra.tsrx new file mode 100644 index 00000000000..c46c6466e0f --- /dev/null +++ b/packages/octane-query/tests/_fixtures/extra.tsrx @@ -0,0 +1,19 @@ +import { QueryClientProvider, useQuery } from '@tanstack/octane-query'; + +// queryKey derived from a prop — changing the prop swaps the query (exercises +// observer.setOptions → query change → refetch → re-render). +export function KeyedReader(props: { k: number }) @{ + const q = useQuery({ + queryKey: ['keyed', props.k], + queryFn: () => Promise.resolve('v' + props.k), + retry: false, + staleTime: Infinity, + }); +
{(q.isPending ? 'pending' : 'data:' + q.data) as string}
+} + +export function KeyedApp(props: { client: unknown; k: number }) @{ + + + +} diff --git a/packages/octane-query/tests/_fixtures/followups.tsrx b/packages/octane-query/tests/_fixtures/followups.tsrx new file mode 100644 index 00000000000..d28c09c8acf --- /dev/null +++ b/packages/octane-query/tests/_fixtures/followups.tsrx @@ -0,0 +1,118 @@ +import { Suspense } from 'octane'; +import { + QueryClientProvider, + HydrationBoundary, + useInfiniteQuery, + useSuspenseQuery, + useQueries, + useIsFetching, + useIsMutating, + usePrefetchQuery, + useMutation, + useQuery, +} from '@tanstack/octane-query'; + +export function Infinite(props: { client: unknown }) @{ + const q = useInfiniteQuery( + { + queryKey: ['inf'], + queryFn: (ctx: { pageParam: number }) => Promise.resolve('p' + ctx.pageParam), + initialPageParam: 0, + getNextPageParam: () => undefined, + retry: false, + }, + props.client, + ); +
{(q.isPending ? 'pending' : 'pages:' + q.data.pages.join(',')) as string}
+} + +export function Queries(props: { client: unknown }) @{ + const results = useQueries( + { + queries: [ + { queryKey: ['qa'], queryFn: () => Promise.resolve('A'), retry: false }, + { queryKey: ['qb'], queryFn: () => Promise.resolve('B'), retry: false }, + ], + }, + props.client, + ); +
{results.map((r: any) => (r.isPending ? '?' : r.data)).join(',') as string}
+} + +export function Fetching(props: { client: unknown; queryFn: () => Promise }) @{ + const reader = useQuery({ queryKey: ['fz'], queryFn: props.queryFn, retry: false }, props.client); + const fetching = useIsFetching(undefined, props.client); +
{'fetching:' + fetching + ' status:' + reader.status as string}
+} + +export function Mutating(props: { client: unknown; mutationFn: (v: string) => Promise }) @{ + const m = useMutation({ mutationKey: ['mz'], mutationFn: props.mutationFn }, props.client); + const pending = useIsMutating(undefined, props.client); +
+ {'pending:' + pending as string} + +
+} + +export function Prefetch(props: { client: unknown }) @{ + usePrefetchQuery( + { queryKey: ['pf'], queryFn: () => Promise.resolve('PF'), retry: false }, + props.client, + ); + ok +} + +function SuspenseReader(props: { queryFn: () => Promise }) @{ + const q = useSuspenseQuery({ queryKey: ['susq'], queryFn: props.queryFn, retry: false }); + {'data:' + q.data as string} +} + +function SequentialSuspenseReader(props: { + queryFnA: () => Promise; + queryFnB: () => Promise; +}) @{ + const a = useSuspenseQuery({ queryKey: ['susq-a'], queryFn: props.queryFnA, retry: false }); + const b = useSuspenseQuery({ queryKey: ['susq-b'], queryFn: props.queryFnB, retry: false }); + {a.data + '/' + b.data as string} +} + +export function SuspenseQApp(props: { client: unknown; queryFn: () => Promise }) @{ + + loading}> + + + +} + +export function SequentialSuspenseQApp(props: { + client: unknown; + queryFnA: () => Promise; + queryFnB: () => Promise; +}) @{ + + @try { + + } @pending { + loading + } @catch (error) { + {'error:' + (error as Error).message as string} + } + +} + +function HydratedReader() @{ + const q = useQuery({ + queryKey: ['h'], + queryFn: () => Promise.resolve('refetched'), + staleTime: Infinity, + }); + {'data:' + q.data as string} +} + +export function HydrationApp(props: { client: unknown; state: unknown }) @{ + + + + + +} diff --git a/packages/octane-query/tests/_fixtures/parity.tsrx b/packages/octane-query/tests/_fixtures/parity.tsrx new file mode 100644 index 00000000000..4186cc6d33b --- /dev/null +++ b/packages/octane-query/tests/_fixtures/parity.tsrx @@ -0,0 +1,260 @@ +import { ErrorBoundary, Suspense, useState } from 'octane'; +import { + QueryClientProvider, + QueryErrorResetBoundary, + useQueryErrorResetBoundary, + IsRestoringProvider, + HydrationBoundary, + useQuery, + useQueries, + useInfiniteQuery, + useSuspenseQuery, + useSuspenseInfiniteQuery, + usePrefetchInfiniteQuery, + useMutation, + useMutationState, + skipToken, +} from '@tanstack/octane-query'; + +// --- Suspense error retry loop (clearReset): a suspense query that ALWAYS +// fails. After reset()+retry the refetch fails again — the boundary must show +// the error again (not fall through and render undefined data). --- +function AlwaysFailReader(props: { queryFn: () => Promise }) @{ + const q = useSuspenseQuery({ queryKey: ['fail'], queryFn: props.queryFn, retry: false }); + {'data:' + q.data as string} +} + +function SuspenseRetryBoundary(props: { queryFn: () => Promise }) @{ + const errReset = useQueryErrorResetBoundary(); + const onRetry = (reset: () => void) => () => { + errReset.reset(); + reset(); + }; +
+ {(e as Error).message as string} + +
} + > + loading}> + + +
+} + +export function SuspenseRetryApp(props: { client: unknown; queryFn: () => Promise }) @{ + + + + + +} + +// --- QueryErrorResetBoundary render-prop children --- +export const renderPropValues: unknown[] = []; + +export function RenderPropResetApp(props: { client: unknown }) @{ + + + {(value) => { + renderPropValues.push(value); + return {'reset:' + typeof value.reset}; + }} + + +} + +// --- HydrationBoundary --- +function HydratedReader(props: { queryKey: unknown[] }) @{ + const q = useQuery({ queryKey: props.queryKey, queryFn: skipToken }); + {String(q.data ?? 'none') as string} +} + +export function HydrationApp(props: { client: unknown; state: unknown; queryKey: unknown[] }) @{ + + + + + +} + +// --- experimental_prefetchInRender: expose result.promise --- +export const promiseCapture: { promise: Promise | null } = { promise: null }; + +function PrefetchInRenderReader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ + queryKey: ['pir'], + queryFn: props.queryFn, + experimental_prefetchInRender: true, + retry: false, + }); + promiseCapture.promise = q.promise; + {(q.isPending ? 'pending' : 'data:' + q.data) as string} +} + +export function PrefetchInRenderApp(props: { client: unknown; queryFn: () => Promise }) @{ + + + +} + +// --- useQueries combine --- +function CombineReader() @{ + const combined = useQueries({ + queries: [ + { queryKey: ['c', 1], queryFn: () => Promise.resolve(1) }, + { queryKey: ['c', 2], queryFn: () => Promise.resolve(2) }, + ], + combine: (results) => ({ + sum: results.reduce((acc: number, r: any) => acc + (r.data ?? 0), 0), + allDone: results.every((r: any) => r.isSuccess), + }), + }); + {combined.sum + ':' + combined.allDone} +} + +export function CombineApp(props: { client: unknown }) @{ + + + +} + +// --- skipToken: never fetches --- +export const skipTokenCalls = { count: 0 }; + +function SkipTokenReader() @{ + const q = useQuery({ queryKey: ['skip'], queryFn: skipToken }); + {q.status + ':' + q.fetchStatus} +} + +export function SkipTokenApp(props: { client: unknown }) @{ + + + +} + +// --- useInfiniteQuery: fetchNextPage --- +function InfiniteReader(props: { pageFn: (page: number) => Promise }) @{ + const q = useInfiniteQuery({ + queryKey: ['inf'], + queryFn: ({ pageParam }) => props.pageFn(pageParam as number), + initialPageParam: 0, + getNextPageParam: (_last: unknown, all: unknown[]) => (all.length < 3 ? all.length : undefined), + }); +
+ {(q.data ? q.data.pages.join(',') : 'none') as string} + {String(q.hasNextPage)} + +
+} + +export function InfiniteApp(props: { + client: unknown; + pageFn: (page: number) => Promise; +}) @{ + + + +} + +// --- useSuspenseInfiniteQuery --- +function SuspenseInfiniteReader(props: { pageFn: (page: number) => Promise }) @{ + const q = useSuspenseInfiniteQuery({ + queryKey: ['sinf'], + queryFn: ({ pageParam }) => props.pageFn(pageParam as number), + initialPageParam: 0, + getNextPageParam: () => undefined, + }); + {q.data.pages.join(',') as string} +} + +export function SuspenseInfiniteApp(props: { + client: unknown; + pageFn: (page: number) => Promise; +}) @{ + + loading}> + + + +} + +// --- usePrefetchInfiniteQuery --- +function PrefetchInfinite(props: { pageFn: (page: number) => Promise }) @{ + usePrefetchInfiniteQuery({ + queryKey: ['pinf'], + queryFn: ({ pageParam }) => props.pageFn(pageParam as number), + initialPageParam: 0, + }); + {'prefetched'} +} + +export function PrefetchInfiniteApp(props: { + client: unknown; + pageFn: (page: number) => Promise; +}) @{ + + + +} + +// --- useMutationState: filters + select --- +export const mutationCounter = { n: 0 }; + +function MutationStateReader(props: { mutationFn: (v: string) => Promise }) @{ + const mutation = useMutation({ mutationKey: ['m1'], mutationFn: props.mutationFn }); + const variables = useMutationState({ + filters: { mutationKey: ['m1'] }, + select: (m) => m.state.variables, + }); +
+ + {variables.join(',') || 'none' as string} +
+} + +export function MutationStateApp(props: { + client: unknown; + mutationFn: (v: string) => Promise; +}) @{ + + + +} + +// --- Tracked props: a data-only reader must NOT re-render on isFetching flips --- +export const trackedRenders = { count: 0 }; + +function TrackedReader(props: { queryFn: () => Promise }) @{ + trackedRenders.count++; + const q = useQuery({ queryKey: ['tracked'], queryFn: props.queryFn, staleTime: 0 }); + {String(q.data ?? 'none') as string} +} + +export function TrackedApp(props: { client: unknown; queryFn: () => Promise }) @{ + + + +} + +// --- isRestoring flip: true → false starts the fetch --- +export const restoreSetter: { set: ((v: boolean) => void) | null } = { set: null }; + +function FlipRestoring(props: { queryFn: () => Promise }) @{ + const [restoring, setRestoring] = useState(true); + restoreSetter.set = setRestoring; + + + +} + +function RestoreFlipReader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ queryKey: ['flip'], queryFn: props.queryFn, retry: false }); + {(q.isPending ? 'pending' : 'data:' + q.data) as string} +} + +export function FlipRestoringApp(props: { client: unknown; queryFn: () => Promise }) @{ + + + +} diff --git a/packages/octane-query/tests/_fixtures/smoke.tsrx b/packages/octane-query/tests/_fixtures/smoke.tsrx new file mode 100644 index 00000000000..168f49bc2b7 --- /dev/null +++ b/packages/octane-query/tests/_fixtures/smoke.tsrx @@ -0,0 +1,10 @@ +import { useQuery } from '@tanstack/octane-query'; + +export function Todo(props) @{ + const q = useQuery({ queryKey: ['todo'], queryFn: props.queryFn, retry: false }, props.client); +
{(q.isPending + ? 'pending' + : q.isError + ? 'error:' + (q.error as Error).message + : 'data:' + q.data) as string}
+} diff --git a/packages/octane-query/tests/_fixtures/streaming-ssr.tsrx b/packages/octane-query/tests/_fixtures/streaming-ssr.tsrx new file mode 100644 index 00000000000..86181443e61 --- /dev/null +++ b/packages/octane-query/tests/_fixtures/streaming-ssr.tsrx @@ -0,0 +1,91 @@ +import { + QueryClientProvider, + useSuspenseQueries, + useSuspenseQuery, +} from '@tanstack/octane-query'; +import type { QueryClient } from '@tanstack/query-core'; + +type ReaderProps = { + a: () => Promise; + b: () => Promise; +}; + +type AppProps = ReaderProps & { + client: QueryClient; +}; + +function QueryReader(props: ReaderProps) @{ + const a = useSuspenseQuery({ + queryKey: ['streaming-ssr', 'query', 'a'], + queryFn: props.a, + retry: false, + }); + const b = useSuspenseQuery({ + queryKey: ['streaming-ssr', 'query', 'b'], + queryFn: props.b, + retry: false, + }); + {a.data + '/' + b.data as string} +} + +function QueriesReader(props: ReaderProps) @{ + const [a] = useSuspenseQueries({ + queries: [ + { + queryKey: ['streaming-ssr', 'queries', 'a'], + queryFn: props.a, + retry: false, + }, + ], + }); + const [b] = useSuspenseQueries({ + queries: [ + { + queryKey: ['streaming-ssr', 'queries', 'b'], + queryFn: props.b, + retry: false, + }, + ], + }); + {a.data + '/' + b.data as string} +} + +function useWrappedQuery( + key: 'a' | 'b', + queryFn: () => Promise, +) { + return useSuspenseQuery({ + queryKey: ['streaming-ssr', 'wrapped-query', key], + queryFn, + retry: false, + }); +} + +function WrappedQueryReader(props: ReaderProps) @{ + const a = useWrappedQuery('a', props.a); + const b = useWrappedQuery('b', props.b); + {a.data + '/' + b.data as string} +} + +export function StreamingSuspenseApp(props: AppProps & { + mode: 'query' | 'queries'; +}) @{ + const Reader = props.mode === 'query' ? QueryReader : QueriesReader; + + @try { + + } @pending { + loading + } + +} + +export function WrappedStreamingSuspenseApp(props: AppProps) @{ + + @try { + + } @pending { + loading + } + +} diff --git a/packages/octane-query/tests/_fixtures/suspense.tsrx b/packages/octane-query/tests/_fixtures/suspense.tsrx new file mode 100644 index 00000000000..bb9288335bf --- /dev/null +++ b/packages/octane-query/tests/_fixtures/suspense.tsrx @@ -0,0 +1,53 @@ +import { Suspense } from 'octane'; +import { QueryClientProvider, useQuery, useSuspenseQueries } from '@tanstack/octane-query'; + +// A suspense query: throws its in-flight promise (→ @pending) and, on error, +// throws the error (→ @catch). +export function SuspendingReader(props: { queryFn: () => Promise }) @{ + const q = useQuery({ queryKey: ['s'], queryFn: props.queryFn, suspense: true, retry: false }); + {'data:' + q.data as string} +} + +export function SuspenseApp(props: { client: unknown; queryFn: () => Promise }) @{ + + @try { + + } @pending { + loading + } @catch (e) { + {'caught:' + (e as Error).message as string} + } + +} + +// The react-query-idiomatic form: octane's component (not @try) wraps a +// suspense query. +export function SuspenseComponentApp(props: { client: unknown; queryFn: () => Promise }) @{ + + loading}> + + + +} + +function SuspenseQueriesReader(props: { a: () => Promise; b: () => Promise }) @{ + const results = useSuspenseQueries({ + queries: [ + { queryKey: ['sq', 'a'], queryFn: props.a }, + { queryKey: ['sq', 'b'], queryFn: props.b }, + ], + }); + {'data:' + results[0].data + '/' + results[1].data as string} +} + +export function SuspenseQueriesApp(props: { + client: unknown; + a: () => Promise; + b: () => Promise; +}) @{ + + loading}> + + + +} diff --git a/packages/octane-query/tests/_fixtures/transition-suspense.tsrx b/packages/octane-query/tests/_fixtures/transition-suspense.tsrx new file mode 100644 index 00000000000..ee52e7482dd --- /dev/null +++ b/packages/octane-query/tests/_fixtures/transition-suspense.tsrx @@ -0,0 +1,64 @@ +import { useState, useTransition } from 'octane'; +import { QueryClientProvider, useSuspenseQuery } from '@tanstack/octane-query'; + +// --------------------------------------------------------------------------- +// React useTransition + Suspense parity for useSuspenseQuery. +// +// A `useSuspenseQuery` whose queryKey depends on `value`. When `value` changes +// inside a transition, the query refetches under a NEW key and the reader +// re-suspends. The query observer notifies ASYNCHRONOUSLY (query-core's +// notifyManager uses setTimeout(0) — a macrotask), so by the time the re-render +// that re-suspends on the new in-flight fetch actually runs, octane's +// transition window has already closed and the re-render is URGENT. +// +// React keeps the previously committed content on screen until the new query +// resolves — it does NOT flash the Suspense fallback. This fixture lets the +// test drive that exact sequence: commit value=1, transition to value=2, +// observe the value=1 content holds, then resolves to value=2. +// +// `props.bindSetValue` captures the (transition-wrapped) value setter, and +// `props.queryFn(value)` returns a per-value promise the test controls. +// --------------------------------------------------------------------------- + +function PendingProbe() @{ + const [isPending] = useTransition(); + + {isPending ? 'pending' : 'idle'} + +} + +function Reader(props) @{ + const [value, setValue] = useState(1); + const [, start] = useTransition(); + // Expose a transition-priority value setter to the test. + props.bindSetValue((v) => start(() => setValue(v))); + // Expose an URGENT (non-transition) value setter so the test can re-render the + // reader under a new key WHILE the boundary is transition-held — modelling the + // query observer's async macrotask notify, which lands at urgent priority. + if (props.bindSetValueUrgent) props.bindSetValueUrgent((v) => setValue(v)); + const q = useSuspenseQuery({ + queryKey: ['transition-suspense', value], + queryFn: () => props.queryFn(value), + retry: false, + }); + {'data:' + q.data as string} +} + +export function TransitionSuspenseApp(props) @{ + +
+ + @try { + + } @pending { + loading + } @catch (e) { + {'caught:' + (e as Error).message as string} + } +
+
+} diff --git a/packages/octane-query/tests/_helpers.ts b/packages/octane-query/tests/_helpers.ts new file mode 100644 index 00000000000..d181d16b7aa --- /dev/null +++ b/packages/octane-query/tests/_helpers.ts @@ -0,0 +1,94 @@ +/** + * Test helpers — thin wrapper around createRoot + flushSync so tests can + * mount a component, inspect the DOM, fire events, and unmount cleanly. + */ +import { + createRoot, + delegateEvents, + drainPassiveEffects, + flushSync, +} from 'octane' +import type { ComponentBody, Root } from 'octane' + +// Delegated events used by test fixtures. Setup-once. +delegateEvents(['click', 'input', 'change', 'keydown', 'submit']) + +interface MountResult { + container: HTMLElement + root: Root + html: () => string + unmount: () => void + click: (selector: string) => void + find: (selector: string) => Element + findAll: (selector: string) => Array + /** Re-render with new props (drains queued renders synchronously). */ + update: (body: ComponentBody, props?: TProps) => void +} + +export function mount( + body: ComponentBody, + props?: TProps, +): MountResult { + const container = document.createElement('div') + document.body.appendChild(container) + const root = createRoot(container) + try { + root.render(body, props) + flushSync(() => {}) + } catch (err) { + // A throwing initial render can't be unmounted by the caller because mount + // never returns. Release the root's delegation/ownership registrations as + // well as its container before preserving the original render error. + try { + root.unmount() + } finally { + container.remove() + } + throw err + } + return { + container, + root, + html() { + return container.innerHTML + }, + unmount() { + root.unmount() + container.remove() + }, + click(selector) { + const el = container.querySelector(selector) + if (!el) throw new Error(`no element matching ${selector}`) + flushSync(() => { + // HTMLElement has `.click()`. SVGElement / MathMLElement do NOT + // (they're not in the HTMLElement prototype chain), so we dispatch + // a bubbling click event explicitly — matches the real browser path + // the runtime listens on at the delegation root. + if (typeof (el as HTMLElement).click === 'function') { + ;(el as HTMLElement).click() + } else { + el.dispatchEvent( + new MouseEvent('click', { bubbles: true, cancelable: true }), + ) + } + }) + }, + find(selector) { + const el = container.querySelector(selector) + if (!el) throw new Error(`no element matching ${selector}`) + return el + }, + findAll(selector) { + return Array.from(container.querySelectorAll(selector)) + }, + update(nextBody, nextProps) { + flushSync(() => root.render(nextBody, nextProps)) + }, + } +} + +/** Older name kept for tests that read more naturally with it. */ +export function nextPaint(): Promise { + drainPassiveEffects() + return Promise.resolve() +} diff --git a/packages/octane-query/tests/conformance/boundaries.test.ts b/packages/octane-query/tests/conformance/boundaries.test.ts new file mode 100644 index 00000000000..fc1981309f7 --- /dev/null +++ b/packages/octane-query/tests/conformance/boundaries.test.ts @@ -0,0 +1,70 @@ +/** + * IsRestoringProvider / useIsRestoring and QueryErrorResetBoundary / + * useQueryErrorResetBoundary — the persistence-restore gate and the + * error-boundary reset coordinator. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { ResetApp, RestoringApp } from '../_fixtures/boundaries.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +async function flush() { + for (let i = 0; i < 6; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('IsRestoring', () => { + it('does NOT subscribe/fetch while restoring', async () => { + let called = 0 + const queryFn = () => { + called++ + return Promise.resolve('x') + } + const r = mount(RestoringApp, { client, restoring: true, queryFn }) + await flush() + expect(called).toBe(0) + expect(r.find('#status').textContent).toBe('pending') + r.unmount() + }) + + it('fetches normally when not restoring', async () => { + let called = 0 + const queryFn = () => { + called++ + return Promise.resolve('y') + } + const r = mount(RestoringApp, { client, restoring: false, queryFn }) + await flush() + expect(called).toBeGreaterThan(0) + expect(r.find('#status').textContent).toBe('data:y') + r.unmount() + }) +}) + +describe('QueryErrorResetBoundary', () => { + it('reset() lets the query retry instead of re-throwing', async () => { + let calls = 0 + const queryFn = () => { + calls++ + return calls === 1 + ? Promise.reject(new Error('boom')) + : Promise.resolve('recovered') + } + const r = mount(ResetApp, { client, queryFn }) + await flush() + // First fetch errored → @catch/ fallback (the retry button). + expect(r.find('#retry').textContent).toBe('retry') + r.click('#retry') + await flush() + expect(r.find('#data').textContent).toBe('data:recovered') + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/conformance/exports.test.ts b/packages/octane-query/tests/conformance/exports.test.ts new file mode 100644 index 00000000000..d767326367b --- /dev/null +++ b/packages/octane-query/tests/conformance/exports.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, it } from 'vitest' +import * as query from '@tanstack/octane-query' +import * as reactQuery from '@tanstack/react-query' + +describe('@tanstack/octane-query export surface', () => { + it('provides EVERY runtime export of real @tanstack/react-query', () => { + // The gold-standard parity lock: diff the whole runtime surface against + // the actual react-query module. Anything upstream ships that the port + // lacks fails here by name. + const upstream = Object.keys(reactQuery).sort() + const port = new Set(Object.keys(query)) + const missing = upstream.filter((name) => !port.has(name)) + expect(missing).toEqual([]) + }) + + it('exports nothing upstream keeps private (no accidental superset)', () => { + const upstream = new Set(Object.keys(reactQuery)) + const extras = Object.keys(query) + .filter((name) => !upstream.has(name)) + .sort() + // The port intentionally has NO binding-level extras. (query-core + // re-exports that react-query happens not to forward would show up here — + // keep that list empty too, so the surfaces stay byte-comparable.) + expect(extras).toEqual([]) + }) + + it('option helper exports are identity helpers like @tanstack/react-query', () => { + const q = { queryKey: ['x'], queryFn: async () => 'x' } + const inf = { + queryKey: ['i'], + queryFn: async () => ['i'], + initialPageParam: 0, + } + const mut = { mutationFn: async (value: string) => value } + expect(query.queryOptions(q as any)).toBe(q) + expect(query.infiniteQueryOptions(inf as any)).toBe(inf) + expect(query.mutationOptions(mut as any)).toBe(mut) + }) +}) diff --git a/packages/octane-query/tests/conformance/extra.test.ts b/packages/octane-query/tests/conformance/extra.test.ts new file mode 100644 index 00000000000..5823ee3bc9c --- /dev/null +++ b/packages/octane-query/tests/conformance/extra.test.ts @@ -0,0 +1,90 @@ +/** + * Additional conformance driven by the port review: query-key change → refetch, + * unmount → observer unsubscribe, the explicit-client (no-provider) path, and the + * provider mounting/unmounting the client. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { KeyedApp } from '../_fixtures/extra.tsrx' +import { App } from '../_fixtures/app.tsrx' +import { Todo } from '../_fixtures/smoke.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +async function flush() { + for (let i = 0; i < 5; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('query-key change', () => { + it('swaps the query and refetches when the key changes', async () => { + const r = mount(KeyedApp, { client, k: 1 }) + await flush() + expect(r.find('#status').textContent).toBe('data:v1') + r.update(KeyedApp, { client, k: 2 }) + await flush() + expect(r.find('#status').textContent).toBe('data:v2') + r.unmount() + }) +}) + +describe('unmount unsubscribes the observer', () => { + it('drops the query observer on unmount (no leak)', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(App, { client, queryFn }) + await flush() + resolveFn('x') + await flush() + const query = client.getQueryCache().find({ queryKey: ['k'] })! + expect(query.observers.length).toBeGreaterThan(0) + r.unmount() + await flush() + expect(query.observers.length).toBe(0) + }) +}) + +describe('explicit client (no provider)', () => { + it('useQuery(options, client) resolves the passed client', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(Todo, { client, queryFn }) + expect(r.find('#status').textContent).toBe('pending') + await flush() + resolveFn('direct') + await flush() + expect(r.find('#status').textContent).toBe('data:direct') + r.unmount() + }) +}) + +describe('QueryClientProvider mounts/unmounts the client', () => { + it('calls client.mount() on mount and client.unmount() on unmount', async () => { + const c = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + let mounts = 0 + let unmounts = 0 + const realMount = c.mount.bind(c) + const realUnmount = c.unmount.bind(c) + c.mount = () => { + mounts++ + return realMount() + } + c.unmount = () => { + unmounts++ + return realUnmount() + } + const r = mount(App, { client: c, queryFn: () => Promise.resolve('x') }) + await flush() + expect(mounts).toBe(1) + r.unmount() + await flush() + expect(unmounts).toBe(1) + }) +}) diff --git a/packages/octane-query/tests/conformance/followups.test.ts b/packages/octane-query/tests/conformance/followups.test.ts new file mode 100644 index 00000000000..8f2e42c863c --- /dev/null +++ b/packages/octane-query/tests/conformance/followups.test.ts @@ -0,0 +1,150 @@ +/** + * Follow-up hooks: useInfiniteQuery, useSuspenseQuery, useQueries, useIsFetching, + * useIsMutating (→ useMutationState), and usePrefetchQuery — each driving the real + * query-core observers/caches. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient, dehydrate } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { + Fetching, + HydrationApp, + Infinite, + Mutating, + Prefetch, + Queries, + SequentialSuspenseQApp, + SuspenseQApp, +} from '../_fixtures/followups.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +async function flush() { + for (let i = 0; i < 6; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('useInfiniteQuery', () => { + it('loads the first page', async () => { + const r = mount(Infinite, { client }) + expect(r.find('#status').textContent).toBe('pending') + await flush() + expect(r.find('#status').textContent).toBe('pages:p0') + r.unmount() + }) +}) + +describe('useQueries', () => { + it('runs multiple queries and combines their results', async () => { + const r = mount(Queries, { client }) + await flush() + expect(r.find('#status').textContent).toBe('A,B') + r.unmount() + }) +}) + +describe('useIsFetching', () => { + it('reports 1 while fetching and 0 once settled', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(Fetching, { client, queryFn }) + await flush() + expect(r.find('#status').textContent).toBe('fetching:1 status:pending') + resolveFn('x') + await flush() + expect(r.find('#status').textContent).toBe('fetching:0 status:success') + r.unmount() + }) +}) + +describe('useIsMutating / useMutationState', () => { + it('reports 1 while a mutation is pending, then 0', async () => { + let resolveFn: (v: string) => void = () => {} + const mutationFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(Mutating, { client, mutationFn }) + expect(r.find('#status').textContent).toBe('pending:0') + r.click('#go') + await flush() + expect(r.find('#status').textContent).toBe('pending:1') + resolveFn('done') + await flush() + expect(r.find('#status').textContent).toBe('pending:0') + r.unmount() + }) +}) + +describe('usePrefetchQuery', () => { + it('prefetches into the cache', async () => { + const r = mount(Prefetch, { client }) + await flush() + expect(client.getQueryData(['pf'])).toBe('PF') + r.unmount() + }) +}) + +describe('HydrationBoundary', () => { + it('hydrates dehydrated state into the client before children read it', async () => { + const source = new QueryClient() + await source.prefetchQuery({ + queryKey: ['h'], + queryFn: () => Promise.resolve('hydrated'), + }) + const state = dehydrate(source) + const r = mount(HydrationApp, { client, state }) + await flush() + // staleTime:Infinity + hydrated data ⇒ no refetch; the hydrated value shows. + expect(r.find('#hdata').textContent).toBe('data:hydrated') + r.unmount() + }) +}) + +describe('useSuspenseQuery', () => { + it('suspends (fallback), then renders the guaranteed data', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(SuspenseQApp, { client, queryFn }) + expect(r.find('#fallback').textContent).toBe('loading') + await flush() + resolveFn('ready') + await flush() + expect(r.find('#data').textContent).toBe('data:ready') + r.unmount() + }) + + it('keeps sequential queries suspended until each query has data', async () => { + let resolveA: (value: string) => void = () => {} + let resolveB: (value: string) => void = () => {} + const promiseA = new Promise((resolve) => { + resolveA = resolve + }) + const promiseB = new Promise((resolve) => { + resolveB = resolve + }) + const queryFnA = () => promiseA + const queryFnB = () => promiseB + + const r = mount(SequentialSuspenseQApp, { client, queryFnA, queryFnB }) + expect(r.find('#sequential-fallback').textContent).toBe('loading') + + resolveA('A') + await flush() + // Resolving the first query must not expose the second query's pending + // `data`; the boundary stays suspended until that data is also defined. + expect(r.findAll('#sequential-fallback')).toHaveLength(1) + expect(r.findAll('#sequential-data')).toHaveLength(0) + expect(r.findAll('#sequential-error')).toHaveLength(0) + + resolveB('B') + await flush() + expect(r.find('#sequential-data').textContent).toBe('A/B') + expect(r.findAll('#sequential-fallback')).toHaveLength(0) + expect(r.findAll('#sequential-error')).toHaveLength(0) + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/conformance/parity.test.ts b/packages/octane-query/tests/conformance/parity.test.ts new file mode 100644 index 00000000000..7b9f87daf80 --- /dev/null +++ b/packages/octane-query/tests/conformance/parity.test.ts @@ -0,0 +1,304 @@ +/** + * Parity sweep — the behaviors added/fixed to close the audit gaps: the suspense + * clearReset retry loop, render-prop QueryErrorResetBoundary, HydrationBoundary + * newer/older/streaming semantics, experimental_prefetchInRender's promise, + * useQueries combine, skipToken, fetchNextPage, useSuspenseInfiniteQuery, + * usePrefetchInfiniteQuery, useMutationState filters+select, tracked-props + * render efficiency, and the isRestoring true→false flip. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient, dehydrate } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { + CombineApp, + FlipRestoringApp, + HydrationApp, + InfiniteApp, + MutationStateApp, + PrefetchInRenderApp, + PrefetchInfiniteApp, + RenderPropResetApp, + SkipTokenApp, + SuspenseInfiniteApp, + SuspenseRetryApp, + TrackedApp, + mutationCounter, + promiseCapture, + renderPropValues, + restoreSetter, + trackedRenders, +} from '../_fixtures/parity.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +async function flush(n = 6) { + for (let i = 0; i < n; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('suspense error retry loop (clearReset)', () => { + it('reset → retry → fail AGAIN re-throws to the boundary (no undefined-data fall-through)', async () => { + let calls = 0 + const queryFn = () => { + calls++ + return Promise.reject(new Error('boom-' + calls)) + } + const r = mount(SuspenseRetryApp, { client, queryFn }) + await flush() + + // First failure reaches the boundary. + expect(r.find('#sq-msg').textContent).toBe('boom-1') + + // Reset + retry: the refetch fails again — the boundary must re-show the + // error. Before the clearReset fix, isReset() stayed true at replay so the + // component fell through and rendered undefined data. + ;(r.find('#sq-retry') as HTMLElement).click() + await flush() + + expect(calls).toBeGreaterThanOrEqual(2) + expect(r.findAll('#sq-data').length).toBe(0) + expect(r.find('#sq-msg').textContent).toContain('boom') + r.unmount() + }) +}) + +describe('QueryErrorResetBoundary render-prop children', () => { + it('invokes function children with the boundary value', async () => { + renderPropValues.length = 0 + const r = mount(RenderPropResetApp, { client }) + await flush() + + expect(r.find('#rp-child').textContent).toBe('reset:function') + const value = renderPropValues[0] as any + expect(typeof value.reset).toBe('function') + expect(typeof value.isReset).toBe('function') + expect(typeof value.clearReset).toBe('function') + // The provided context value is the same object handed to children. + expect(value.isReset()).toBe(false) + value.reset() + expect(value.isReset()).toBe(true) + r.unmount() + }) +}) + +describe('HydrationBoundary', () => { + // Real dehydrate() payload for `key`, with dataUpdatedAt shifted so the + // entry is deterministically newer/older than the cache. + function dehydratedWith( + key: Array, + data: string, + dataUpdatedAt: number, + ) { + const source = new QueryClient() + source.setQueryData(key, data) + const state = dehydrate(source) as any + state.queries[0].state.dataUpdatedAt = dataUpdatedAt + return state + } + + it('hydrates NEWER dehydrated data over the cache, leaves NEWER cache data alone', async () => { + const key = ['h1'] + client.setQueryData(key, 'cached') + const cachedAt = client.getQueryCache().find({ queryKey: key })!.state + .dataUpdatedAt + + // Newer dehydrated entry — wins. + const r = mount(HydrationApp, { + client, + state: dehydratedWith(key, 'newer', cachedAt + 1000), + queryKey: key, + }) + await flush() + expect(r.find('#hydrated').textContent).toBe('newer') + r.unmount() + + // Older dehydrated entry — must NOT clobber. + const r2 = mount(HydrationApp, { + client, + state: dehydratedWith(key, 'older', cachedAt - 1000), + queryKey: key, + }) + await flush() + expect(r2.find('#hydrated').textContent).toBe('newer') + r2.unmount() + }) + + it('a dehydrated STREAMING entry (pending promise + later dehydratedAt) re-hydrates a settled query', async () => { + const key = ['h2'] + client.setQueryData(key, 'settled') + + // A REAL streaming chunk: dehydrate a source whose query is still + // PENDING, with the documented streaming opt-in (shouldDehydrateQuery + // including pending) — the payload then carries the in-flight promise + + // dehydratedAt. Its dataUpdatedAt is 0 (no data yet), so only upstream's + // streaming condition (promise && dehydratedAt > cache.dataUpdatedAt) + // applies. + const source = new QueryClient() + const inFlight = source.prefetchQuery({ + queryKey: key, + queryFn: () => + new Promise((res) => setTimeout(() => res('streamed'), 5)), + }) + const chunk = dehydrate(source, { + shouldDehydrateQuery: () => true, + }) as any + expect(chunk.queries[0].promise).toBeTruthy() + chunk.queries[0].dehydratedAt = + client.getQueryCache().find({ queryKey: key })!.state.dataUpdatedAt + 1000 + + const r = mount(HydrationApp, { client, state: chunk, queryKey: key }) + await inFlight + await flush() + expect(r.find('#hydrated').textContent).toBe('streamed') + r.unmount() + }) + + it('round-trips a real dehydrate() payload', async () => { + const source = new QueryClient() + source.setQueryData(['rt'], 'round-trip') + const state = dehydrate(source) + + const r = mount(HydrationApp, { client, state, queryKey: ['rt'] }) + await flush() + expect(r.find('#hydrated').textContent).toBe('round-trip') + r.unmount() + }) +}) + +describe('experimental_prefetchInRender', () => { + it('result.promise resolves with the data', async () => { + promiseCapture.promise = null + const queryFn = () => + new Promise((res) => setTimeout(() => res('pir-data'), 5)) + const r = mount(PrefetchInRenderApp, { client, queryFn }) + + expect(promiseCapture.promise).toBeTruthy() + await expect(promiseCapture.promise).resolves.toBe('pir-data') + await flush() + expect(r.find('#pir').textContent).toBe('data:pir-data') + r.unmount() + }) +}) + +describe('useQueries combine', () => { + it('renders the combined aggregate, not the raw results array', async () => { + const r = mount(CombineApp, { client }) + await flush() + expect(r.find('#combined').textContent).toBe('3:true') + r.unmount() + }) +}) + +describe('skipToken', () => { + it('disables the query — pending status, idle fetchStatus, no fetch', async () => { + const r = mount(SkipTokenApp, { client }) + await flush() + expect(r.find('#skip').textContent).toBe('pending:idle') + r.unmount() + }) +}) + +describe('useInfiniteQuery fetchNextPage', () => { + it('appends pages and reports hasNextPage', async () => { + const pageFn = (page: number) => Promise.resolve('p' + page) + const r = mount(InfiniteApp, { client, pageFn }) + await flush() + expect(r.find('#pages').textContent).toBe('p0') + expect(r.find('#has-next').textContent).toBe('true') + ;(r.find('#next') as HTMLElement).click() + await flush() + expect(r.find('#pages').textContent).toBe('p0,p1') + ;(r.find('#next') as HTMLElement).click() + await flush() + expect(r.find('#pages').textContent).toBe('p0,p1,p2') + expect(r.find('#has-next').textContent).toBe('false') + r.unmount() + }) +}) + +describe('useSuspenseInfiniteQuery', () => { + it('suspends then renders the first page', async () => { + const pageFn = (page: number) => + new Promise((res) => setTimeout(() => res('sp' + page), 5)) + const r = mount(SuspenseInfiniteApp, { client, pageFn }) + expect(r.findAll('#sinf-loading').length).toBe(1) + await flush() + expect(r.find('#sinf').textContent).toBe('sp0') + r.unmount() + }) +}) + +describe('usePrefetchInfiniteQuery', () => { + it('primes the cache with the first page', async () => { + const pageFn = (page: number) => Promise.resolve('pf' + page) + const r = mount(PrefetchInfiniteApp, { client, pageFn }) + await flush() + const state = client.getQueryState(['pinf']) as any + expect(state?.data?.pages).toEqual(['pf0']) + r.unmount() + }) +}) + +describe('useMutationState filters + select', () => { + it('selects variables of mutations matching the key filter', async () => { + mutationCounter.n = 0 + const mutationFn = (v: string) => Promise.resolve(v) + const r = mount(MutationStateApp, { client, mutationFn }) + await flush() + expect(r.find('#vars').textContent).toBe('none') + ;(r.find('#mutate') as HTMLElement).click() + await flush() + expect(r.find('#vars').textContent).toBe('v-1') + ;(r.find('#mutate') as HTMLElement).click() + await flush() + expect(r.find('#vars').textContent).toBe('v-1,v-2') + r.unmount() + }) +}) + +describe('tracked properties', () => { + it('a data-only reader does NOT re-render on an isFetching-only change', async () => { + trackedRenders.count = 0 + const queryFn = () => + new Promise((res) => setTimeout(() => res('t'), 2)) + const r = mount(TrackedApp, { client, queryFn }) + await flush() + expect(r.find('#tracked').textContent).toBe('t') + const rendersAfterLoad = trackedRenders.count + + // A background refetch resolving to the SAME data flips isFetching + // true→false but leaves data untouched — the tracked-props subscription + // must not re-render the component for it. + await client.refetchQueries({ queryKey: ['tracked'] }) + await flush() + expect(r.find('#tracked').textContent).toBe('t') + expect(trackedRenders.count).toBe(rendersAfterLoad) + r.unmount() + }) +}) + +describe('isRestoring flip', () => { + it('true → false starts the fetch that restore was holding back', async () => { + let calls = 0 + const queryFn = () => { + calls++ + return Promise.resolve('restored') + } + const r = mount(FlipRestoringApp, { client, queryFn }) + await flush() + expect(calls).toBe(0) + expect(r.find('#flip').textContent).toBe('pending') + + restoreSetter.set!(false) + await flush() + expect(calls).toBeGreaterThan(0) + expect(r.find('#flip').textContent).toBe('data:restored') + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/conformance/query.test.ts b/packages/octane-query/tests/conformance/query.test.ts new file mode 100644 index 00000000000..3f8e64c868a --- /dev/null +++ b/packages/octane-query/tests/conformance/query.test.ts @@ -0,0 +1,79 @@ +/** + * @tanstack/octane-query conformance — useQuery / useMutation / QueryClientProvider / + * useQueryClient on octane, driving the REAL @tanstack/query-core (observers + + * caches reused verbatim). Exercises the async query lifecycle (pending → + * success / error), context client resolution, and the mutation lifecycle. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { App, MutApp, ProbeApp } from '../_fixtures/app.tsrx' + +let client: QueryClient + +beforeEach(() => { + client = new QueryClient({ + defaultOptions: { queries: { retry: false }, mutations: {} }, + }) +}) + +// query-core batches notifications on a macrotask; flush a few cycles + paints. +async function flush() { + for (let i = 0; i < 5; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('useQuery lifecycle (via QueryClientProvider)', () => { + it('pending -> success', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((r) => (resolveFn = r)) + const r = mount(App, { client, queryFn }) + expect(r.find('#status').textContent).toBe('pending') + await flush() + resolveFn('world') + await flush() + expect(r.find('#status').textContent).toBe('data:world') + r.unmount() + }) + + it('pending -> error (retry disabled)', async () => { + let rejectFn: (e: Error) => void = () => {} + const queryFn = () => new Promise((_res, rej) => (rejectFn = rej)) + const r = mount(App, { client, queryFn }) + expect(r.find('#status').textContent).toBe('pending') + await flush() + rejectFn(new Error('boom')) + await flush() + expect(r.find('#status').textContent).toBe('error:boom') + r.unmount() + }) +}) + +describe('useQueryClient', () => { + it('resolves the client provided by QueryClientProvider', async () => { + let seen: unknown = null + const r = mount(ProbeApp, { client, onClient: (c: unknown) => (seen = c) }) + await nextPaint() + expect(r.find('#probe').textContent).toBe('ok') + expect(seen).toBe(client) + r.unmount() + }) +}) + +describe('useMutation lifecycle', () => { + it('idle -> pending -> success on mutate()', async () => { + let resolveFn: (v: string) => void = () => {} + const mutationFn = () => new Promise((r) => (resolveFn = r)) + const r = mount(MutApp, { client, mutationFn }) + expect(r.find('#mstatus').textContent).toBe('idle') + r.click('#go') + await flush() + expect(r.find('#mstatus').textContent).toBe('pending') + resolveFn('done') + await flush() + expect(r.find('#mstatus').textContent).toBe('data:done') + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/conformance/streaming-ssr.test.ts b/packages/octane-query/tests/conformance/streaming-ssr.test.ts new file mode 100644 index 00000000000..bb75354f614 --- /dev/null +++ b/packages/octane-query/tests/conformance/streaming-ssr.test.ts @@ -0,0 +1,81 @@ +// @vitest-environment node + +import { QueryClient } from '@tanstack/query-core' +import { renderToReadableStream } from 'octane/server' +import { describe, expect, it } from 'vitest' +import { + StreamingSuspenseApp, + WrappedStreamingSuspenseApp, +} from '../_fixtures/streaming-ssr.tsrx' + +function deferred() { + let resolve!: (value: T) => void + const promise = new Promise((res) => { + resolve = res + }) + return { promise, resolve } +} + +async function renderSequentialSuspense( + component: typeof StreamingSuspenseApp | typeof WrappedStreamingSuspenseApp, + extraProps: { mode: 'query' | 'queries' } | undefined, +) { + const a = deferred() + const b = deferred() + const bStarted = deferred() + let bCalls = 0 + const stream = await renderToReadableStream(component, { + ...extraProps, + client: new QueryClient(), + a: () => a.promise, + b: () => { + bCalls++ + bStarted.resolve() + return b.promise + }, + }) + const responseText = new Response(stream).text() + + let allReady = false + void stream.allReady.then(() => { + allReady = true + }) + + a.resolve('A') + await bStarted.promise + await Promise.resolve() + const finishedBeforeBResolved = allReady + + b.resolve('B') + const html = await responseText + + return { bCalls, finishedBeforeBResolved, html } +} + +describe('streaming SSR suspense replay', () => { + it.each(['query', 'queries'] as const)( + 'waits for both sequential %s hooks', + async (mode) => { + const result = await renderSequentialSuspense(StreamingSuspenseApp, { + mode, + }) + + expect(result.finishedBeforeBResolved).toBe(false) + expect(result.bCalls).toBe(1) + expect(result.html).toContain('A/B') + expect(result.html).not.toContain('A/undefined') + }, + ) + + it('keeps custom hook instances distinct during replay', async () => { + const result = await renderSequentialSuspense( + WrappedStreamingSuspenseApp, + undefined, + ) + + expect(result.finishedBeforeBResolved).toBe(false) + expect(result.bCalls).toBe(1) + expect(result.html).toContain('A/B') + expect(result.html).not.toContain('A/undefined') + }) +}) diff --git a/packages/octane-query/tests/conformance/suspense.test.ts b/packages/octane-query/tests/conformance/suspense.test.ts new file mode 100644 index 00000000000..e510d8dfaa4 --- /dev/null +++ b/packages/octane-query/tests/conformance/suspense.test.ts @@ -0,0 +1,81 @@ +/** + * Suspense + error-boundary integration: a `suspense: true` query throws its + * in-flight promise (caught by octane's `@pending`) and, on error, throws the + * error (caught by `@catch`) — the octane equivalents of React Suspense / + * ErrorBoundary. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient } from '@tanstack/octane-query' +import { mount, nextPaint } from '../_helpers' +import { + SuspenseApp, + SuspenseComponentApp, + SuspenseQueriesApp, +} from '../_fixtures/suspense.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +async function flush() { + for (let i = 0; i < 6; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +describe('suspense query', () => { + it('shows @pending while loading, then the data', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(SuspenseApp, { client, queryFn }) + // First render suspends → @pending fallback. + expect(r.find('#fallback').textContent).toBe('loading') + await flush() + resolveFn('ready') + await flush() + expect(r.find('#data').textContent).toBe('data:ready') + r.unmount() + }) + + it('shows @catch when the suspense query errors', async () => { + let rejectFn: (e: Error) => void = () => {} + const queryFn = () => new Promise((_res, rej) => (rejectFn = rej)) + const r = mount(SuspenseApp, { client, queryFn }) + expect(r.find('#fallback').textContent).toBe('loading') + await flush() + rejectFn(new Error('nope')) + await flush() + expect(r.find('#caught').textContent).toBe('caught:nope') + r.unmount() + }) + + it('works with octane’s component (not just @try)', async () => { + let resolveFn: (v: string) => void = () => {} + const queryFn = () => new Promise((res) => (resolveFn = res)) + const r = mount(SuspenseComponentApp, { client, queryFn }) + expect(r.find('#fallback').textContent).toBe('loading') + await flush() + resolveFn('ready') + await flush() + expect(r.find('#data').textContent).toBe('data:ready') + r.unmount() + }) + + it('supports useSuspenseQueries for multiple suspense queries', async () => { + let resolveA: (v: string) => void = () => {} + let resolveB: (v: string) => void = () => {} + const a = () => new Promise((res) => (resolveA = res)) + const b = () => new Promise((res) => (resolveB = res)) + const r = mount(SuspenseQueriesApp, { client, a, b }) + expect(r.find('#fallback').textContent).toBe('loading') + await flush() + resolveA('A') + resolveB('B') + await flush() + expect(r.find('#data').textContent).toBe('data:A/B') + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/conformance/transition-suspense.test.ts b/packages/octane-query/tests/conformance/transition-suspense.test.ts new file mode 100644 index 00000000000..6edaa7682ca --- /dev/null +++ b/packages/octane-query/tests/conformance/transition-suspense.test.ts @@ -0,0 +1,195 @@ +/** + * React useTransition + Suspense parity for `useSuspenseQuery`. + * + * Per React's useTransition contract (ReactSuspense*-test "transition does not + * show fallback when refetching the same boundary"): once a transition is + * showing previously-committed content, React keeps it on screen until the new + * query resolves — it does NOT flash the Suspense fallback, even though the + * query observer's notification (and thus the re-render that re-suspends on the + * new fetch) arrives asynchronously at URGENT priority (query-core's + * notifyManager schedules on a setTimeout(0) macrotask). + * + * Before the octane fix this flashed the @pending fallback during the move; the + * runtime now continues the transition hold across the urgent re-suspend. + */ +import { beforeEach, describe, expect, it } from 'vitest' +import { QueryClient } from '@tanstack/octane-query' +import { act } from 'octane' +import { mount, nextPaint } from '../_helpers' +import { TransitionSuspenseApp } from '../_fixtures/transition-suspense.tsrx' + +let client: QueryClient +beforeEach(() => { + client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + client.mount() +}) + +// Drain query-core's macrotask scheduler (setTimeout(0)) AND octane's passive +// effects several times so the observer's async notifications land. +async function flush() { + for (let i = 0; i < 8; i++) { + await new Promise((r) => setTimeout(r, 0)) + await nextPaint() + } +} + +function deferred() { + let resolve!: (v: T) => void + const promise = new Promise((res) => { + resolve = res + }) + return { promise, resolve } +} + +describe('useSuspenseQuery — transition keeps prior content, no fallback flash (React parity)', () => { + it('value=1 committed; transition to value=2 holds value=1 until value=2 resolves', async () => { + // Per-value controlled promises. value=1 resolves immediately so the first + // query commits content; value=2 stays pending until we resolve it. + const d1 = deferred() + const d2 = deferred() + const promises: Record> = { + 1: d1.promise, + 2: d2.promise, + } + const queryFn = (v: number) => promises[v] + + let setValue!: (v: number) => void + const bindSetValue = (fn: (v: number) => void) => { + setValue = fn + } + + const r = mount(TransitionSuspenseApp, { client, queryFn, bindSetValue }) + + // First render suspends → fallback while value=1's query is in flight. + expect(r.find('#fallback').textContent).toBe('loading') + + d1.resolve('one') + await flush() + // value=1 content committed. + expect(r.find('#data').textContent).toBe('data:one') + expect(r.findAll('#fallback')).toHaveLength(0) + expect(r.find('#pending').textContent).toBe('idle') + + // Transition to value=2: the reader re-renders under key ['…', 2] and the + // new query is in flight. The observer notifies asynchronously (macrotask) + // so the re-suspend re-render is URGENT — but because the boundary is + // transition-held, value=1 content STAYS and the fallback NEVER appears. + // + // The flash (pre-fix) is TRANSIENT — it shows only across the macrotask + // window between the observer's async notify and the eventual resolve, so + // asserting only after a full `flush()` would miss it. Watch the DOM with a + // MutationObserver so any momentary appearance of #fallback (or the loss of + // the value=1 content) is recorded for the whole in-flight window. + let fallbackEverSeen = false + let contentEverLost = false + const mo = new MutationObserver(() => { + if (r.container.querySelector('#fallback')) fallbackEverSeen = true + if (!r.container.querySelector('#data')) contentEverLost = true + }) + mo.observe(r.container, { childList: true, subtree: true }) + + await act(() => setValue(2)) + await flush() + mo.disconnect() + + expect(fallbackEverSeen).toBe(false) // <- pre-fix this FLASHED (true) + expect(contentEverLost).toBe(false) // value=1 content never removed + expect(r.find('#data').textContent).toBe('data:one') // OLD content held + expect(r.findAll('#fallback')).toHaveLength(0) + expect(r.find('#pending').textContent).toBe('pending') + + // Resolve value=2 → the held boundary commits the new content all at once + // and isPending returns to idle. The fallback never showed at any point. + d2.resolve('two') + await flush() + expect(r.find('#data').textContent).toBe('data:two') + expect(r.findAll('#fallback')).toHaveLength(0) + expect(r.find('#pending').textContent).toBe('idle') + + r.unmount() + }) + + it('an URGENT key change while held re-suspends the query without flashing the fallback', async () => { + // This is the exact failing shape from the hacker-news example: a transition + // changes the key and the boundary HOLDS on the new page's in-flight fetch; + // then the query observer notifies ASYNCHRONOUSLY (a setTimeout(0) macrotask) + // so a SUBSEQUENT re-render that re-suspends on a DIFFERENT in-flight query + // runs at URGENT priority. React keeps the prior content on screen; pre-fix + // octane flashed the @pending fallback on that urgent re-suspend. + // + // We model the urgent macrotask re-render by changing the key to value=3 + // urgently (NOT wrapped in a transition) WHILE the boundary is still held on + // value=2 — exactly the priority the observer notify lands at. + const d1 = deferred() + const d2 = deferred() + const d3 = deferred() + const promises: Record> = { + 1: d1.promise, + 2: d2.promise, + 3: d3.promise, + } + const queryFn = (v: number) => promises[v] + + let setValue!: (v: number) => void + let setValueUrgent!: (v: number) => void + const bindSetValue = (fn: (v: number) => void) => { + setValue = fn + } + const bindSetValueUrgent = (fn: (v: number) => void) => { + setValueUrgent = fn + } + + const r = mount(TransitionSuspenseApp, { + client, + queryFn, + bindSetValue, + bindSetValueUrgent, + }) + expect(r.find('#fallback').textContent).toBe('loading') + d1.resolve('one') + await flush() + expect(r.find('#data').textContent).toBe('data:one') + expect(r.find('#pending').textContent).toBe('idle') + + // Watch the DOM through the whole move so a transient fallback flash (or any + // removal of the value=1 content) is caught — the flash is not visible at a + // settled checkpoint. + let fallbackEverSeen = false + let contentEverLost = false + const mo = new MutationObserver(() => { + if (r.container.querySelector('#fallback')) fallbackEverSeen = true + if (!r.container.querySelector('#data')) contentEverLost = true + }) + mo.observe(r.container, { childList: true, subtree: true }) + + // Transition to value=2 → boundary HOLDS content-one on the value=2 fetch. + await act(() => setValue(2)) + await flush() + expect(r.find('#data').textContent).toBe('data:one') + expect(fallbackEverSeen).toBe(false) + + // While STILL held, an URGENT key change to value=3 re-renders the reader + // under key ['…', 3] and re-suspends on the value=3 fetch — a DIFFERENT + // thenable, at urgent priority. React holds; pre-fix octane flashed here. + await act(() => setValueUrgent(3)) + await flush() + expect(r.find('#data').textContent).toBe('data:one') // OLD content still held + expect(fallbackEverSeen).toBe(false) // <- pre-fix this FLASHED (true) + expect(r.find('#pending').textContent).toBe('pending') + + // Resolve the value=3 fetch → the held boundary commits content-three all at + // once and isPending returns to idle. + d2.resolve('two') + d3.resolve('three') + await flush() + mo.disconnect() + + expect(fallbackEverSeen).toBe(false) // never flashed at any point + expect(contentEverLost).toBe(false) // value=1 content was never removed + expect(r.find('#data').textContent).toBe('data:three') + expect(r.findAll('#fallback')).toHaveLength(0) + expect(r.find('#pending').textContent).toBe('idle') + + r.unmount() + }) +}) diff --git a/packages/octane-query/tests/differential/.gitignore b/packages/octane-query/tests/differential/.gitignore new file mode 100644 index 00000000000..e74e7ec3076 --- /dev/null +++ b/packages/octane-query/tests/differential/.gitignore @@ -0,0 +1 @@ +.react-cache/ diff --git a/packages/octane-query/tests/differential/_rig.ts b/packages/octane-query/tests/differential/_rig.ts new file mode 100644 index 00000000000..351528ed1af --- /dev/null +++ b/packages/octane-query/tests/differential/_rig.ts @@ -0,0 +1,158 @@ +import { basename, dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { expect } from 'vitest' +import { + createRoot as createOctaneRoot, + drainPassiveEffects, + flushSync, +} from 'octane' +import * as React from 'react' +import { act as reactAct } from 'react' +import { createRoot as createReactRoot } from 'react-dom/client' +import type { Root as ReactRoot } from 'react-dom/client' + +const directory = dirname(fileURLToPath(import.meta.url)) +const cacheDirectory = join(directory, '.react-cache') + +;( + globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT: boolean } +).IS_REACT_ACT_ENVIRONMENT = true + +function hashString(value: string): string { + let hash = 5381 + for (let index = 0; index < value.length; index++) { + hash = ((hash << 5) + hash + value.charCodeAt(index)) | 0 + } + return Math.abs(hash).toString(36) +} + +function stripComments(value: string): string { + let output = '' + let index = 0 + while (index < value.length) { + const open = value.indexOf('', open + 4) + if (close === -1) { + break + } + index = close + 3 + } + return output +} + +function normalizeHtml(value: string): string { + return stripComments(value).replaceAll('\n', '').replaceAll('\t', '').trim() +} + +async function loadReactFixture( + sourcePath: string, +): Promise> { + const slug = basename(sourcePath).replace(/\.tsrx$/, '') + const outputPath = join( + cacheDirectory, + `${slug}-${hashString(sourcePath)}.js`, + ) + return import(/* @vite-ignore */ outputPath) +} + +interface DifferentialMount { + container: HTMLElement + click: (selector: string) => Promise +} + +interface DifferentialPair { + step: ( + name: string, + action: ( + octane: DifferentialMount, + react: DifferentialMount, + ) => void | Promise, + ) => Promise + unmount: () => void +} + +export async function mountDifferential( + sourcePath: string, + exportName: string, +): Promise { + const octaneModule = await import(/* @vite-ignore */ sourcePath) + const reactModule = await loadReactFixture(sourcePath) + const OctaneComponent = octaneModule[exportName] + const ReactComponent = reactModule[exportName] + + if (typeof OctaneComponent !== 'function') { + throw new Error(`Octane export ${exportName} was not found`) + } + if (typeof ReactComponent !== 'function') { + throw new Error(`React export ${exportName} was not found`) + } + + const octaneContainer = document.createElement('div') + const reactContainer = document.createElement('div') + document.body.append(octaneContainer, reactContainer) + + const octaneRoot = createOctaneRoot(octaneContainer) + octaneRoot.render(OctaneComponent) + flushSync(() => {}) + + const reactRoot: ReactRoot = createReactRoot(reactContainer) + await reactAct(async () => { + reactRoot.render(React.createElement(ReactComponent)) + }) + + function createMount( + container: HTMLElement, + react: boolean, + ): DifferentialMount { + return { + container, + async click(selector) { + let element = container.querySelector(selector) + if (!element && selector.startsWith('#')) { + const id = selector.slice(1) + element = + Array.from(container.getElementsByTagName('*')).find( + (candidate) => candidate.id === id, + ) ?? null + } + if (!(element instanceof HTMLElement)) { + throw new Error(`No element matches ${selector}`) + } + if (react) { + await reactAct(async () => element.click()) + } else { + flushSync(() => element.click()) + } + }, + } + } + + const octane = createMount(octaneContainer, false) + const react = createMount(reactContainer, true) + + return { + async step(name, action) { + await action(octane, react) + drainPassiveEffects() + await reactAct(async () => { + await new Promise((resolve) => setTimeout(resolve, 0)) + }) + const octaneHtml = normalizeHtml(octaneContainer.innerHTML) + const reactHtml = normalizeHtml(reactContainer.innerHTML) + expect(octaneHtml, `Differential DOM divergence at ${name}`).toBe( + reactHtml, + ) + }, + unmount() { + octaneRoot.unmount() + reactAct(() => reactRoot.unmount()) + octaneContainer.remove() + reactContainer.remove() + }, + } +} diff --git a/packages/octane-query/tests/differential/_setup.ts b/packages/octane-query/tests/differential/_setup.ts new file mode 100644 index 00000000000..4bbefbbf4d4 --- /dev/null +++ b/packages/octane-query/tests/differential/_setup.ts @@ -0,0 +1,59 @@ +import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { basename, dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { transformSync } from 'esbuild' +import { compile as compileToReact } from '@tsrx/react' + +const directory = dirname(fileURLToPath(import.meta.url)) +const fixtureDirectory = join(directory, '../_fixtures') +const cacheDirectory = join(directory, '.react-cache') +const fixtureNames = ['cached-diff.tsrx', 'async-diff.tsrx'] + +function hashString(value: string): string { + let hash = 5381 + for (let index = 0; index < value.length; index++) { + hash = ((hash << 5) + hash + value.charCodeAt(index)) | 0 + } + return Math.abs(hash).toString(36) +} + +function compileFixture(sourcePath: string): void { + const source = readFileSync(sourcePath, 'utf8') + const compiled = compileToReact(source, sourcePath) + if (compiled.errors.length) { + throw new Error(`React compilation failed for ${sourcePath}`) + } + + const transformed = transformSync(compiled.code, { + loader: 'tsx', + jsx: 'automatic', + jsxImportSource: 'react', + target: 'esnext', + format: 'esm', + sourcefile: sourcePath, + }) + const rewritten = transformed.code + .replace( + /from\s+["']@tanstack\/octane-query(\/[^"']*)?["']/g, + (_match, subpath) => `from "@tanstack/react-query${subpath || ''}"`, + ) + .replace(/from\s+["']octane["']/g, 'from "react"') + const slug = basename(sourcePath).replace(/\.tsrx$/, '') + const outputPath = join( + cacheDirectory, + `${slug}-${hashString(sourcePath)}.js`, + ) + writeFileSync(outputPath, rewritten) +} + +export function setup(): void { + rmSync(cacheDirectory, { force: true, recursive: true }) + mkdirSync(cacheDirectory, { recursive: true }) + for (const fixtureName of fixtureNames) { + compileFixture(join(fixtureDirectory, fixtureName)) + } +} + +export function teardown(): void { + rmSync(cacheDirectory, { force: true, recursive: true }) +} diff --git a/packages/octane-query/tests/differential/parity.test.ts b/packages/octane-query/tests/differential/parity.test.ts new file mode 100644 index 00000000000..d13394ba306 --- /dev/null +++ b/packages/octane-query/tests/differential/parity.test.ts @@ -0,0 +1,39 @@ +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { describe, expect, it } from 'vitest' +import { mountDifferential } from './_rig' + +const directory = dirname(fileURLToPath(import.meta.url)) +const cachedFixture = resolve(directory, '../_fixtures/cached-diff.tsrx') +const asyncFixture = resolve(directory, '../_fixtures/async-diff.tsrx') +const settle = () => + new Promise((timerResolve) => setTimeout(timerResolve, 40)) + +describe('Octane and React Query differential parity', () => { + it('renders the same initialData result shape', async () => { + expect.hasAssertions() + const pair = await mountDifferential(cachedFixture, 'CachedApp') + await pair.step('mount', () => {}) + pair.unmount() + }) + + it('renders the same pending and success query states', async () => { + expect.hasAssertions() + const pair = await mountDifferential(asyncFixture, 'AsyncApp') + await pair.step('pending', () => {}) + await pair.step('success', settle) + pair.unmount() + }) + + it('renders the same idle, pending, and success mutation states', async () => { + expect.hasAssertions() + const pair = await mountDifferential(asyncFixture, 'MutationApp') + await pair.step('idle', () => {}) + await pair.step('pending', async (octane, react) => { + await octane.click('#go') + await react.click('#go') + }) + await pair.step('success', settle) + pair.unmount() + }) +}) diff --git a/packages/octane-query/tests/tsconfig.json b/packages/octane-query/tests/tsconfig.json new file mode 100644 index 00000000000..f3e6e0b55a5 --- /dev/null +++ b/packages/octane-query/tests/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "composite": false, + "emitDeclarationOnly": false, + "noEmit": true + }, + "include": ["**/*.ts"] +} diff --git a/packages/octane-query/tsconfig.json b/packages/octane-query/tsconfig.json new file mode 100644 index 00000000000..0aedd03b91c --- /dev/null +++ b/packages/octane-query/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist-ts", + "rootDir": "." + }, + "include": ["src", "octane-compiler.d.ts", "*.config.ts", "package.json"], + "references": [{ "path": "../query-core" }] +} diff --git a/packages/octane-query/tsconfig.legacy.json b/packages/octane-query/tsconfig.legacy.json new file mode 100644 index 00000000000..703c53b1c71 --- /dev/null +++ b/packages/octane-query/tsconfig.legacy.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./dist-ts/legacy" + }, + "include": ["src"] +} diff --git a/packages/octane-query/tsconfig.prod.json b/packages/octane-query/tsconfig.prod.json new file mode 100644 index 00000000000..8b12fb09d8e --- /dev/null +++ b/packages/octane-query/tsconfig.prod.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "incremental": false, + "composite": false, + "rootDir": "../../" + }, + "include": ["src", "octane-compiler.d.ts"], + "exclude": ["src/__tests__"] +} diff --git a/packages/octane-query/vite.config.ts b/packages/octane-query/vite.config.ts new file mode 100644 index 00000000000..703df806387 --- /dev/null +++ b/packages/octane-query/vite.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from 'vitest/config' +import { octane } from 'octane/compiler/vite' + +import packageJson from './package.json' + +export default defineConfig({ + plugins: [octane()], + resolve: { + conditions: ['@tanstack/custom-condition'], + }, + environments: { + ssr: { + resolve: { + conditions: ['@tanstack/custom-condition'], + }, + }, + }, + test: { + name: packageJson.name, + dir: './tests', + watch: false, + environment: 'jsdom', + globalSetup: ['./tests/differential/_setup.ts'], + coverage: { + enabled: !!process.env.CI, + provider: 'istanbul', + include: ['src/**/*'], + exclude: ['src/__tests__/**'], + }, + typecheck: { enabled: true }, + restoreMocks: true, + retry: process.env.CI ? 3 : 0, + }, +}) diff --git a/packages/preact-query/src/__tests__/ErrorBoundary/types.ts b/packages/preact-query/src/__tests__/ErrorBoundary/types.ts index b271682affb..16e29744be7 100644 --- a/packages/preact-query/src/__tests__/ErrorBoundary/types.ts +++ b/packages/preact-query/src/__tests__/ErrorBoundary/types.ts @@ -24,19 +24,19 @@ type ErrorBoundarySharedProps = PropsWithChildren<{ resetKeys?: any[] }> -export type ErrorBoundaryPropsWithComponent = ErrorBoundarySharedProps & { +type ErrorBoundaryPropsWithComponent = ErrorBoundarySharedProps & { fallback?: never FallbackComponent: ComponentType fallbackRender?: never } -export type ErrorBoundaryPropsWithRender = ErrorBoundarySharedProps & { +type ErrorBoundaryPropsWithRender = ErrorBoundarySharedProps & { fallback?: never FallbackComponent?: never fallbackRender: (props: FallbackProps) => ComponentChild } -export type ErrorBoundaryPropsWithFallback = ErrorBoundarySharedProps & { +type ErrorBoundaryPropsWithFallback = ErrorBoundarySharedProps & { fallback: ComponentChild FallbackComponent?: never fallbackRender?: never diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 029ae0b6783..e0a5a3bb64b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,8 +4,17 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + octane: + specifier: ^0.1.13 + version: 0.1.13 + overrides: chokidar: 5.0.0 + '@angular/build>vite': ^6.4.1 + svelte@5.55.1>esrap: 2.2.4 + vite@6.4.1>yaml: 2.8.3 '@types/react': ^19.2.7 '@types/react-dom': ^19.2.3 '@types/node': ^22.15.3 @@ -21,7 +30,6 @@ overrides: '@typescript-eslint/utils': 8.58.1 '@typescript-eslint/visitor-keys': 8.58.1 typescript-eslint: 8.58.1 - vite: ^6.4.1 esbuild: ^0.27.2 importers: @@ -39,22 +47,22 @@ importers: version: 2.30.0(@types/node@22.19.15) '@cspell/eslint-plugin': specifier: ^9.2.1 - version: 9.7.0(eslint@9.39.4(jiti@2.6.1)) + version: 9.7.0(eslint@9.39.4(jiti@2.7.0)) '@eslint-react/eslint-plugin': specifier: ^2.0.1 - version: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@size-limit/preset-small-lib': specifier: ^12.0.0 - version: 12.0.1(size-limit@12.0.1(jiti@2.6.1)) + version: 12.0.1(size-limit@12.0.1(jiti@2.7.0)) '@tanstack/eslint-config': specifier: 0.3.2 - version: 0.3.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 0.3.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@tanstack/typedoc-config': specifier: 0.3.1 version: 0.3.1(typescript@5.9.3) '@tanstack/vite-config': specifier: 0.4.3 - version: 0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@testing-library/jest-dom': specifier: ^6.8.0 version: 6.9.1 @@ -69,25 +77,25 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitest/coverage-istanbul': specifier: 4.0.6 - version: 4.0.6(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.0.6(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@vitest/eslint-plugin': specifier: ^1.4.0 - version: 1.6.14(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 1.6.14(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) esbuild-plugin-file-path-extensions: specifier: ^2.1.4 version: 2.1.4 eslint: specifier: ^9.36.0 - version: 9.39.4(jiti@2.6.1) + version: 9.39.4(jiti@2.7.0) eslint-plugin-react-hooks: specifier: ^6.1.1 - version: 6.1.1(eslint@9.39.4(jiti@2.6.1)) + version: 6.1.1(eslint@9.39.4(jiti@2.7.0)) jsdom: specifier: ^27.0.0 - version: 27.4.0 + version: 27.4.0(@noble/hashes@2.2.0) knip: - specifier: ^6.0.2 - version: 6.1.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + specifier: ^6.29.0 + version: 6.29.0 markdown-link-extractor: specifier: ^4.0.2 version: 4.0.3 @@ -117,13 +125,13 @@ importers: version: 1.11.1 size-limit: specifier: ^12.0.0 - version: 12.0.1(jiti@2.6.1) + version: 12.0.1(jiti@2.7.0) tinyglobby: specifier: ^0.2.15 version: 0.2.15 tsup: specifier: ^8.4.0 - version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -150,10 +158,10 @@ importers: version: typescript@6.0.1-rc vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vitest: specifier: ^4.0.18 - version: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/angular/auto-refetching: dependencies: @@ -184,7 +192,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -224,7 +232,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -270,7 +278,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -313,7 +321,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -353,7 +361,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -396,7 +404,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -436,7 +444,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -479,7 +487,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -522,7 +530,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -565,7 +573,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -605,7 +613,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -633,7 +641,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/lit/pagination: dependencies: @@ -652,7 +660,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/lit/ssr: dependencies: @@ -680,7 +688,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/preact/simple: dependencies: @@ -693,19 +701,19 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^9.36.0 - version: 9.39.4(jiti@2.6.1) + version: 9.39.4(jiti@2.7.0) eslint-config-preact: specifier: ^2.0.0 - version: 2.0.0(eslint@9.39.4(jiti@2.6.1)) + version: 2.0.0(eslint@9.39.4(jiti@2.7.0)) typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/algolia: dependencies: @@ -736,13 +744,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/auto-refetching: dependencies: @@ -804,13 +812,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/basic-graphql-request: dependencies: @@ -835,10 +843,10 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/chat: dependencies: @@ -857,10 +865,10 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.0.14 - version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) tailwindcss: specifier: ^4.0.14 version: 4.2.2 @@ -869,7 +877,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/default-query-function: dependencies: @@ -888,13 +896,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/devtools-panel: dependencies: @@ -913,13 +921,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/eslint-legacy: dependencies: @@ -953,13 +961,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/eslint-plugin-demo: dependencies: @@ -975,13 +983,13 @@ importers: version: link:../../../packages/eslint-plugin-query eslint: specifier: ^9.39.0 - version: 9.39.4(jiti@2.6.1) + version: 9.39.4(jiti@2.7.0) typescript: specifier: 5.8.3 version: 5.8.3 typescript-eslint: specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) examples/react/infinite-query-with-max-pages: dependencies: @@ -1161,13 +1169,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/optimistic-updates-cache: dependencies: @@ -1270,13 +1278,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/prefetching: dependencies: @@ -1411,13 +1419,13 @@ importers: version: 1.2.3 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/rick-morty: dependencies: @@ -1442,10 +1450,10 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.13 - version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) tailwindcss: specifier: ^4.1.13 version: 4.2.2 @@ -1454,7 +1462,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/shadow-dom: dependencies: @@ -1479,13 +1487,13 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/simple: dependencies: @@ -1504,13 +1512,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/star-wars: dependencies: @@ -1535,10 +1543,10 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4.1.13 - version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) tailwindcss: specifier: ^4.1.13 version: 4.2.2 @@ -1547,7 +1555,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/react/suspense: dependencies: @@ -1572,13 +1580,13 @@ importers: devDependencies: '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/solid/astro: dependencies: @@ -1633,10 +1641,10 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/solid/basic-graphql-request: dependencies: @@ -1661,10 +1669,10 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/solid/default-query-function: dependencies: @@ -1683,10 +1691,10 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/solid/offline: dependencies: @@ -1714,10 +1722,10 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/solid/simple: dependencies: @@ -1739,10 +1747,10 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) examples/solid/solid-start-streaming: dependencies: @@ -1754,7 +1762,7 @@ importers: version: 0.15.4(solid-js@1.9.12) '@solidjs/start': specifier: ^1.1.3 - version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/solid-query': specifier: ^5.101.4 version: link:../../../packages/solid-query @@ -1766,7 +1774,7 @@ importers: version: 1.9.12 vinxi: specifier: ^0.5.3 - version: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/auto-refetching: dependencies: @@ -1779,13 +1787,13 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 @@ -1797,7 +1805,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/basic: dependencies: @@ -1816,25 +1824,25 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/load-more-infinite-scroll: dependencies: @@ -1847,25 +1855,25 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/optimistic-updates: dependencies: @@ -1878,25 +1886,25 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/playground: dependencies: @@ -1909,25 +1917,25 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/simple: dependencies: @@ -1940,7 +1948,7 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tsconfig/svelte': specifier: ^5.0.4 version: 5.0.8 @@ -1949,13 +1957,13 @@ importers: version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/ssr: dependencies: @@ -1968,25 +1976,25 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/svelte/star-wars: dependencies: @@ -1999,22 +2007,22 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^6.1.0 - version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@sveltejs/kit': specifier: ^2.57.1 - version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tailwindcss/vite': specifier: ^4.1.13 - version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.3.1 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.8.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3) tailwindcss: specifier: ^4.1.13 version: 4.2.2 @@ -2023,7 +2031,7 @@ importers: version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/vue/basic: dependencies: @@ -2039,13 +2047,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/vue/dependent-queries: dependencies: @@ -2058,13 +2066,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/vue/persister: dependencies: @@ -2089,13 +2097,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) examples/vue/simple: dependencies: @@ -2111,13 +2119,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) integrations/angular-cli-20: dependencies: @@ -2154,7 +2162,7 @@ importers: devDependencies: '@angular/build': specifier: ^20.0.0 - version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) + version: 20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3) '@angular/cli': specifier: ^20.0.0 version: 20.3.22(@types/node@22.19.15)(chokidar@5.0.0) @@ -2178,7 +2186,7 @@ importers: version: 3.3.2 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) devDependencies: typescript: specifier: 5.8.3 @@ -2281,7 +2289,7 @@ importers: version: link:../../packages/react-query-devtools '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) react: specifier: ^19.0.0 version: 19.2.4 @@ -2290,7 +2298,7 @@ importers: version: 19.2.4(react@19.2.4) vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) integrations/react-webpack-4: dependencies: @@ -2382,16 +2390,16 @@ importers: version: 1.9.12 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) integrations/svelte-vite: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/svelte-query': specifier: workspace:* version: link:../../packages/svelte-query @@ -2403,7 +2411,7 @@ importers: version: 5.55.1 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) integrations/vue-vite: dependencies: @@ -2416,13 +2424,13 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue-tsc: specifier: ^2.2.8 version: 2.2.12(typescript@5.8.3) @@ -2459,13 +2467,13 @@ importers: version: 7.8.2 vite-plugin-dts: specifier: 4.2.3 - version: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-externalize-deps: specifier: ^0.9.0 - version: 0.9.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.9.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: '@tanstack/query-devtools': specifier: workspace:* @@ -2507,7 +2515,7 @@ importers: version: 10.4.1 eslint-plugin-jsdoc: specifier: ^50.5.0 - version: 50.8.0(eslint@9.39.4(jiti@2.6.1)) + version: 50.8.0(eslint@9.39.4(jiti@2.7.0)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2516,23 +2524,23 @@ importers: dependencies: '@typescript-eslint/utils': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) typescript: specifier: ^5.4.0 || ^6.0.0 version: 5.9.3 devDependencies: '@typescript-eslint/parser': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/rule-tester': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) combinate: specifier: ^1.1.11 version: 1.1.11 eslint: specifier: ^9.36.0 - version: 9.39.4(jiti@2.6.1) + version: 9.39.4(jiti@2.7.0) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2557,7 +2565,47 @@ importers: version: 17.5.0 typescript-eslint: specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + + packages/octane-query: + dependencies: + '@tanstack/query-core': + specifier: workspace:* + version: link:../query-core + devDependencies: + '@tanstack/react-query': + specifier: workspace:* + version: link:../react-query + '@tsrx/react': + specifier: ^0.2.45 + version: 0.2.47(@typescript-eslint/types@8.58.1)(react@19.2.4) + '@types/react': + specifier: ^19.2.7 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + esbuild: + specifier: ^0.27.2 + version: 0.27.4 + npm-run-all2: + specifier: ^5.0.0 + version: 5.0.2 + octane: + specifier: 'catalog:' + version: 0.1.13(@typescript-eslint/types@8.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) + react: + specifier: ^19.2.1 + version: 19.2.4 + react-dom: + specifier: ^19.2.1 + version: 19.2.4(react@19.2.4) + vite: + specifier: ^8.0.16 + version: 8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) + vitest: + specifier: ^4.0.18 + version: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) packages/preact-query: dependencies: @@ -2567,7 +2615,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/query-persist-client-core': specifier: workspace:* version: link:../query-persist-client-core @@ -2582,7 +2630,7 @@ importers: version: 5.0.0 eslint-config-preact: specifier: ^2.0.0 - version: 2.0.0(eslint@9.39.4(jiti@2.6.1)) + version: 2.0.0(eslint@9.39.4(jiti@2.7.0)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2597,7 +2645,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) packages/preact-query-devtools: dependencies: @@ -2607,7 +2655,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/preact-query': specifier: workspace:* version: link:../preact-query @@ -2616,7 +2664,7 @@ importers: version: 3.2.4(preact@10.29.0) eslint-config-preact: specifier: ^2.0.0 - version: 2.0.0(eslint@9.39.4(jiti@2.6.1)) + version: 2.0.0(eslint@9.39.4(jiti@2.7.0)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2628,7 +2676,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) packages/preact-query-persist-client: dependencies: @@ -2638,7 +2686,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: ^2.10.2 - version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/preact-query': specifier: workspace:* version: link:../preact-query @@ -2650,7 +2698,7 @@ importers: version: 3.2.4(preact@10.29.0) eslint-config-preact: specifier: ^2.0.0 - version: 2.0.0(eslint@9.39.4(jiti@2.6.1)) + version: 2.0.0(eslint@9.39.4(jiti@2.7.0)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2662,7 +2710,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) packages/query-async-storage-persister: dependencies: @@ -2694,7 +2742,7 @@ importers: version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2760,10 +2808,10 @@ importers: version: 2.2.6 tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/query-persist-client-core: dependencies: @@ -2826,7 +2874,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) cpy-cli: specifier: ^5.0.0 version: 5.0.0 @@ -2860,7 +2908,7 @@ importers: version: 19.2.14 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2878,7 +2926,7 @@ importers: version: 19.2.14 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) next: specifier: ^16.0.1 version: 16.2.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.90.0) @@ -2909,7 +2957,7 @@ importers: version: 19.2.14 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) npm-run-all2: specifier: ^5.0.0 version: 5.0.2 @@ -2937,10 +2985,10 @@ importers: version: 1.9.12 tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/solid-query-devtools: dependencies: @@ -2962,10 +3010,10 @@ importers: version: 1.9.12 tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/solid-query-persist-client: dependencies: @@ -2990,10 +3038,10 @@ importers: version: 1.9.12 tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)) vite-plugin-solid: specifier: ^2.11.6 - version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/svelte-query: dependencies: @@ -3006,25 +3054,25 @@ importers: version: 2.5.7(svelte@5.55.1)(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/query-test-utils': specifier: workspace:* version: link:../query-test-utils '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@typescript-eslint/parser': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) eslint-plugin-svelte: specifier: ^3.11.0 - version: 3.16.0(eslint@9.39.4(jiti@2.6.1))(svelte@5.55.1) + version: 3.16.0(eslint@9.39.4(jiti@2.7.0))(svelte@5.55.1) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.4.5 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.9.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -3043,25 +3091,25 @@ importers: version: 2.5.7(svelte@5.55.1)(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/svelte-query': specifier: workspace:* version: link:../svelte-query '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@typescript-eslint/parser': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) eslint-plugin-svelte: specifier: ^3.11.0 - version: 3.16.0(eslint@9.39.4(jiti@2.6.1))(svelte@5.55.1) + version: 3.16.0(eslint@9.39.4(jiti@2.7.0))(svelte@5.55.1) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.4.5 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.9.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -3077,7 +3125,7 @@ importers: version: 2.5.7(svelte@5.55.1)(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/query-test-utils': specifier: workspace:* version: link:../query-test-utils @@ -3086,19 +3134,19 @@ importers: version: link:../svelte-query '@testing-library/svelte': specifier: ^5.2.8 - version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) '@typescript-eslint/parser': specifier: 8.58.1 - version: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) eslint-plugin-svelte: specifier: ^3.11.0 - version: 3.16.0(eslint@9.39.4(jiti@2.6.1))(svelte@5.55.1) + version: 3.16.0(eslint@9.39.4(jiti@2.7.0))(svelte@5.55.1) svelte: specifier: ^5.39.3 version: 5.55.1 svelte-check: specifier: ^4.4.5 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.9.3) + version: 4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -3123,13 +3171,13 @@ importers: version: link:../query-test-utils '@vitejs/plugin-vue': specifier: ^5.2.4 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) '@vue/composition-api': specifier: 1.7.2 version: 1.7.2(vue@3.5.31(typescript@5.9.3)) eslint-plugin-vue: specifier: ^10.5.0 - version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0))) vue: specifier: ^3.4.27 version: 3.5.31(typescript@5.9.3) @@ -3151,16 +3199,16 @@ importers: version: link:../vue-query '@vitejs/plugin-vue': specifier: ^5.2.4 - version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3)) eslint-plugin-vue: specifier: ^10.5.0 - version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))) + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0))) typescript: specifier: 5.8.3 version: 5.8.3 vite: specifier: ^6.4.1 - version: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: specifier: ^3.4.27 version: 3.5.31(typescript@5.8.3) @@ -4656,15 +4704,30 @@ packages: '@emmetio/stream-reader@2.2.0': resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.9.1': resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/runtime@1.9.1': resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -5732,8 +5795,8 @@ packages: '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} - '@napi-rs/wasm-runtime@1.1.2': - resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -5912,6 +5975,10 @@ packages: '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -6031,241 +6098,239 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - '@oxc-parser/binding-android-arm-eabi@0.121.0': - resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} + '@oxc-parser/binding-android-arm-eabi@0.140.0': + resolution: {integrity: sha512-ZfjDZ422mo7eo3b3VltqNsV9kmv1qt/sPEAMSl64iOSwhVfd0eIZ9LB79Mbs1xYXJnk7WSROwzBCKDIiVxPTvQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.121.0': - resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + '@oxc-parser/binding-android-arm64@0.140.0': + resolution: {integrity: sha512-Ia8jSvikUX6Sf+Ht+KOCUF/k1HpR0VlmqIYymubmWDebOEGtsyliHDR6JxsZ4IX3/c/GbrB1uh09aVGQv/LQmQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.121.0': - resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + '@oxc-parser/binding-darwin-arm64@0.140.0': + resolution: {integrity: sha512-G6VK0nK61pH0d0mBjUqSZbVxGqqO5uzeginLDQj+gOO6ObfJjXRwgkD/ol0w1INcnFeAb6YGGO7qc3ueGHaycQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.121.0': - resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + '@oxc-parser/binding-darwin-x64@0.140.0': + resolution: {integrity: sha512-HazBOuZzd2pO1C2uMmp8Gv7mhzMHqKSKDS1OZfcLEvpIcgA+48J92HEtNanVHDIzRD9PRPCV6aS6fkZIWOVl8Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.121.0': - resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + '@oxc-parser/binding-freebsd-x64@0.140.0': + resolution: {integrity: sha512-9hSUU+HmTUyOe4JzMHxNGgLWNY7rrO+6ShicZwImNJacEAACDMIkuEQQkvXSL+WJN50jaNtLYJv8s4OcBdpyUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': - resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0': + resolution: {integrity: sha512-RAEuQsYtS0KcDFqN0ABTjyyNlokS91JeuDuoW9tEbG0JTbRNXnpQUdbYc/16JoA6Z/2ALbNrE3KmxtqDiuIjCQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': - resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + '@oxc-parser/binding-linux-arm-musleabihf@0.140.0': + resolution: {integrity: sha512-c4CkHvPvqfojouredJ0w3e6+jiBq0SbFyhH61kr/zPb/7XsaYTNKQ54vmlSsopfdQbNDX40ZeK9Abs2Qet6wcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': - resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + '@oxc-parser/binding-linux-arm64-gnu@0.140.0': + resolution: {integrity: sha512-yrjmLj8ixPB25yqvPGr28meGjb+keed7m1GqqY/0uqkhZIoT4t9zmfwUgFEtC33C7dtE+UQ7TU0IaVxf97SWJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.121.0': - resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + '@oxc-parser/binding-linux-arm64-musl@0.140.0': + resolution: {integrity: sha512-ggGMQTN8Agwxp2WiLMpdY671dt0qTDJWiWlJeig3HnUwTnerRl0J2JdGVghWBeDcss2D9S2V2Js6dZHEiVabVA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': - resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + '@oxc-parser/binding-linux-ppc64-gnu@0.140.0': + resolution: {integrity: sha512-IgTs8xYAFgAUGNmR65tIqjlJ8vKgrfXzC515e9goSdfMyKQV4aJpd2pUUudU4u51G64H0/DSEJEXKOraxm9ZCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': - resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + '@oxc-parser/binding-linux-riscv64-gnu@0.140.0': + resolution: {integrity: sha512-A1x+PMWZmSGaFVOx2YeNTFau8uD+QO14/vLP4GrcuvUPs3+nBkUOjy9Lus86ftHsDojjYMbvBelmKc3F7Rv08g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': - resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + '@oxc-parser/binding-linux-riscv64-musl@0.140.0': + resolution: {integrity: sha512-zBqpfRo2myWPrPo5xUjeZqlnPXPXsX8BcWtWff66/eGRQdbPjhzPgXa/F+AtxT2afUViPxbuDlwscMKzQ5tg+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': - resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + '@oxc-parser/binding-linux-s390x-gnu@0.140.0': + resolution: {integrity: sha512-2M1DPm/8w9I//YzFlFC9qXw+r2tJFh5CYwRlYTq2vUJQS7qoQftEDeCZ8EnN7KHtvSiXvYj8mZI5pR7DpXmcEw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.121.0': - resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + '@oxc-parser/binding-linux-x64-gnu@0.140.0': + resolution: {integrity: sha512-8aRDbZ/U/jO8N7go1MO72jtbpb4uswV8d7vOkMvt/BPgZiyEYvl1VIWK4ESxZZhnJ4tqwVldgX7dNiP/eB1Jdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.121.0': - resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + '@oxc-parser/binding-linux-x64-musl@0.140.0': + resolution: {integrity: sha512-xRqpeI8U2sQQS1W5BMWRyMTxtagkuLG2dEWruet5lFsWHTvBth11/TpSaJatHdqVVwHN0q3uuoS9zRsGinq8hg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.121.0': - resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + '@oxc-parser/binding-openharmony-arm64@0.140.0': + resolution: {integrity: sha512-GbGRe26MqAKciFRvXeHNQJ6VAHYs9R4miP89sEAncysM3n+f4lnyLWgsa9kklJNpfnxdq2yRoNYHFqwBckVimw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.121.0': - resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} - engines: {node: '>=14.0.0'} + '@oxc-parser/binding-wasm32-wasi@0.140.0': + resolution: {integrity: sha512-vFiC1hqys+hkX1GnQkIoiTQJNiUm43Z0lO35ETKXTw0YtpW7+cN58YRRXFAQQ+TgpkIi3lrhcxdlnqz+Oi3ptQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': - resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + '@oxc-parser/binding-win32-arm64-msvc@0.140.0': + resolution: {integrity: sha512-fGSQldwEYKhM+H8uLt76Op8hh5+FYaR6lvvQ1Txw3Mhn86DyQXLcI0fi1EkFlTK7F+46OCk/j0AJMzZQm6g5Xg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': - resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + '@oxc-parser/binding-win32-ia32-msvc@0.140.0': + resolution: {integrity: sha512-sDS2Bai+g3ZWYwfZqmosiSuFDBcVnZ3Ta6pszzsiJoLMqsJEWKcxXXbGa7b7yXr++W2lQNPb3ZRJ8czseqL7RA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.121.0': - resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + '@oxc-parser/binding-win32-x64-msvc@0.140.0': + resolution: {integrity: sha512-kHbE1zWyb5OQgJA6/5P4WjiuB01sYdQwtZnSSyE58FQEXDAMnyeeq4vj7KgN75i5SlBzOs8A5MrtlD3gOlDKqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.121.0': - resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} + '@oxc-project/types@0.139.0': + resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + + '@oxc-project/types@0.140.0': + resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} - '@oxc-resolver/binding-android-arm-eabi@11.19.1': - resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.19.1': - resolution: {integrity: sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA==} + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.19.1': - resolution: {integrity: sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ==} + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.19.1': - resolution: {integrity: sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.19.1': - resolution: {integrity: sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': - resolution: {integrity: sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': - resolution: {integrity: sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': - resolution: {integrity: sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.19.1': - resolution: {integrity: sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': - resolution: {integrity: sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': - resolution: {integrity: sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': - resolution: {integrity: sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': - resolution: {integrity: sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA==} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.19.1': - resolution: {integrity: sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ==} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.19.1': - resolution: {integrity: sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.19.1': - resolution: {integrity: sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA==} + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.19.1': - resolution: {integrity: sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': - resolution: {integrity: sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': - resolution: {integrity: sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA==} - cpu: [ia32] - os: [win32] - - '@oxc-resolver/binding-win32-x64-msvc@11.19.1': - resolution: {integrity: sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} cpu: [x64] os: [win32] @@ -6399,7 +6464,7 @@ packages: resolution: {integrity: sha512-p0vJpxiVO7KWWazWny3LUZ+saXyZKWv6Ju0bYMWNJRp2YveufRPgSUB1C4MTqGJfz07EehMgfN+AJNwQy+w6Iw==} peerDependencies: '@babel/core': 7.x - vite: ^6.4.1 + vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x '@prefresh/babel-plugin@0.5.3': resolution: {integrity: sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==} @@ -6416,7 +6481,7 @@ packages: resolution: {integrity: sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==} peerDependencies: preact: ^10.4.0 || ^11.0.0-0 - vite: ^6.4.1 + vite: '>=2.0.0' '@publint/pack@0.1.4': resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==} @@ -6537,9 +6602,107 @@ packages: resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} + '@rolldown/binding-android-arm64@1.1.5': + resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.1.5': + resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.5': + resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.1.5': + resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.1.5': + resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.5': + resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.1.5': + resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.1.5': + resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.1.5': + resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.5': + resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} engines: {node: '>=20.19.0'} @@ -7130,8 +7293,8 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.11': + resolution: {integrity: sha512-LFuZUkjJ9iF7JZye/aG5XM0SFcQ5VyL0oVX4WJ9dc0Va3R3s0OauX1BESVCb+YN/ol8TAfqGDDAQsTG627Y5kw==} peerDependencies: acorn: ^8.9.0 @@ -7149,7 +7312,7 @@ packages: '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 svelte: ^4.0.0 || ^5.0.0-next.0 typescript: ^5.3.3 || ^6.0.0 - vite: ^6.4.1 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 peerDependenciesMeta: '@opentelemetry/api': optional: true @@ -7169,14 +7332,14 @@ packages: peerDependencies: '@sveltejs/vite-plugin-svelte': ^5.0.0 svelte: ^5.0.0 - vite: ^6.4.1 + vite: ^6.0.0 '@sveltejs/vite-plugin-svelte@5.1.1': resolution: {integrity: sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: svelte: ^5.0.0 - vite: ^6.4.1 + vite: ^6.0.0 '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -7282,13 +7445,13 @@ packages: '@tailwindcss/vite@4.2.2': resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} peerDependencies: - vite: ^6.4.1 + vite: ^5.2.0 || ^6 || ^7 || ^8 '@tanstack/directive-functions-plugin@1.121.21': resolution: {integrity: sha512-B9z/HbF7gJBaRHieyX7f2uQ4LpLLAVAEutBZipH6w+CYD6RHRJvSVPzECGHF7icFhNWTiJQL2QR6K07s59yzEw==} engines: {node: '>=12'} peerDependencies: - vite: ^6.4.1 + vite: '>=6.0.0' '@tanstack/eslint-config@0.3.2': resolution: {integrity: sha512-2g+PuGR3GuvvCiR3xZs+IMqAvnYU9bvH+jRml0BFBSxHBj22xFCTNvJWhvgj7uICFF9IchDkFUto91xDPMu5cg==} @@ -7321,7 +7484,7 @@ packages: resolution: {integrity: sha512-bqXfdPmD6DuAZdE08ih5bSqpcge9Im9nEym3CKcQ9OsPo0jmGW7WrJarLaoVB6qWEysh3FIwWQN1gtfeC7q8UQ==} engines: {node: '>=18'} peerDependencies: - vite: ^6.4.1 + vite: ^6.0.0 || ^7.0.0 '@testing-library/angular@18.1.1': resolution: {integrity: sha512-LbA+W+VeOf7TC7/ZfHLiOLlLyD2cVG3mBdkJapviC2Fd4Bw/Utcaso4bh+5B0cx/fyKyuPgS+L6FnaKGdP9HBA==} @@ -7384,7 +7547,7 @@ packages: engines: {node: '>= 10'} peerDependencies: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 - vite: ^6.4.1 + vite: '*' vitest: '*' peerDependenciesMeta: vite: @@ -7395,6 +7558,14 @@ packages: '@tsconfig/svelte@5.0.8': resolution: {integrity: sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==} + '@tsrx/core@0.1.47': + resolution: {integrity: sha512-tuhPcqpc+HipVtxpTCHTQG/30Yfvt+gwJPxUW85M+imimCH9AeNRb0Q2xTcx4Hyaq8H8KNqG8HBwiZExX4rI/w==} + + '@tsrx/react@0.2.47': + resolution: {integrity: sha512-N9jGb9yiushNOmmf3V83tMPLtQB1fZsp6XgY6lqSHvpVBnGa0jmLOla3qc9h4+3lrj5hwRBC5a+XW9wGTn77QA==} + peerDependencies: + react: '>=18' + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7406,6 +7577,9 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -7451,6 +7625,9 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -7802,19 +7979,19 @@ packages: resolution: {integrity: sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} peerDependencies: - vite: ^6.4.1 + vite: ^6.0.0 || ^7.0.0 '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^6.4.1 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 '@vitejs/plugin-vue@5.2.4': resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^6.4.1 + vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 '@vitest/coverage-istanbul@4.0.6': @@ -7845,7 +8022,7 @@ packages: resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} peerDependencies: msw: ^2.4.9 - vite: ^6.4.1 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true @@ -8187,6 +8364,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -9691,6 +9873,9 @@ packages: devalue@5.6.4: resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + devalue@5.8.2: + resolution: {integrity: sha512-DObPPAfdtFbXjxLqK8s2Xk9ZuWz5+ZoFEhC7J76es4GU/rEiXwHTmbImoCdyoCOcBH1UF3+Cz6Z2sYD4hyl5TA==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -10196,6 +10381,14 @@ packages: esrap@2.2.4: resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} + esrap@2.3.0: + resolution: {integrity: sha512-GQ/7RN8uOtEfNpzZzBMTzW9JBcX42oaSVtPzdF+6cEL8pqIL094iUpr9jzYGn4O4P/1S60dJ6izyT8F4LYARng==} + peerDependencies: + '@typescript-eslint/types': 8.58.1 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -10717,6 +10910,9 @@ packages: get-tsconfig@4.13.7: resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -11639,6 +11835,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -11806,8 +12006,8 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - knip@6.1.1: - resolution: {integrity: sha512-BC/kbdxwCgv+p/3YkGbtlLxbOXhQDuR+CeKKFEpJyKb3BFwG1gZa+CMWSqAnPi+kUexz74m327d3zWxyn2fMew==} + knip@6.29.0: + resolution: {integrity: sha512-A3kXqSBky1tWBAqiU9srdtu0Larhzkuyor0aD/gg+ToiqyBncCCs2Q60sLsxmcKhV0OsKss9LV0hMPpwLv711Q==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -12664,6 +12864,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.7: resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} engines: {node: ^18 || >=20} @@ -13021,6 +13226,21 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + octane@0.1.13: + resolution: {integrity: sha512-bjmuF0hjLnBPOqOLTWyOtq6U5tklKw/JKF/qbAlZ2gfAZsoL9NiK7tQSWibuIUSerXELvLfmPmpbyt0fItemsg==} + engines: {node: '>=22'} + peerDependencies: + react: ^19.0.0 + react-dom: ^19.0.0 + vite: ^8.0.16 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + vite: + optional: true + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -13111,12 +13331,12 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - oxc-parser@0.121.0: - resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} + oxc-parser@0.140.0: + resolution: {integrity: sha512-h6QFWd6lBMfjESqgQ27GjzrSDb0qbznp7VDQqp2zvgsrWut4vcchyMIzOVXvGQ2GMZgKw9RWrFNWv9WqGL0p7Q==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.19.1: - resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} p-event@5.0.1: resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} @@ -13396,6 +13616,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pidtree@0.5.0: resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==} engines: {node: '>=0.10'} @@ -13549,6 +13773,10 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.22: + resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} @@ -14211,6 +14439,11 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} + rolldown@1.1.5: + resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup-plugin-preserve-directives@0.4.0: resolution: {integrity: sha512-gx4nBxYm5BysmEQS+e2tAMrtFxrGvk+Pe5ppafRibQi0zlW7VYAbEGk6IKDw9sJGPdFWgVTE0o4BU4cdG0Fylg==} peerDependencies: @@ -14608,6 +14841,10 @@ packages: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} + smol-toml@1.7.0: + resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==} + engines: {node: '>= 18'} + snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -15175,6 +15412,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -15482,8 +15723,8 @@ packages: ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} - unbash@2.2.0: - resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==} + unbash@4.0.3: + resolution: {integrity: sha512-3cudTErfToSc4Ggv8XGXVNVli/xHKUtUZvaY5UVwhOcUPbQGz7PeaEnT/SAVgNziZtX67KEN9swMUYkLghxA1w==} engines: {node: '>=14'} unbox-primitive@1.1.0: @@ -15809,7 +16050,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: typescript: '*' - vite: ^6.4.1 + vite: '*' peerDependenciesMeta: vite: optional: true @@ -15817,19 +16058,19 @@ packages: vite-plugin-externalize-deps@0.10.0: resolution: {integrity: sha512-eQrtpT/Do7AvDn76l1yL6ZHyXJ+UWH2LaHVqhAes9go54qaAnPZuMbgxcroQ/7WY3ZyetZzYW2quQnDF0DV5qg==} peerDependencies: - vite: ^6.4.1 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 vite-plugin-externalize-deps@0.9.0: resolution: {integrity: sha512-wg3qb5gCy2d1KpPKyD9wkXMcYJ84yjgziHrStq9/8R7chhUC73mhQz+tVtvhFiICQHsBn1pnkY4IBbPqF9JHNw==} peerDependencies: - vite: ^6.4.1 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 vite-plugin-solid@2.11.11: resolution: {integrity: sha512-YMZCXsLw9kyuvQFEdwLP27fuTQJLmjNoHy90AOJnbRuJ6DwShUxKFo38gdFrWn9v11hnGicKCZEaeI/TFs6JKw==} peerDependencies: '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* solid-js: ^1.7.2 - vite: ^6.4.1 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@testing-library/jest-dom': optional: true @@ -15837,12 +16078,12 @@ packages: vite-prerender-plugin@0.5.13: resolution: {integrity: sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==} peerDependencies: - vite: ^6.4.1 + vite: 5.x || 6.x || 7.x || 8.x vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: - vite: ^6.4.1 + vite: '*' peerDependenciesMeta: vite: optional: true @@ -15862,7 +16103,7 @@ packages: sugarss: '*' terser: ^5.16.0 tsx: ^4.8.1 - yaml: ^2.4.2 + yaml: 2.8.3 peerDependenciesMeta: '@types/node': optional: true @@ -15887,10 +16128,53 @@ packages: yaml: optional: true + vite@8.1.5: + resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^22.15.3 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.2 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.1.2: resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: - vite: ^6.4.1 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -15909,7 +16193,7 @@ packages: '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' - vite: ^6.4.1 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -16435,6 +16719,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -16518,6 +16807,9 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zone.js@0.15.0: resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} @@ -16676,7 +16968,7 @@ snapshots: '@angular/core': 20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0) tslib: 2.8.1 - '@angular/build@20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3)': + '@angular/build@20.3.22(@angular/compiler-cli@20.3.18(@angular/compiler@20.3.18)(typescript@5.8.3))(@angular/compiler@20.3.18)(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@20.3.18(@angular/animations@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@20.3.18(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0)))(@types/node@22.19.15)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.8)(tailwindcss@4.2.2)(terser@5.46.1)(tslib@2.8.1)(tsx@4.21.0)(typescript@5.8.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(yaml@2.8.3)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2003.22(chokidar@5.0.0) @@ -16686,7 +16978,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-split-export-declaration': 7.24.7 '@inquirer/confirm': 5.1.14(@types/node@22.19.15) - '@vitejs/plugin-basic-ssl': 2.1.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitejs/plugin-basic-ssl': 2.1.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) beasties: 0.3.5 browserslist: 4.28.2 esbuild: 0.27.4 @@ -16706,7 +16998,7 @@ snapshots: tinyglobby: 0.2.14 tslib: 2.8.1 typescript: 5.8.3 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) watchpack: 2.4.4 optionalDependencies: '@angular/core': 20.3.18(@angular/compiler@20.3.18)(rxjs@7.8.2)(zone.js@0.15.0) @@ -16714,7 +17006,7 @@ snapshots: lmdb: 3.4.2 postcss: 8.5.8 tailwindcss: 4.2.2 - vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@types/node' - chokidar @@ -16884,7 +17176,7 @@ snapshots: '@volar/language-server': 2.4.28 '@volar/language-service': 2.4.28 muggle-string: 0.4.1 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 volar-service-css: 0.0.70(@volar/language-service@2.4.28) volar-service-emmet: 0.0.70(@volar/language-service@2.4.28) volar-service-html: 0.0.70(@volar/language-service@2.4.28) @@ -17065,11 +17357,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.6.1))': + '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.7.0))': dependencies: '@babel/core': 7.29.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -18353,12 +18645,12 @@ snapshots: '@cspell/url': 9.7.0 import-meta-resolve: 4.2.0 - '@cspell/eslint-plugin@9.7.0(eslint@9.39.4(jiti@2.6.1))': + '@cspell/eslint-plugin@9.7.0(eslint@9.39.4(jiti@2.7.0))': dependencies: '@cspell/cspell-types': 9.7.0 '@cspell/url': 9.7.0 cspell-lib: 9.7.0 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) synckit: 0.11.12 '@cspell/filetypes@9.7.0': {} @@ -18449,11 +18741,33 @@ snapshots: '@emmetio/stream-reader@2.2.0': {} + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 @@ -18462,6 +18776,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 + optional: true + '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 @@ -18548,35 +18867,35 @@ snapshots: '@esbuild/win32-x64@0.27.4': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': dependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint-react/ast@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/ast@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-react/eff': 2.13.0 '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) string-ts: 2.3.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint-react/core@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/core@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: @@ -18584,46 +18903,46 @@ snapshots: '@eslint-react/eff@2.13.0': {} - '@eslint-react/eslint-plugin@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/eslint-plugin@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-react-dom: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-hooks-extra: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-naming-convention: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-rsc: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-web-api: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-x: 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) + eslint-plugin-react-dom: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-react-hooks-extra: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-react-naming-convention: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-react-rsc: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-react-web-api: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-react-x: 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@eslint-react/shared@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/shared@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-react/eff': 2.13.0 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 zod: 4.3.6 transitivePeerDependencies: - supports-color - '@eslint-react/var@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@eslint-react/var@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: @@ -18668,7 +18987,9 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.15.0': {} + '@exodus/bytes@1.15.0(@noble/hashes@2.2.0)': + optionalDependencies: + '@noble/hashes': 2.2.0 '@expo/bunyan@4.0.1': dependencies: @@ -19748,8 +20069,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 '@tybys/wasm-util': 0.10.1 optional: true @@ -19759,11 +20080,18 @@ snapshots: '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.9.0 - '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 optional: true '@next/env@14.2.35': {} @@ -19851,6 +20179,8 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@noble/hashes@2.2.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -19966,136 +20296,133 @@ snapshots: '@oslojs/encoding@1.1.0': {} - '@oxc-parser/binding-android-arm-eabi@0.121.0': + '@oxc-parser/binding-android-arm-eabi@0.140.0': optional: true - '@oxc-parser/binding-android-arm64@0.121.0': + '@oxc-parser/binding-android-arm64@0.140.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.121.0': + '@oxc-parser/binding-darwin-arm64@0.140.0': optional: true - '@oxc-parser/binding-darwin-x64@0.121.0': + '@oxc-parser/binding-darwin-x64@0.140.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.121.0': + '@oxc-parser/binding-freebsd-x64@0.140.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.140.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + '@oxc-parser/binding-linux-arm64-gnu@0.140.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.121.0': + '@oxc-parser/binding-linux-arm64-musl@0.140.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.140.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.140.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + '@oxc-parser/binding-linux-riscv64-musl@0.140.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + '@oxc-parser/binding-linux-s390x-gnu@0.140.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.121.0': + '@oxc-parser/binding-linux-x64-gnu@0.140.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.121.0': + '@oxc-parser/binding-linux-x64-musl@0.140.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.121.0': + '@oxc-parser/binding-openharmony-arm64@0.140.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.121.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + '@oxc-parser/binding-wasm32-wasi@0.140.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + '@oxc-parser/binding-win32-arm64-msvc@0.140.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + '@oxc-parser/binding-win32-ia32-msvc@0.140.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.121.0': + '@oxc-parser/binding-win32-x64-msvc@0.140.0': optional: true - '@oxc-project/types@0.121.0': {} + '@oxc-project/types@0.139.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.19.1': - optional: true + '@oxc-project/types@0.140.0': {} - '@oxc-resolver/binding-android-arm64@11.19.1': + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-darwin-arm64@11.19.1': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.19.1': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.19.1': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.19.1': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.19.1': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.19.1': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.19.1': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true '@package-json/types@0.0.12': {} @@ -20138,7 +20465,7 @@ snapshots: '@parcel/watcher-wasm@2.5.6': dependencies: is-glob: 4.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 '@parcel/watcher-win32-arm64@2.5.6': optional: true @@ -20154,7 +20481,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -20193,19 +20520,19 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.0)(rollup@4.60.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@prefresh/vite': 2.4.12(preact@10.29.0)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@prefresh/vite': 2.4.12(preact@10.29.0)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@rollup/pluginutils': 5.3.0(rollup@4.60.1) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 magic-string: 0.30.21 picocolors: 1.1.1 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-prerender-plugin: 0.5.13(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-prerender-plugin: 0.5.13(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) zimmerframe: 1.1.4 transitivePeerDependencies: - preact @@ -20220,7 +20547,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.12(preact@10.29.0)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@prefresh/vite@2.4.12(preact@10.29.0)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@prefresh/babel-plugin': 0.5.3 @@ -20228,7 +20555,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.29.0 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -20426,8 +20753,59 @@ snapshots: '@remix-run/router@1.23.2': {} + '@rolldown/binding-android-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.5': + optional: true + + '@rolldown/binding-darwin-x64@1.1.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.5': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.5': + optional: true + + '@rolldown/binding-wasm32-wasi@1.1.5': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.5': + optional: true + '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/plugin-alias@6.0.0(rollup@4.60.1)': optionalDependencies: rollup: 4.60.1 @@ -20437,10 +20815,10 @@ snapshots: '@rollup/pluginutils': 5.3.0(rollup@4.60.1) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) is-reference: 1.2.1 magic-string: 0.30.21 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: rollup: 4.60.1 @@ -20492,7 +20870,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: rollup: 4.60.1 @@ -20813,21 +21191,21 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@size-limit/esbuild@12.0.1(size-limit@12.0.1(jiti@2.6.1))': + '@size-limit/esbuild@12.0.1(size-limit@12.0.1(jiti@2.7.0))': dependencies: esbuild: 0.27.4 nanoid: 5.1.7 - size-limit: 12.0.1(jiti@2.6.1) + size-limit: 12.0.1(jiti@2.7.0) - '@size-limit/file@12.0.1(size-limit@12.0.1(jiti@2.6.1))': + '@size-limit/file@12.0.1(size-limit@12.0.1(jiti@2.7.0))': dependencies: - size-limit: 12.0.1(jiti@2.6.1) + size-limit: 12.0.1(jiti@2.7.0) - '@size-limit/preset-small-lib@12.0.1(size-limit@12.0.1(jiti@2.6.1))': + '@size-limit/preset-small-lib@12.0.1(size-limit@12.0.1(jiti@2.7.0))': dependencies: - '@size-limit/esbuild': 12.0.1(size-limit@12.0.1(jiti@2.6.1)) - '@size-limit/file': 12.0.1(size-limit@12.0.1(jiti@2.6.1)) - size-limit: 12.0.1(jiti@2.6.1) + '@size-limit/esbuild': 12.0.1(size-limit@12.0.1(jiti@2.7.0)) + '@size-limit/file': 12.0.1(size-limit@12.0.1(jiti@2.7.0)) + size-limit: 12.0.1(jiti@2.7.0) '@solid-primitives/event-listener@2.4.5(solid-js@1.9.12)': dependencies: @@ -20905,11 +21283,11 @@ snapshots: dependencies: solid-js: 1.9.12 - '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@solidjs/start@1.3.2(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@tanstack/server-functions-plugin': 1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/server-functions-plugin': 1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vinxi/server-components': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) cookie-es: 2.0.0 defu: 6.1.4 error-stack-parser: 2.1.4 @@ -20921,8 +21299,8 @@ snapshots: source-map-js: 1.2.1 terracotta: 1.1.0(solid-js@1.9.12) tinyglobby: 0.2.15 - vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-solid: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-solid: 2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@testing-library/jest-dom' - solid-js @@ -20940,33 +21318,33 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/types': 8.58.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.11(acorn@8.17.0)': dependencies: - acorn: 8.16.0 + acorn: 8.17.0 - '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: - '@sveltejs/kit': 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@types/cookie': 0.6.0 - acorn: 8.16.0 + acorn: 8.17.0 cookie: 0.6.0 - devalue: 5.6.4 + devalue: 5.8.2 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 @@ -20979,15 +21357,15 @@ snapshots: typescript: 5.8.3 optional: true - '@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/kit@2.57.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(typescript@5.8.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@types/cookie': 0.6.0 - acorn: 8.16.0 + acorn: 8.17.0 cookie: 0.6.0 - devalue: 5.6.4 + devalue: 5.8.2 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 @@ -20995,7 +21373,7 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 5.55.1 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: typescript: 5.8.3 @@ -21020,12 +21398,12 @@ snapshots: - supports-color optional: true - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) debug: 4.4.3 svelte: 5.55.1 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -21043,16 +21421,16 @@ snapshots: - supports-color optional: true - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) debug: 4.4.3 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 svelte: 5.55.1 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color @@ -21132,14 +21510,14 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@tanstack/directive-functions-plugin@1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/directive-functions-plugin@1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -21148,19 +21526,19 @@ snapshots: '@tanstack/router-utils': 1.161.6 babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@tanstack/eslint-config@0.3.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@tanstack/eslint-config@0.3.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint/js': 9.39.4 - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-n: 17.24.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-n: 17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) globals: 16.5.0 - typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.6.1)) + typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.7.0)) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint @@ -21189,11 +21567,11 @@ snapshots: babel-dead-code-elimination: 1.0.12 diff: 8.0.4 pathe: 2.0.3 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/server-functions-plugin@1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.29.0 @@ -21202,7 +21580,7 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - '@tanstack/directive-functions-plugin': 1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/directive-functions-plugin': 1.121.21(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) babel-dead-code-elimination: 1.0.12 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -21217,13 +21595,13 @@ snapshots: transitivePeerDependencies: - typescript - '@tanstack/vite-config@0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tanstack/vite-config@0.4.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: rollup-plugin-preserve-directives: 0.4.0(rollup@4.60.1) - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-dts: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - vite-plugin-externalize-deps: 0.10.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - vite-tsconfig-paths: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-dts: 4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-plugin-externalize-deps: 0.10.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-tsconfig-paths: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@types/node' - rollup @@ -21307,17 +21685,41 @@ snapshots: dependencies: svelte: 5.55.1 - '@testing-library/svelte@5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@testing-library/svelte@5.3.1(svelte@5.55.1)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/svelte-core': 1.0.0(svelte@5.55.1) svelte: 5.55.1 optionalDependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tsconfig/svelte@5.0.8': {} + '@tsrx/core@0.1.47(@typescript-eslint/types@8.58.1)': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@noble/hashes': 2.2.0 + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + acorn: 8.17.0 + esrap: 2.3.0(@typescript-eslint/types@8.58.1) + is-reference: 3.0.3 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + + '@tsrx/react@0.2.47(@typescript-eslint/types@8.58.1)(react@19.2.4)': + dependencies: + '@tsrx/core': 0.1.47(@typescript-eslint/types@8.58.1) + esrap: 2.3.0(@typescript-eslint/types@8.58.1) + react: 19.2.4 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -21330,6 +21732,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -21386,6 +21793,10 @@ snapshots: '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + '@types/estree@1.0.8': {} '@types/graceful-fs@4.1.9': @@ -21492,15 +21903,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.58.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.8.3) @@ -21508,15 +21919,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.58.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -21524,26 +21935,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -21566,13 +21977,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/rule-tester@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) ajv: 6.14.0 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 semver: 7.7.4 @@ -21593,25 +22004,25 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -21628,7 +22039,7 @@ snapshots: debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -21643,30 +22054,30 @@ snapshots: debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.8.3) - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -21773,7 +22184,7 @@ snapshots: glob: 10.5.0 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 - picomatch: 4.0.4 + picomatch: 4.0.5 resolve-from: 5.0.0 transitivePeerDependencies: - encoding @@ -21792,7 +22203,7 @@ snapshots: glob: 13.0.6 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 - picomatch: 4.0.4 + picomatch: 4.0.5 resolve-from: 5.0.0 transitivePeerDependencies: - encoding @@ -21831,7 +22242,7 @@ snapshots: untun: 0.1.3 uqr: 0.1.2 - '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/parser': 7.29.2 acorn: 8.16.0 @@ -21842,24 +22253,24 @@ snapshots: magicast: 0.2.11 recast: 0.23.11 tslib: 2.8.1 - vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vinxi/server-components@0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) acorn: 8.16.0 acorn-loose: 8.5.2 acorn-typescript: 1.4.13(acorn@8.16.0) astring: 1.9.0 magicast: 0.2.11 recast: 0.23.11 - vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vinxi: 0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitejs/plugin-basic-ssl@2.1.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -21867,21 +22278,21 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.8.3))': dependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@5.8.3) - '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': dependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@5.9.3) - '@vitest/coverage-istanbul@4.0.6(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-istanbul@4.0.6(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.3 @@ -21892,19 +22303,19 @@ snapshots: istanbul-reports: 3.2.0 magicast: 0.3.5 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.6.14(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/eslint-plugin@1.6.14(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)(vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) typescript: 5.9.3 - vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - supports-color @@ -21917,14 +22328,23 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 4.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.14(@types/node@22.19.15)(typescript@5.9.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + + '@vitest/mocker@4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.14(@types/node@22.19.15)(typescript@5.9.3) - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.2': dependencies: @@ -22042,7 +22462,7 @@ snapshots: '@vue/shared': 3.5.31 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.8 + postcss: 8.5.22 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.31': @@ -22362,6 +22782,10 @@ snapshots: dependencies: acorn: 8.16.0 + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-loose@8.5.2: dependencies: acorn: 8.16.0 @@ -22374,6 +22798,8 @@ snapshots: acorn@8.16.0: {} + acorn@8.17.0: {} + agent-base@7.1.4: {} aggregate-error@3.1.0: @@ -23915,7 +24341,7 @@ snapshots: cspell-glob@9.7.0: dependencies: '@cspell/url': 9.7.0 - picomatch: 4.0.4 + picomatch: 4.0.5 cspell-grammar@9.7.0: dependencies: @@ -24203,6 +24629,8 @@ snapshots: devalue@5.6.4: {} + devalue@5.8.2: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -24584,22 +25012,22 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) semver: 7.7.4 - eslint-config-preact@2.0.0(eslint@9.39.4(jiti@2.6.1)): + eslint-config-preact@2.0.0(eslint@9.39.4(jiti@2.7.0)): dependencies: '@babel/core': 7.29.0 - '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@9.39.4(jiti@2.7.0)) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) '@eslint/js': 9.39.4 - eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-compat: 6.2.1(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.6.1)) + eslint: 9.39.4(jiti@2.7.0) + eslint-plugin-compat: 6.2.1(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.4(jiti@2.7.0)) globals: 16.5.0 transitivePeerDependencies: - supports-color @@ -24611,31 +25039,31 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-compat@6.2.1(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-compat@6.2.1(eslint@9.39.4(jiti@2.7.0)): dependencies: '@mdn/browser-compat-data': 6.1.5 ast-metadata-inferer: 0.8.1 browserslist: 4.28.2 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 semver: 7.7.4 - eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.4(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@2.6.1)) + eslint: 9.39.4(jiti@2.7.0) + eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.58.1 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -24643,18 +25071,18 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@50.8.0(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-jsdoc@50.8.0(eslint@9.39.4(jiti@2.7.0)): dependencies: '@es-joy/jsdoccomment': 0.50.2 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) espree: 10.4.0 esquery: 1.7.0 parse-imports-exports: 0.2.4 @@ -24663,12 +25091,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) enhanced-resolve: 5.20.1 - eslint: 9.39.4(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@2.6.1)) + eslint: 9.39.4(jiti@2.7.0) + eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@2.7.0)) get-tsconfig: 4.13.7 globals: 15.15.0 globrex: 0.1.2 @@ -24678,124 +25106,124 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-react-dom@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-dom@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-hooks-extra@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@2.7.0)): dependencies: - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) - eslint-plugin-react-hooks@6.1.1(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-react-hooks@6.1.1(eslint@9.39.4(jiti@2.7.0)): dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.2 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react-naming-convention@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-naming-convention@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) string-ts: 2.3.1 ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-rsc@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-rsc@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-web-api@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-web-api@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) birecord: 0.1.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-react-x@2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/ast': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/core': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@eslint-react/eff': 2.13.0 - '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@eslint-react/shared': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@eslint-react/var': 2.13.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) compare-versions: 6.1.1 - eslint: 9.39.4(jiti@2.6.1) - is-immutable-type: 5.0.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) + is-immutable-type: 5.0.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) ts-api-utils: 2.5.0(typescript@5.9.3) ts-pattern: 5.9.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -24803,7 +25231,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.3.1 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -24817,11 +25245,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-svelte@3.16.0(eslint@9.39.4(jiti@2.6.1))(svelte@5.55.1): + eslint-plugin-svelte@3.16.0(eslint@9.39.4(jiti@2.7.0))(svelte@5.55.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 @@ -24835,33 +25263,33 @@ snapshots: transitivePeerDependencies: - ts-node - eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0))): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - eslint: 9.39.4(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + eslint: 9.39.4(jiti@2.7.0) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.1 semver: 7.7.4 - vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.6.1)) + vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.7.0)) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.7.0)) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) - eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1))): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@9.39.4(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0))): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) - eslint: 9.39.4(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + eslint: 9.39.4(jiti@2.7.0) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.1 semver: 7.7.4 - vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.6.1)) + vue-eslint-parser: 10.4.0(eslint@9.39.4(jiti@2.7.0)) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.6.1)) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.7.0)) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) eslint-scope@4.0.3: dependencies: @@ -24893,9 +25321,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@2.6.1): + eslint@9.39.4(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -24930,7 +25358,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -24944,8 +25372,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 esprima@4.0.1: {} @@ -24959,6 +25387,12 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@typescript-eslint/types': 8.58.1 + esrap@2.3.0(@typescript-eslint/types@8.58.1): + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + optionalDependencies: + '@typescript-eslint/types': 8.58.1 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -25289,6 +25723,10 @@ snapshots: optionalDependencies: picomatch: 4.0.4 + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -25591,6 +26029,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + get-value@2.0.6: {} getenv@1.0.0: {} @@ -25927,9 +26369,9 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 - html-encoding-sniffer@6.0.0: + html-encoding-sniffer@6.0.0(@noble/hashes@2.2.0): dependencies: - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.0(@noble/hashes@2.2.0) transitivePeerDependencies: - '@noble/hashes' @@ -26275,10 +26717,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + is-immutable-type@5.0.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) ts-declaration-location: 1.0.7(typescript@5.9.3) typescript: 5.9.3 @@ -26531,7 +26973,7 @@ snapshots: jest-regex-util: 30.0.1 jest-util: 30.3.0 jest-worker: 30.3.0 - picomatch: 4.0.4 + picomatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -26562,7 +27004,7 @@ snapshots: '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - picomatch: 4.0.4 + picomatch: 4.0.5 pretty-format: 30.3.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -26625,7 +27067,7 @@ snapshots: chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 - picomatch: 4.0.4 + picomatch: 4.0.5 jest-validate@29.7.0: dependencies: @@ -26663,6 +27105,8 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + jju@1.4.0: {} join-component@1.1.0: {} @@ -26770,15 +27214,15 @@ snapshots: - supports-color - utf-8-validate - jsdom@27.4.0: + jsdom@27.4.0(@noble/hashes@2.2.0): dependencies: '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.8.1 - '@exodus/bytes': 1.15.0 + '@exodus/bytes': 1.15.0(@noble/hashes@2.2.0) cssstyle: 5.3.7 data-urls: 6.0.1 decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0 + html-encoding-sniffer: 6.0.0(@noble/hashes@2.2.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 @@ -26869,26 +27313,21 @@ snapshots: klona@2.0.6: {} - knip@6.1.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + knip@6.29.0: dependencies: - '@nodelib/fs.walk': 1.2.8 - fast-glob: 3.3.3 + fdir: 6.5.0(picomatch@4.0.5) formatly: 0.3.0 - get-tsconfig: 4.13.7 - jiti: 2.6.1 - minimist: 1.2.8 - oxc-parser: 0.121.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - oxc-resolver: 11.19.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - picocolors: 1.1.1 - picomatch: 4.0.4 - smol-toml: 1.6.1 + get-tsconfig: 4.14.0 + jiti: 2.7.0 + oxc-parser: 0.140.0 + oxc-resolver: 11.24.2 + picomatch: 4.0.5 + smol-toml: 1.7.0 strip-json-comments: 5.0.3 - unbash: 2.2.0 - yaml: 2.8.3 - zod: 4.3.6 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + tinyglobby: 0.2.17 + unbash: 4.0.3 + yaml: 2.9.0 + zod: 4.4.3 knitwork@1.3.0: {} @@ -28099,6 +28538,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.16: {} + nanoid@5.1.7: {} nanomatch@1.2.13: @@ -28216,7 +28657,7 @@ snapshots: nice-try@1.0.5: {} - nitropack@2.13.2(@vercel/functions@2.2.13)(idb-keyval@6.2.2): + nitropack@2.13.2(@vercel/functions@2.2.13)(idb-keyval@6.2.2)(rolldown@1.1.5): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.1) @@ -28269,7 +28710,7 @@ snapshots: pretty-bytes: 7.1.0 radix3: 1.1.2 rollup: 4.60.1 - rollup-plugin-visualizer: 7.0.1(rollup@4.60.1) + rollup-plugin-visualizer: 7.0.1(rolldown@1.1.5)(rollup@4.60.1) scule: 1.3.0 semver: 7.7.4 serve-placeholder: 2.0.2 @@ -28384,7 +28825,7 @@ snapshots: proc-log: 6.1.0 semver: 7.7.4 tar: 7.5.13 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 which: 6.0.1 transitivePeerDependencies: - supports-color @@ -28658,6 +29099,19 @@ snapshots: obug@2.1.1: {} + octane@0.1.13(@typescript-eslint/types@8.58.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)): + dependencies: + '@tsrx/core': 0.1.47(@typescript-eslint/types@8.58.1) + '@types/react': 19.2.14 + devalue: 5.8.2 + esrap: 2.3.0(@typescript-eslint/types@8.58.1) + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + vite: 8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@typescript-eslint/types' + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -28786,59 +29240,52 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-parser@0.121.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + oxc-parser@0.140.0: dependencies: - '@oxc-project/types': 0.121.0 + '@oxc-project/types': 0.140.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.121.0 - '@oxc-parser/binding-android-arm64': 0.121.0 - '@oxc-parser/binding-darwin-arm64': 0.121.0 - '@oxc-parser/binding-darwin-x64': 0.121.0 - '@oxc-parser/binding-freebsd-x64': 0.121.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 - '@oxc-parser/binding-linux-arm64-musl': 0.121.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-gnu': 0.121.0 - '@oxc-parser/binding-linux-x64-musl': 0.121.0 - '@oxc-parser/binding-openharmony-arm64': 0.121.0 - '@oxc-parser/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 - '@oxc-parser/binding-win32-x64-msvc': 0.121.0 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - oxc-resolver@11.19.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): + '@oxc-parser/binding-android-arm-eabi': 0.140.0 + '@oxc-parser/binding-android-arm64': 0.140.0 + '@oxc-parser/binding-darwin-arm64': 0.140.0 + '@oxc-parser/binding-darwin-x64': 0.140.0 + '@oxc-parser/binding-freebsd-x64': 0.140.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.140.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.140.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.140.0 + '@oxc-parser/binding-linux-arm64-musl': 0.140.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.140.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.140.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.140.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.140.0 + '@oxc-parser/binding-linux-x64-gnu': 0.140.0 + '@oxc-parser/binding-linux-x64-musl': 0.140.0 + '@oxc-parser/binding-openharmony-arm64': 0.140.0 + '@oxc-parser/binding-wasm32-wasi': 0.140.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.140.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.140.0 + '@oxc-parser/binding-win32-x64-msvc': 0.140.0 + + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.19.1 - '@oxc-resolver/binding-android-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-x64': 11.19.1 - '@oxc-resolver/binding-freebsd-x64': 11.19.1 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-arm64-musl': 11.19.1 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-musl': 11.19.1 - '@oxc-resolver/binding-linux-s390x-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-musl': 11.19.1 - '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) - '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 - '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 - '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 p-event@5.0.1: dependencies: @@ -29119,6 +29566,8 @@ snapshots: picomatch@4.0.4: {} + picomatch@4.0.5: {} + pidtree@0.5.0: {} pify@2.3.0: {} @@ -29204,11 +29653,20 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 + postcss: 8.5.22 + tsx: 4.21.0 + yaml: 2.8.3 + + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.7.0 postcss: 8.5.8 tsx: 4.21.0 yaml: 2.8.3 @@ -29252,6 +29710,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.22: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.8: dependencies: nanoid: 3.3.11 @@ -30037,19 +30501,41 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 + rolldown@1.1.5: + dependencies: + '@oxc-project/types': 0.139.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.5 + '@rolldown/binding-darwin-arm64': 1.1.5 + '@rolldown/binding-darwin-x64': 1.1.5 + '@rolldown/binding-freebsd-x64': 1.1.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 + '@rolldown/binding-linux-arm64-gnu': 1.1.5 + '@rolldown/binding-linux-arm64-musl': 1.1.5 + '@rolldown/binding-linux-ppc64-gnu': 1.1.5 + '@rolldown/binding-linux-s390x-gnu': 1.1.5 + '@rolldown/binding-linux-x64-gnu': 1.1.5 + '@rolldown/binding-linux-x64-musl': 1.1.5 + '@rolldown/binding-openharmony-arm64': 1.1.5 + '@rolldown/binding-wasm32-wasi': 1.1.5 + '@rolldown/binding-win32-arm64-msvc': 1.1.5 + '@rolldown/binding-win32-x64-msvc': 1.1.5 + rollup-plugin-preserve-directives@0.4.0(rollup@4.60.1): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.1) magic-string: 0.30.21 rollup: 4.60.1 - rollup-plugin-visualizer@7.0.1(rollup@4.60.1): + rollup-plugin-visualizer@7.0.1(rolldown@1.1.5)(rollup@4.60.1): dependencies: open: 11.0.0 - picomatch: 4.0.4 + picomatch: 4.0.5 source-map: 0.7.6 yargs: 18.0.0 optionalDependencies: + rolldown: 1.1.5 rollup: 4.60.1 rollup@4.59.0: @@ -30533,7 +31019,7 @@ snapshots: sisteransi@1.0.5: {} - size-limit@12.0.1(jiti@2.6.1): + size-limit@12.0.1(jiti@2.7.0): dependencies: bytes-iec: 3.1.1 lilconfig: 3.1.3 @@ -30541,7 +31027,7 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.15 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 skin-tone@2.0.0: dependencies: @@ -30571,6 +31057,8 @@ snapshots: smol-toml@1.6.1: {} + smol-toml@1.7.0: {} + snapdragon-node@2.1.1: dependencies: define-property: 1.0.0 @@ -30940,7 +31428,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 superjson@2.2.6: @@ -30985,11 +31473,23 @@ snapshots: transitivePeerDependencies: - picomatch - svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.1)(typescript@5.9.3): + svelte-check@4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.8.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 5.0.0 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.55.1 + typescript: 5.8.3 + transitivePeerDependencies: + - picomatch + + svelte-check@4.4.6(picomatch@4.0.5)(svelte@5.55.1)(typescript@5.9.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 5.0.0 + fdir: 6.5.0(picomatch@4.0.5) picocolors: 1.1.1 sade: 1.8.1 svelte: 5.55.1 @@ -31020,14 +31520,14 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/acorn-typescript': 1.0.11(acorn@8.17.0) '@types/estree': 1.0.8 '@types/trusted-types': 2.0.7 - acorn: 8.16.0 + acorn: 8.17.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.6.4 + devalue: 5.8.2 esm-env: 1.2.2 esrap: 2.2.4 is-reference: 3.0.3 @@ -31191,7 +31691,7 @@ snapshots: terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -31238,14 +31738,19 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + tinyrainbow@3.1.0: {} tldts-core@6.1.86: {} @@ -31330,7 +31835,7 @@ snapshots: ts-declaration-location@1.0.7(typescript@5.9.3): dependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 typescript: 5.9.3 ts-expose-internals-conditionally@1.0.0-empty.0: {} @@ -31355,16 +31860,45 @@ snapshots: tslib@2.8.1: {} - tsup-preset-solid@2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): + tsup-preset-solid@2.2.0(esbuild@0.27.4)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3)): dependencies: esbuild-plugin-solid: 0.5.0(esbuild@0.27.4)(solid-js@1.9.12) - tsup: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) + tsup: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + dependencies: + bundle-require: 5.1.0(esbuild@0.27.4) + cac: 6.7.14 + chokidar: 5.0.0 + consola: 3.4.2 + debug: 4.4.3 + esbuild: 0.27.4 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.22)(tsx@4.21.0)(yaml@2.8.3) + resolve-from: 5.0.0 + rollup: 4.60.1 + source-map: 0.7.6 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + optionalDependencies: + '@microsoft/api-extractor': 7.47.7(@types/node@22.19.15) + postcss: 8.5.22 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + tsup@8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.15))(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.4) cac: 6.7.14 @@ -31375,7 +31909,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) resolve-from: 5.0.0 rollup: 4.60.1 source-map: 0.7.6 @@ -31396,7 +31930,7 @@ snapshots: tsx@4.21.0: dependencies: esbuild: 0.27.4 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 optionalDependencies: fsevents: 2.3.3 @@ -31497,24 +32031,24 @@ snapshots: dependencies: semver: 7.7.4 - typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3): + typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.8.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.8.3) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.6.1) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -31545,7 +32079,7 @@ snapshots: ultrahtml@1.6.0: {} - unbash@2.2.0: {} + unbash@4.0.3: {} unbox-primitive@1.1.0: dependencies: @@ -31623,11 +32157,11 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 pkg-types: 2.3.0 scule: 1.3.0 strip-literal: 3.1.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 unplugin: 3.0.0 unplugin-utils: 0.3.1 @@ -31713,19 +32247,19 @@ snapshots: unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.16.0 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 unplugin@3.0.0: dependencies: '@jridgewell/remapping': 2.3.5 - picomatch: 4.0.4 + picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 unrs-resolver@1.11.1: @@ -31876,7 +32410,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vinxi@0.5.11(@types/node@22.19.15)(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(jiti@2.7.0)(lightningcss@1.32.0)(rolldown@1.1.5)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -31897,7 +32431,7 @@ snapshots: hookable: 5.5.3 http-proxy: 1.18.1 micromatch: 4.0.8 - nitropack: 2.13.2(@vercel/functions@2.2.13)(idb-keyval@6.2.2) + nitropack: 2.13.2(@vercel/functions@2.2.13)(idb-keyval@6.2.2)(rolldown@1.1.5) node-fetch-native: 1.6.7 path-to-regexp: 6.3.0 pathe: 1.1.2 @@ -31910,7 +32444,7 @@ snapshots: unctx: 2.5.0 unenv: 1.10.0 unstorage: 1.17.5(@vercel/functions@2.2.13)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1) - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) zod: 4.3.6 transitivePeerDependencies: - '@azure/app-configuration' @@ -31958,7 +32492,7 @@ snapshots: - xml2js - yaml - vite-plugin-dts@4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-dts@4.2.3(@types/node@22.19.15)(rollup@4.60.1)(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@microsoft/api-extractor': 7.47.7(@types/node@22.19.15) '@rollup/pluginutils': 5.3.0(rollup@4.60.1) @@ -31971,19 +32505,19 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externalize-deps@0.10.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-externalize-deps@0.10.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-externalize-deps@0.9.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-externalize-deps@0.9.0(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: @@ -32000,7 +32534,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-solid@2.11.11(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 @@ -32008,14 +32542,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.12 solid-refresh: 0.6.3(solid-js@1.9.12) - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitefu: 1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.13(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-prerender-plugin@0.5.13(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -32023,15 +32557,15 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript @@ -32054,7 +32588,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -32065,25 +32599,42 @@ snapshots: optionalDependencies: '@types/node': 22.19.15 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.32.0 sass: 1.90.0 terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.3 + vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.5 + postcss: 8.5.22 + rolldown: 1.1.5 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 22.19.15 + esbuild: 0.27.4 + fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.90.0 + terser: 5.46.1 + tsx: 4.21.0 + yaml: 2.9.0 + vitefu@1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: vite: 6.4.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu@1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.2(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0)(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.2 '@vitest/runner': 4.1.2 '@vitest/snapshot': 4.1.2 @@ -32100,11 +32651,39 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 6.4.1(@types/node@22.19.15)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@22.19.15)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.15 - jsdom: 27.4.0 + jsdom: 27.4.0(@noble/hashes@2.2.0) + transitivePeerDependencies: + - msw + + vitest@4.1.2(@types/node@22.19.15)(jsdom@27.4.0(@noble/hashes@2.2.0))(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(msw@2.12.14(@types/node@22.19.15)(typescript@5.9.3))(vite@8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vite: 8.1.5(@types/node@22.19.15)(esbuild@0.27.4)(jiti@2.7.0)(sass@1.90.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.19.15 + jsdom: 27.4.0(@noble/hashes@2.2.0) transitivePeerDependencies: - msw @@ -32215,10 +32794,10 @@ snapshots: optionalDependencies: '@vue/composition-api': 1.7.2(vue@3.5.31(typescript@5.9.3)) - vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.6.1)): + vue-eslint-parser@10.4.0(eslint@9.39.4(jiti@2.7.0)): dependencies: debug: 4.4.3 - eslint: 9.39.4(jiti@2.6.1) + eslint: 9.39.4(jiti@2.7.0) eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 espree: 11.2.0 @@ -32648,6 +33227,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.0: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -32739,6 +33320,8 @@ snapshots: zod@4.3.6: {} + zod@4.4.3: {} + zone.js@0.15.0: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4e37d863ded..86e8619e83f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,8 +24,14 @@ packages: - '!examples/vue/2*' - '!examples/vue/nuxt*' +catalog: + octane: ^0.1.13 + overrides: 'chokidar': '5.0.0' + '@angular/build>vite': '^6.4.1' + 'svelte@5.55.1>esrap': '2.2.4' + 'vite@6.4.1>yaml': '2.8.3' '@types/react': '^19.2.7' '@types/react-dom': '^19.2.3' '@types/node': '^22.15.3' @@ -41,7 +47,6 @@ overrides: '@typescript-eslint/utils': '8.58.1' '@typescript-eslint/visitor-keys': '8.58.1' typescript-eslint: '8.58.1' - vite: '^6.4.1' esbuild: '^0.27.2' allowBuilds: diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 574fe8d8b60..91e93812edc 100644 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -167,6 +167,13 @@ for (const pkg of [ outputDir: resolve(__dirname, '../docs/framework/preact/reference'), exclude: ['./packages/query-core/**/*'], }, + { + entryPoints: [resolve(__dirname, '../packages/octane-query/src/index.ts')], + tsconfig: resolve(__dirname, '../packages/octane-query/tsconfig.json'), + outputDir: resolve(__dirname, '../docs/framework/octane/reference'), + exclude: ['./packages/query-core/**/*'], + trimGeneratedMarkdown: true, + }, { entryPoints: [resolve(__dirname, '../packages/lit-query/src/index.ts')], tsconfig: resolve(__dirname, '../packages/lit-query/tsconfig.json'),