@tanstack/lit-query 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/build/legacy/index.cjs +1585 -0
- package/build/legacy/index.cjs.map +1 -0
- package/build/legacy/index.d.cts +781 -0
- package/build/legacy/index.d.cts.map +1 -0
- package/build/legacy/index.d.ts +781 -0
- package/build/legacy/index.d.ts.map +1 -0
- package/build/legacy/index.js +1561 -0
- package/build/legacy/index.js.map +1 -0
- package/build/modern/index.cjs +1569 -0
- package/build/modern/index.cjs.map +1 -0
- package/build/modern/index.d.cts +781 -0
- package/build/modern/index.d.cts.map +1 -0
- package/build/modern/index.d.ts +781 -0
- package/build/modern/index.d.ts.map +1 -0
- package/build/modern/index.js +1545 -0
- package/build/modern/index.js.map +1 -0
- package/package.json +27 -30
- package/src/createInfiniteQueryController.ts +0 -1
- package/src/createMutationController.ts +9 -7
- package/src/createQueriesController.ts +0 -2
- package/src/createQueryController.ts +0 -1
- package/src/infiniteQueryOptions.ts +10 -4
- package/dist/QueryClientProvider.d.ts +0 -85
- package/dist/QueryClientProvider.d.ts.map +0 -1
- package/dist/QueryClientProvider.js +0 -137
- package/dist/QueryClientProvider.js.map +0 -1
- package/dist/accessor.d.ts +0 -32
- package/dist/accessor.d.ts.map +0 -1
- package/dist/accessor.js +0 -12
- package/dist/accessor.js.map +0 -1
- package/dist/context.d.ts +0 -59
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -100
- package/dist/context.js.map +0 -1
- package/dist/controllers/BaseController.d.ts +0 -39
- package/dist/controllers/BaseController.d.ts.map +0 -1
- package/dist/controllers/BaseController.js +0 -213
- package/dist/controllers/BaseController.js.map +0 -1
- package/dist/createInfiniteQueryController.d.ts +0 -76
- package/dist/createInfiniteQueryController.d.ts.map +0 -1
- package/dist/createInfiniteQueryController.js +0 -248
- package/dist/createInfiniteQueryController.js.map +0 -1
- package/dist/createMutationController.d.ts +0 -79
- package/dist/createMutationController.d.ts.map +0 -1
- package/dist/createMutationController.js +0 -193
- package/dist/createMutationController.js.map +0 -1
- package/dist/createQueriesController.d.ts +0 -145
- package/dist/createQueriesController.d.ts.map +0 -1
- package/dist/createQueriesController.js +0 -367
- package/dist/createQueriesController.js.map +0 -1
- package/dist/createQueryController.d.ts +0 -67
- package/dist/createQueryController.d.ts.map +0 -1
- package/dist/createQueryController.js +0 -238
- package/dist/createQueryController.js.map +0 -1
- package/dist/index.d.ts +0 -24
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -15
- package/dist/index.js.map +0 -1
- package/dist/infiniteQueryOptions.d.ts +0 -21
- package/dist/infiniteQueryOptions.d.ts.map +0 -1
- package/dist/infiniteQueryOptions.js +0 -22
- package/dist/infiniteQueryOptions.js.map +0 -1
- package/dist/mutationOptions.d.ts +0 -19
- package/dist/mutationOptions.d.ts.map +0 -1
- package/dist/mutationOptions.js +0 -20
- package/dist/mutationOptions.js.map +0 -1
- package/dist/queryObserverResultTracker.d.ts +0 -14
- package/dist/queryObserverResultTracker.d.ts.map +0 -1
- package/dist/queryObserverResultTracker.js +0 -18
- package/dist/queryObserverResultTracker.js.map +0 -1
- package/dist/queryOptions.d.ts +0 -62
- package/dist/queryOptions.d.ts.map +0 -1
- package/dist/queryOptions.js +0 -4
- package/dist/queryOptions.js.map +0 -1
- package/dist/types.d.ts +0 -31
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/useIsFetching.d.ts +0 -45
- package/dist/useIsFetching.d.ts.map +0 -1
- package/dist/useIsFetching.js +0 -116
- package/dist/useIsFetching.js.map +0 -1
- package/dist/useIsMutating.d.ts +0 -45
- package/dist/useIsMutating.d.ts.map +0 -1
- package/dist/useIsMutating.js +0 -116
- package/dist/useIsMutating.js.map +0 -1
- package/dist/useMutationState.d.ts +0 -57
- package/dist/useMutationState.d.ts.map +0 -1
- package/dist/useMutationState.js +0 -136
- package/dist/useMutationState.js.map +0 -1
- package/dist-cjs/QueryClientProvider.d.cts +0 -84
- package/dist-cjs/QueryClientProvider.js +0 -141
- package/dist-cjs/QueryClientProvider.js.map +0 -1
- package/dist-cjs/accessor.d.cts +0 -31
- package/dist-cjs/accessor.js +0 -16
- package/dist-cjs/accessor.js.map +0 -1
- package/dist-cjs/context.d.cts +0 -58
- package/dist-cjs/context.js +0 -109
- package/dist-cjs/context.js.map +0 -1
- package/dist-cjs/controllers/BaseController.d.cts +0 -38
- package/dist-cjs/controllers/BaseController.js +0 -217
- package/dist-cjs/controllers/BaseController.js.map +0 -1
- package/dist-cjs/createInfiniteQueryController.d.cts +0 -75
- package/dist-cjs/createInfiniteQueryController.js +0 -251
- package/dist-cjs/createInfiniteQueryController.js.map +0 -1
- package/dist-cjs/createMutationController.d.cts +0 -78
- package/dist-cjs/createMutationController.js +0 -196
- package/dist-cjs/createMutationController.js.map +0 -1
- package/dist-cjs/createQueriesController.d.cts +0 -144
- package/dist-cjs/createQueriesController.js +0 -370
- package/dist-cjs/createQueriesController.js.map +0 -1
- package/dist-cjs/createQueryController.d.cts +0 -66
- package/dist-cjs/createQueryController.js +0 -241
- package/dist-cjs/createQueryController.js.map +0 -1
- package/dist-cjs/index.d.cts +0 -23
- package/dist-cjs/index.js +0 -49
- package/dist-cjs/index.js.map +0 -1
- package/dist-cjs/infiniteQueryOptions.d.cts +0 -20
- package/dist-cjs/infiniteQueryOptions.js +0 -25
- package/dist-cjs/infiniteQueryOptions.js.map +0 -1
- package/dist-cjs/mutationOptions.d.cts +0 -18
- package/dist-cjs/mutationOptions.js +0 -23
- package/dist-cjs/mutationOptions.js.map +0 -1
- package/dist-cjs/package.json +0 -3
- package/dist-cjs/queryObserverResultTracker.d.cts +0 -13
- package/dist-cjs/queryObserverResultTracker.js +0 -22
- package/dist-cjs/queryObserverResultTracker.js.map +0 -1
- package/dist-cjs/queryOptions.d.cts +0 -61
- package/dist-cjs/queryOptions.js +0 -7
- package/dist-cjs/queryOptions.js.map +0 -1
- package/dist-cjs/types.d.cts +0 -30
- package/dist-cjs/types.js +0 -3
- package/dist-cjs/types.js.map +0 -1
- package/dist-cjs/useIsFetching.d.cts +0 -44
- package/dist-cjs/useIsFetching.js +0 -119
- package/dist-cjs/useIsFetching.js.map +0 -1
- package/dist-cjs/useIsMutating.d.cts +0 -44
- package/dist-cjs/useIsMutating.js +0 -119
- package/dist-cjs/useIsMutating.js.map +0 -1
- package/dist-cjs/useMutationState.d.cts +0 -56
- package/dist-cjs/useMutationState.js +0 -139
- package/dist-cjs/useMutationState.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/context.ts","../../src/QueryClientProvider.ts","../../src/accessor.ts","../../src/controllers/BaseController.ts","../../src/queryObserverResultTracker.ts","../../src/createInfiniteQueryController.ts","../../src/createMutationController.ts","../../src/createQueriesController.ts","../../src/createQueryController.ts","../../src/useIsFetching.ts","../../src/useIsMutating.ts","../../src/useMutationState.ts","../../src/queryOptions.ts","../../src/infiniteQueryOptions.ts","../../src/mutationOptions.ts","../../src/index.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport type { QueryClient } from '@tanstack/query-core'\n\n/**\n * Lit context key used by `QueryClientProvider` and host-bound APIs to share a\n * `QueryClient` through the DOM tree.\n *\n * Most applications use `QueryClientProvider` instead of interacting with this\n * context directly.\n */\nexport const queryClientContext = createContext<QueryClient>(\n Symbol.for('tanstack-query-client'),\n)\n\nconst missingQueryClientMessage =\n 'No QueryClient available. Pass one explicitly or render within QueryClientProvider.'\nconst ambiguousQueryClientMessage =\n 'Multiple QueryClients are mounted. Pass one explicitly instead of relying on global QueryClient helpers.'\n\nconst registeredClients = new Map<QueryClient, number>()\nlet defaultClient: QueryClient | undefined\n\n/**\n * Registers a `QueryClient` as a process-local fallback for APIs that resolve a\n * client without an explicit argument.\n *\n * `QueryClientProvider` calls this automatically while it is connected. Prefer\n * passing an explicit client or rendering under a provider when possible.\n *\n * @param client - The query client to register as the current default.\n */\nexport function registerDefaultQueryClient(client: QueryClient): void {\n registeredClients.set(client, (registeredClients.get(client) ?? 0) + 1)\n defaultClient = client\n}\n\n/**\n * Unregisters a client previously registered with\n * `registerDefaultQueryClient`.\n *\n * `QueryClientProvider` calls this automatically when it disconnects.\n *\n * @param client - The query client registration to release.\n */\nexport function unregisterDefaultQueryClient(client: QueryClient): void {\n const count = registeredClients.get(client)\n if (count === undefined) {\n return\n }\n\n if (count > 1) {\n registeredClients.set(client, count - 1)\n return\n }\n\n registeredClients.delete(client)\n if (defaultClient !== client) {\n return\n }\n\n const remaining = [...registeredClients.keys()]\n defaultClient = remaining.at(-1)\n}\n\n/**\n * Returns the registered default `QueryClient`, if exactly one default client is\n * available.\n *\n * @returns The default query client, or `undefined` when there is no registered\n * client or more than one registered client.\n */\nexport function getDefaultQueryClient(): QueryClient | undefined {\n if (registeredClients.size > 1) {\n return undefined\n }\n\n return defaultClient\n}\n\nexport function createMissingQueryClientError(): Error {\n return new Error(missingQueryClientMessage)\n}\n\nfunction createAmbiguousQueryClientError(): Error {\n return new Error(ambiguousQueryClientMessage)\n}\n\n/**\n * Resolves the current default `QueryClient` registered by a connected\n * `QueryClientProvider`.\n *\n * This helper is useful outside a Lit reactive controller when a single\n * provider is mounted. It throws if no client is registered or if multiple\n * clients are mounted and the default would be ambiguous.\n *\n * @returns The single registered query client.\n */\nexport function useQueryClient(): QueryClient {\n const client = getDefaultQueryClient()\n if (client) {\n return client\n }\n\n if (registeredClients.size > 1) {\n throw createAmbiguousQueryClientError()\n }\n\n throw createMissingQueryClientError()\n}\n\n/**\n * Resolves an explicit `QueryClient` or falls back to `useQueryClient`.\n *\n * @param explicit - Optional client supplied by the caller.\n * @returns The explicit client when provided, otherwise the current default\n * client.\n */\nexport function resolveQueryClient(explicit?: QueryClient): QueryClient {\n return explicit ?? useQueryClient()\n}\n","import { ContextProvider } from '@lit/context'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { TemplateResult } from 'lit'\nimport { LitElement, html } from 'lit'\nimport {\n createMissingQueryClientError,\n queryClientContext,\n registerDefaultQueryClient,\n unregisterDefaultQueryClient,\n} from './context.js'\n\n/**\n * Lit element that provides a `QueryClient` to descendant Lit Query\n * controllers through Lit context.\n *\n * The `client` is a property, not an attribute. When rendering this element in\n * a Lit template, bind it with property binding: `.client=${queryClient}`.\n * The provider throws if it connects without a client, or if an already\n * connected provider has its client cleared.\n *\n * This class is not registered as a custom element by the package. Applications\n * must register either a subclass or the class itself with\n * `customElements.define`.\n *\n * @example\n * ```ts\n * import { html, LitElement } from 'lit'\n * import { QueryClient, QueryClientProvider } from '@tanstack/lit-query'\n *\n * const queryClient = new QueryClient()\n *\n * class AppQueryProvider extends QueryClientProvider {\n * constructor() {\n * super()\n * this.client = queryClient\n * }\n * }\n *\n * customElements.define('app-query-provider', AppQueryProvider)\n *\n * class AppRoot extends LitElement {\n * render() {\n * return html`<app-query-provider><todos-view></todos-view></app-query-provider>`\n * }\n * }\n * ```\n *\n * @example\n * ```ts\n * import { html } from 'lit'\n * import { QueryClient, QueryClientProvider } from '@tanstack/lit-query'\n *\n * const queryClient = new QueryClient()\n *\n * customElements.define('query-client-provider', QueryClientProvider)\n *\n * const view = html`\n * <query-client-provider .client=${queryClient}>\n * <todos-view></todos-view>\n * </query-client-provider>\n * `\n * ```\n */\nexport class QueryClientProvider extends LitElement {\n /** @internal */\n static properties = {\n client: { attribute: false },\n }\n\n /**\n * The `QueryClient` provided to descendant controllers and global fallback\n * helpers while this provider is connected.\n *\n * Bind this as a property in Lit templates with `.client=${queryClient}`.\n */\n declare client: QueryClient\n\n private readonly contextProvider: ContextProvider<typeof queryClientContext>\n\n private mountedClient: QueryClient | undefined\n\n constructor() {\n super()\n this.contextProvider = new ContextProvider(this, {\n context: queryClientContext,\n })\n }\n\n /** @internal */\n connectedCallback(): void {\n super.connectedCallback()\n const client = this.requireClient()\n this.contextProvider.setValue(client)\n this.mountClient(client)\n }\n\n /** @internal */\n disconnectedCallback(): void {\n this.unmountClient(this.mountedClient)\n super.disconnectedCallback()\n }\n\n /** @internal */\n protected willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n if (!changedProperties.has('client')) {\n return\n }\n\n const nextClient = this.client\n if (!nextClient) {\n if (this.isConnected) {\n this.unmountClient(this.mountedClient)\n // Sentinel: notify active consumers that the provider is now unbound.\n this.contextProvider.setValue(undefined as unknown as QueryClient)\n throw createMissingQueryClientError()\n }\n\n return\n }\n\n const previousClient = changedProperties.get('client') as\n | QueryClient\n | undefined\n if (previousClient && previousClient !== nextClient && this.isConnected) {\n this.unmountClient(previousClient)\n }\n\n this.contextProvider.setValue(nextClient)\n\n if (this.isConnected) {\n this.mountClient(nextClient)\n }\n }\n\n /** @internal */\n render(): TemplateResult {\n return html`<slot></slot>`\n }\n\n private mountClient(client: QueryClient): void {\n if (this.mountedClient === client) {\n return\n }\n\n if (this.mountedClient) {\n this.unmountClient(this.mountedClient)\n }\n\n client.mount()\n registerDefaultQueryClient(client)\n this.mountedClient = client\n }\n\n private unmountClient(client?: QueryClient): void {\n if (!client) {\n return\n }\n\n client.unmount()\n unregisterDefaultQueryClient(client)\n\n if (this.mountedClient === client) {\n this.mountedClient = undefined\n }\n }\n\n private requireClient(): QueryClient {\n if (!this.client) {\n throw createMissingQueryClientError()\n }\n\n return this.client\n }\n}\n","/**\n * A value that can be passed directly or read from a zero-argument getter.\n *\n * Lit Query APIs read function accessors during host updates, so the getter can\n * depend on reactive host state.\n *\n * @example\n * ```ts\n * const staticKey: Accessor<readonly unknown[]> = ['todos']\n * const reactiveKey: Accessor<readonly unknown[]> = () => ['todos', this.userId]\n * ```\n */\nexport type Accessor<T> = T | (() => T)\n\nexport function readAccessor<T>(value: Accessor<T>): T {\n return typeof value === 'function' ? (value as () => T)() : value\n}\n\n/**\n * A callable accessor with a `current` property for reading the latest\n * controller result.\n *\n * Controller creators and cache state helpers return this shape so render code\n * can use either `result()` or `result.current`.\n *\n * @example\n * ```ts\n * const query = this.todos()\n * const sameQuery = this.todos.current\n * ```\n */\nexport type ValueAccessor<T> = (() => T) & {\n readonly current: T\n}\n\nexport function createValueAccessor<T>(getter: () => T): ValueAccessor<T> {\n const accessor = (() => getter()) as ValueAccessor<T>\n Object.defineProperty(accessor, 'current', {\n get: getter,\n enumerable: true,\n })\n return accessor\n}\n","import { ContextEvent } from '@lit/context'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ReactiveController, ReactiveControllerHost } from 'lit'\nimport {\n createMissingQueryClientError,\n queryClientContext,\n} from '../context.js'\n\ntype QueryClientResolutionState =\n | 'pre-connect'\n | 'awaiting-context'\n | 'bound'\n | 'missing'\n\nexport abstract class BaseController<TResult> implements ReactiveController {\n protected result: TResult\n\n private readonly explicitClient?: QueryClient\n private contextClient: QueryClient | undefined\n private contextUnsubscribe: (() => void) | undefined\n\n private connected = false\n private destroyed = false\n private updateQueued = false\n private clientChangeQueued = false\n private connectionAttempt = 0\n private isHostUpdating = false\n private queryClientResolutionState: QueryClientResolutionState\n\n protected constructor(\n protected readonly host: ReactiveControllerHost,\n initialResult: TResult,\n queryClient?: QueryClient,\n ) {\n this.explicitClient = queryClient\n this.result = initialResult\n this.queryClientResolutionState = queryClient ? 'bound' : 'pre-connect'\n\n host.addController(this)\n }\n\n hostConnected(): void {\n if (this.connected || this.destroyed) {\n return\n }\n\n this.connected = true\n let contextResolutionAttempt: number | undefined\n\n if (this.explicitClient) {\n this.queryClientResolutionState = 'bound'\n } else {\n contextResolutionAttempt = ++this.connectionAttempt\n this.beginContextResolution()\n }\n\n // Defer onConnected to ensure subclass constructors complete before\n // lifecycle callbacks access subclass state. This handles the case where\n // addController is called on an already-connected host (e.g., during\n // willUpdate), which synchronously triggers hostConnected before\n // subclass field initialization.\n queueMicrotask(() => {\n if (this.connected && !this.destroyed) {\n this.onConnected()\n }\n })\n\n if (contextResolutionAttempt !== undefined) {\n // Provider-backed controllers on already-connected hosts should finish\n // their deferred onConnected pass before a context client binds.\n this.queueContextResolution(contextResolutionAttempt)\n }\n }\n\n hostDisconnected(): void {\n if (!this.connected) {\n return\n }\n\n this.connected = false\n\n if (!this.explicitClient) {\n this.connectionAttempt += 1\n this.clearContextClient()\n this.updateQueryClientResolutionState('pre-connect')\n }\n\n this.onDisconnected()\n }\n\n hostUpdate(): void {\n if (this.destroyed) {\n return\n }\n\n this.isHostUpdating = true\n try {\n this.onHostUpdate()\n } finally {\n this.isHostUpdating = false\n }\n }\n\n destroy(): void {\n if (this.destroyed) {\n return\n }\n\n this.destroyed = true\n this.connected = false\n this.connectionAttempt += 1\n this.clearContextClient()\n this.queryClientResolutionState = this.explicitClient\n ? 'bound'\n : 'pre-connect'\n this.onDisconnected()\n\n if ('removeController' in this.host) {\n this.host.removeController(this)\n }\n }\n\n protected tryGetQueryClient(): QueryClient | undefined {\n return this.explicitClient ?? this.contextClient\n }\n\n protected getQueryClient(): QueryClient {\n const client = this.tryGetQueryClient()\n if (!client) {\n throw createMissingQueryClientError()\n }\n\n return client\n }\n\n protected setResult(next: TResult): void {\n if (Object.is(this.result, next)) {\n return\n }\n\n this.result = next\n if (!this.isHostUpdating) {\n this.queueUpdate()\n }\n }\n\n get current(): TResult {\n if (this.queryClientResolutionState === 'missing') {\n throw createMissingQueryClientError()\n }\n\n return this.result\n }\n\n protected get connectedState(): boolean {\n return this.connected\n }\n\n protected queueUpdate(): void {\n if (this.updateQueued) {\n return\n }\n\n this.updateQueued = true\n queueMicrotask(() => {\n this.updateQueued = false\n if (!this.destroyed) {\n this.host.requestUpdate()\n }\n })\n }\n\n private queueQueryClientChanged(): void {\n if (this.clientChangeQueued) {\n return\n }\n\n this.clientChangeQueued = true\n queueMicrotask(() => {\n this.clientChangeQueued = false\n if (!this.destroyed) {\n this.onQueryClientChanged()\n }\n })\n }\n\n private beginContextResolution(): void {\n this.clearContextClient()\n this.updateQueryClientResolutionState('awaiting-context')\n }\n\n private queueContextResolution(attempt: number): void {\n queueMicrotask(() => {\n if (\n this.destroyed ||\n !this.connected ||\n attempt !== this.connectionAttempt ||\n this.queryClientResolutionState !== 'awaiting-context'\n ) {\n return\n }\n\n this.dispatchContextRequest(attempt)\n this.queueInitialContextResolutionCompletion(attempt)\n })\n }\n\n private dispatchContextRequest(attempt: number): void {\n if (!('dispatchEvent' in this.host)) {\n return\n }\n\n const contextTarget = this.host as ReactiveControllerHost & EventTarget\n contextTarget.dispatchEvent(\n new ContextEvent(\n queryClientContext,\n contextTarget as unknown as Element,\n (value, unsubscribe) => {\n if (\n this.destroyed ||\n !this.connected ||\n attempt !== this.connectionAttempt\n ) {\n unsubscribe?.()\n return\n }\n\n if (\n this.contextUnsubscribe &&\n this.contextUnsubscribe !== unsubscribe\n ) {\n this.contextUnsubscribe()\n }\n\n const resolutionChanged = this.updateQueryClientResolutionState(\n value === undefined ? 'missing' : 'bound',\n )\n const clientChanged = this.contextClient !== value\n\n this.contextClient = value\n this.contextUnsubscribe = unsubscribe\n\n if (resolutionChanged || clientChanged) {\n this.queueUpdate()\n this.queueQueryClientChanged()\n }\n },\n true,\n ),\n )\n }\n\n private queueInitialContextResolutionCompletion(attempt: number): void {\n queueMicrotask(() => {\n if (\n this.destroyed ||\n !this.connected ||\n attempt !== this.connectionAttempt ||\n this.queryClientResolutionState !== 'awaiting-context'\n ) {\n return\n }\n\n if (this.updateQueryClientResolutionState('missing')) {\n this.queueUpdate()\n this.queueQueryClientChanged()\n }\n })\n }\n\n private clearContextClient(): void {\n this.contextUnsubscribe?.()\n this.contextUnsubscribe = undefined\n this.contextClient = undefined\n }\n\n private updateQueryClientResolutionState(\n nextState: QueryClientResolutionState,\n ): boolean {\n if (this.queryClientResolutionState === nextState) {\n return false\n }\n\n this.queryClientResolutionState = nextState\n return true\n }\n\n protected abstract onConnected(): void\n protected abstract onDisconnected(): void\n protected abstract onHostUpdate(): void\n protected abstract onQueryClientChanged(): void\n}\n","type TrackableQueryObserver<TResult extends object> = {\n options: { notifyOnChangeProps?: unknown }\n trackResult: (result: TResult) => unknown\n}\n\nexport class QueryObserverResultTracker<TResult extends object> {\n private result: TResult | undefined\n private usesTracking = false\n\n reset(): void {\n this.result = undefined\n this.usesTracking = false\n }\n\n update(\n observer: TrackableQueryObserver<TResult> | undefined,\n result: TResult,\n ): TResult | undefined {\n const usesTracking = !!observer && !observer.options.notifyOnChangeProps\n\n if (Object.is(this.result, result) && this.usesTracking === usesTracking) {\n return undefined\n }\n\n this.result = result\n this.usesTracking = usesTracking\n\n return usesTracking ? (observer.trackResult(result) as TResult) : result\n }\n}\n","import {\n InfiniteQueryObserver,\n type DefaultError,\n type DefaultedInfiniteQueryObserverOptions,\n type InfiniteData,\n type InfiniteQueryObserverOptions,\n type InfiniteQueryObserverResult,\n type QueryKey,\n} from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { createMissingQueryClientError } from './context.js'\nimport { BaseController } from './controllers/BaseController.js'\nimport { QueryObserverResultTracker } from './queryObserverResultTracker.js'\n\n/**\n * Options accepted by `createInfiniteQueryController`.\n *\n * This is the Lit adapter shape for `InfiniteQueryObserverOptions`. Pass it\n * directly or through an `Accessor` when the options depend on Lit host state.\n */\nexport type CreateInfiniteQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n>\n\n/**\n * Accessor returned by `createInfiniteQueryController`.\n *\n * Call the accessor or read its `current` property to get the latest infinite\n * query result. The attached methods delegate to the active infinite query\n * observer.\n */\nexport type InfiniteQueryResultAccessor<TData, TError> = ValueAccessor<\n InfiniteQueryObserverResult<TData, TError>\n> & {\n /** Refetches the current infinite query. */\n refetch: InfiniteQueryObserverResult<TData, TError>['refetch']\n /** Fetches the next page for the current infinite query. */\n fetchNextPage: InfiniteQueryObserverResult<TData, TError>['fetchNextPage']\n /** Fetches the previous page for the current infinite query. */\n fetchPreviousPage: InfiniteQueryObserverResult<\n TData,\n TError\n >['fetchPreviousPage']\n /** Removes the controller from its Lit host and unsubscribes observers. */\n destroy: () => void\n}\n\nfunction createPendingInfiniteQueryResult<\n TData,\n TError,\n>(): InfiniteQueryObserverResult<TData, TError> {\n return {\n data: undefined,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n failureReason: null,\n errorUpdateCount: 0,\n isError: false,\n isFetched: false,\n isFetchedAfterMount: false,\n isFetching: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isPaused: false,\n isPending: true,\n isPlaceholderData: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: true,\n isEnabled: true,\n isSuccess: false,\n fetchStatus: 'idle',\n status: 'pending',\n refetch: (() =>\n Promise.reject(\n createMissingQueryClientError(),\n )) as InfiniteQueryObserverResult<TData, TError>['refetch'],\n fetchNextPage: (() =>\n Promise.reject(\n createMissingQueryClientError(),\n )) as InfiniteQueryObserverResult<TData, TError>['fetchNextPage'],\n fetchPreviousPage: (() =>\n Promise.reject(\n createMissingQueryClientError(),\n )) as InfiniteQueryObserverResult<TData, TError>['fetchPreviousPage'],\n hasNextPage: false,\n hasPreviousPage: false,\n isFetchNextPageError: false,\n isFetchingNextPage: false,\n isFetchPreviousPageError: false,\n isFetchingPreviousPage: false,\n } as unknown as InfiniteQueryObserverResult<TData, TError>\n}\n\nclass InfiniteQueryController<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n TPageParam,\n> extends BaseController<InfiniteQueryObserverResult<TData, TError>> {\n private readonly options: Accessor<\n CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >\n private observer:\n | InfiniteQueryObserver<TQueryFnData, TError, TData, TQueryKey, TPageParam>\n | undefined\n private readonly resultTracker = new QueryObserverResultTracker<\n InfiniteQueryObserverResult<TData, TError>\n >()\n private unsubscribe: (() => void) | undefined\n private queryClient: QueryClient | undefined\n\n constructor(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >,\n queryClient?: QueryClient,\n ) {\n super(host, createPendingInfiniteQueryResult(), queryClient)\n this.options = options\n\n if (!queryClient) {\n return\n }\n\n if (typeof options === 'function') {\n return\n }\n\n const defaulted = this.defaultOptions(queryClient)\n const observer = new InfiniteQueryObserver(queryClient, defaulted)\n this.queryClient = queryClient\n this.observer = observer\n this.assignObserverResult(observer.getOptimisticResult(defaulted))\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n this.observer?.updateResult()\n if (this.observer) {\n this.setObserverResult(this.observer.getCurrentResult())\n }\n }\n\n protected onDisconnected(): void {\n this.unsubscribeObserver()\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (typeof this.options !== 'function') {\n return\n }\n\n this.refreshOptions()\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient() || !this.connectedState) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n this.observer?.updateResult()\n if (this.observer) {\n this.setObserverResult(this.observer.getCurrentResult())\n }\n }\n\n refetch: InfiniteQueryObserverResult<TData, TError>['refetch'] = (\n ...args\n ) => {\n if (!this.applyOptions() || !this.observer) {\n return Promise.reject(createMissingQueryClientError())\n }\n\n return this.observer.refetch(...args)\n }\n\n fetchNextPage: InfiniteQueryObserverResult<TData, TError>['fetchNextPage'] = (\n ...args\n ) => {\n if (!this.applyOptions() || !this.observer) {\n return Promise.reject(createMissingQueryClientError())\n }\n\n return this.observer.fetchNextPage(...args)\n }\n\n fetchPreviousPage: InfiniteQueryObserverResult<\n TData,\n TError\n >['fetchPreviousPage'] = (...args) => {\n if (!this.applyOptions() || !this.observer) {\n return Promise.reject(createMissingQueryClientError())\n }\n\n return this.observer.fetchPreviousPage(...args)\n }\n\n readCurrent(): InfiniteQueryObserverResult<TData, TError> {\n if (this.observer) {\n this.assignObserverResult(this.observer.getCurrentResult())\n }\n\n return this.current\n }\n\n private subscribe(): void {\n if (!this.observer) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.observer.subscribe((next) => {\n this.setObserverResult(next)\n })\n }\n\n private unsubscribeObserver(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribeObserver()\n this.queryClient = undefined\n this.observer = undefined\n this.resultTracker.reset()\n this.setResult(createPendingInfiniteQueryResult())\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribeObserver()\n this.queryClient = nextClient\n const options = this.defaultOptions(this.queryClient)\n this.observer = new InfiniteQueryObserver(this.queryClient, options)\n this.setObserverResult(this.observer.getOptimisticResult(options))\n return true\n }\n\n private applyOptions(): boolean {\n if (!this.syncClient() || !this.observer || !this.queryClient) {\n return false\n }\n\n const options = this.defaultOptions(this.queryClient)\n this.observer.setOptions(options)\n return true\n }\n\n private refreshOptions(): boolean {\n if (!this.applyOptions() || !this.observer) {\n return false\n }\n\n this.setObserverResult(this.observer.getCurrentResult())\n return true\n }\n\n private assignObserverResult(\n result: InfiniteQueryObserverResult<TData, TError>,\n ): void {\n const trackedResult = this.resultTracker.update(this.observer, result)\n if (trackedResult) {\n this.result = trackedResult\n }\n }\n\n private setObserverResult(\n result: InfiniteQueryObserverResult<TData, TError>,\n ): void {\n const trackedResult = this.resultTracker.update(this.observer, result)\n if (trackedResult) {\n this.setResult(trackedResult)\n }\n }\n\n private defaultOptions(\n client = this.queryClient,\n ): DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n > {\n if (!client) {\n throw createMissingQueryClientError()\n }\n\n const defaulted = client.defaultQueryOptions(\n readAccessor(this.options),\n ) as DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n ;(defaulted as { _optimisticResults?: 'optimistic' })._optimisticResults =\n 'optimistic'\n return defaulted\n }\n}\n\n/**\n * Creates a Lit reactive controller that subscribes the host to an infinite\n * query.\n *\n * The returned accessor is callable and also exposes `current`, `refetch`,\n * `fetchNextPage`, `fetchPreviousPage`, and `destroy`. When `options` is a\n * function, it is re-read during host updates so query keys and options can\n * follow reactive host state.\n *\n * If `queryClient` is omitted, the controller resolves the client from the\n * nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the infinite query\n * subscription.\n * @param options - Infinite query observer options, or a getter that returns\n * options.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the latest infinite query result with page helper\n * methods.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { createInfiniteQueryController } from '@tanstack/lit-query'\n *\n * class ProjectsView extends LitElement {\n * private readonly projects = createInfiniteQueryController(this, {\n * queryKey: ['projects'],\n * queryFn: ({ pageParam }) => fetchProjects(pageParam),\n * initialPageParam: 0,\n * getNextPageParam: (lastPage) => lastPage.nextCursor,\n * })\n *\n * render() {\n * const query = this.projects()\n *\n * return html`\n * <button ?disabled=${!query.hasNextPage} @click=${() => this.projects.fetchNextPage()}>\n * Load more\n * </button>\n * `\n * }\n * }\n * ```\n */\nexport function createInfiniteQueryController<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >\n >,\n queryClient?: QueryClient,\n): InfiniteQueryResultAccessor<TData, TError> {\n const controller = new InfiniteQueryController(host, options, queryClient)\n\n return Object.assign(\n createValueAccessor(() => controller.readCurrent()),\n {\n refetch: controller.refetch,\n fetchNextPage: controller.fetchNextPage,\n fetchPreviousPage: controller.fetchPreviousPage,\n destroy: () => controller.destroy(),\n },\n )\n}\n","import {\n MutationObserver,\n type DefaultError,\n type MutateFunction,\n type MutationObserverOptions,\n type MutationObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { createMissingQueryClientError } from './context.js'\nimport { BaseController } from './controllers/BaseController.js'\n\n/**\n * Options accepted by `createMutationController`.\n *\n * This is the Lit adapter shape for `MutationObserverOptions`. Pass it directly\n * or through an `Accessor` when the options depend on Lit host state.\n */\nexport type CreateMutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n> = MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>\n\n/**\n * Accessor returned by `createMutationController`.\n *\n * Call the accessor or read its `current` property to get the latest mutation\n * result. The attached methods delegate to the active mutation observer.\n */\nexport type MutationResultAccessor<TData, TError, TVariables, TOnMutateResult> =\n ValueAccessor<\n MutationObserverResult<TData, TError, TVariables, TOnMutateResult>\n > & {\n /**\n * Starts the mutation and swallows the returned promise.\n *\n * Throws synchronously if no `QueryClient` can be resolved.\n */\n mutate: (\n ...args: Parameters<\n MutateFunction<TData, TError, TVariables, TOnMutateResult>\n >\n ) => void\n /**\n * Starts the mutation and returns the observer promise.\n *\n * Rejects if no `QueryClient` can be resolved.\n */\n mutateAsync: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['mutate']\n /** Resets the mutation observer to its idle state. */\n reset: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['reset']\n /** Removes the controller from its Lit host and unsubscribes observers. */\n destroy: () => void\n }\n\nfunction createIdleMutationResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult,\n>(): MutationObserverResult<TData, TError, TVariables, TOnMutateResult> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isError: false,\n isIdle: true,\n isPending: false,\n isPaused: false,\n isSuccess: false,\n status: 'idle',\n submittedAt: 0,\n variables: undefined,\n mutate: (() =>\n Promise.reject(\n createMissingQueryClientError(),\n )) as MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['mutate'],\n reset: (() => undefined) as MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['reset'],\n } as MutationObserverResult<TData, TError, TVariables, TOnMutateResult>\n}\n\nclass MutationController<\n TData,\n TError,\n TVariables,\n TOnMutateResult,\n> extends BaseController<\n MutationObserverResult<TData, TError, TVariables, TOnMutateResult>\n> {\n private readonly options: Accessor<\n CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>\n >\n private observer:\n | MutationObserver<TData, TError, TVariables, TOnMutateResult>\n | undefined\n private unsubscribe: (() => void) | undefined\n private queryClient: QueryClient | undefined\n\n constructor(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>\n >,\n queryClient?: QueryClient,\n ) {\n super(host, createIdleMutationResult(), queryClient)\n this.options = options\n\n if (!queryClient) {\n return\n }\n\n if (typeof options === 'function') {\n return\n }\n\n const observer = new MutationObserver(\n queryClient,\n this.defaultOptions(queryClient),\n )\n this.queryClient = queryClient\n this.observer = observer\n this.result = observer.getCurrentResult()\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n if (this.observer) {\n this.setResult(this.observer.getCurrentResult())\n }\n }\n\n protected onDisconnected(): void {\n this.unsubscribeObserver()\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (typeof this.options !== 'function') {\n return\n }\n\n this.refreshOptions()\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient() || !this.connectedState) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n if (this.observer) {\n this.setResult(this.observer.getCurrentResult())\n }\n }\n\n mutate = (\n ...args: Parameters<\n MutateFunction<TData, TError, TVariables, TOnMutateResult>\n >\n ): void => {\n if (!this.syncClient() || !this.observer) {\n throw createMissingQueryClientError()\n }\n\n void this.observer.mutate(args[0] as TVariables, args[1]).catch(() => {\n // Intentionally swallow in sync mutate path.\n })\n }\n\n mutateAsync: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['mutate'] = (...args) => {\n if (!this.syncClient() || !this.observer) {\n return Promise.reject(createMissingQueryClientError())\n }\n\n return this.observer.mutate(args[0] as TVariables, args[1])\n }\n\n reset: MutationObserverResult<\n TData,\n TError,\n TVariables,\n TOnMutateResult\n >['reset'] = () => {\n if (!this.syncClient() || !this.observer) {\n return\n }\n\n this.observer.reset()\n this.setResult(this.observer.getCurrentResult())\n }\n\n private subscribe(): void {\n if (!this.observer) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.observer.subscribe((next) => {\n this.setResult(next)\n })\n }\n\n private unsubscribeObserver(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribeObserver()\n this.queryClient = undefined\n this.observer = undefined\n this.setResult(createIdleMutationResult())\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribeObserver()\n this.queryClient = nextClient\n this.observer = new MutationObserver(\n this.queryClient,\n this.defaultOptions(this.queryClient),\n )\n this.setResult(this.observer.getCurrentResult())\n return true\n }\n\n private refreshOptions(): boolean {\n if (!this.syncClient() || !this.observer || !this.queryClient) {\n return false\n }\n\n this.observer.setOptions(this.defaultOptions())\n this.setResult(this.observer.getCurrentResult())\n return true\n }\n\n private defaultOptions(\n client = this.queryClient,\n ): MutationObserverOptions<TData, TError, TVariables, TOnMutateResult> {\n if (!client) {\n throw createMissingQueryClientError()\n }\n\n return client.defaultMutationOptions(readAccessor(this.options))\n }\n}\n\n/**\n * Creates a Lit reactive controller that subscribes the host to a mutation.\n *\n * The returned accessor is callable and also exposes `current`, `mutate`,\n * `mutateAsync`, `reset`, and `destroy`. When `options` is a function, it is\n * re-read during host updates so mutation options can follow reactive host\n * state.\n *\n * If `queryClient` is omitted, the controller resolves the client from the\n * nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the mutation\n * subscription.\n * @param options - Mutation observer options, or a getter that returns options.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the latest mutation result with mutation helper\n * methods.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { createMutationController } from '@tanstack/lit-query'\n *\n * class AddTodoForm extends LitElement {\n * private readonly addTodo = createMutationController(this, {\n * mutationFn: (title: string) =>\n * fetch('/api/todos', { method: 'POST', body: JSON.stringify({ title }) }),\n * })\n *\n * render() {\n * const mutation = this.addTodo()\n *\n * return html`\n * <button ?disabled=${mutation.isPending} @click=${() => this.addTodo.mutate('Ship docs')}>\n * Add todo\n * </button>\n * `\n * }\n * }\n * ```\n */\nexport function createMutationController<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>\n >,\n queryClient?: QueryClient,\n): MutationResultAccessor<TData, TError, TVariables, TOnMutateResult> {\n const controller = new MutationController(host, options, queryClient)\n\n return Object.assign(\n createValueAccessor(() => controller.current),\n {\n mutate: controller.mutate,\n mutateAsync: controller.mutateAsync,\n reset: controller.reset,\n destroy: () => controller.destroy(),\n },\n )\n}\n","import {\n QueriesObserver,\n replaceEqualDeep,\n type DefaultError,\n type DefinedQueryObserverResult,\n type OmitKeyof,\n type QueriesObserverOptions,\n type QueryFunction,\n type QueryKey,\n type QueryObserverOptions,\n type QueryObserverResult,\n type ThrowOnError,\n} from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { createMissingQueryClientError } from './context.js'\nimport { BaseController } from './controllers/BaseController.js'\n\n/**\n * Options for one query inside `createQueriesController`.\n *\n * This mirrors `QueryObserverOptions` and is used by the tuple inference that\n * maps each input query to its corresponding result.\n */\nexport type CreateQueriesInput<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>\n\ntype CreateQueriesInputForController<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<CreateQueriesInput<TQueryFnData, TError, TData, TQueryKey>, never>\n\ntype MAXIMUM_DEPTH = 20\n\ntype SkipTokenForCreateQueries = symbol\n\ntype GetCreateQueriesInput<T> = T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n}\n ? CreateQueriesInputForController<TQueryFnData, TError, TData>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? CreateQueriesInputForController<TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? CreateQueriesInputForController<unknown, TError, TData>\n : T extends [infer TQueryFnData, infer TError, infer TData]\n ? CreateQueriesInputForController<TQueryFnData, TError, TData>\n : T extends [infer TQueryFnData, infer TError]\n ? CreateQueriesInputForController<TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? CreateQueriesInputForController<TQueryFnData>\n : T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, infer TQueryKey>\n | SkipTokenForCreateQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? CreateQueriesInputForController<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey\n >\n : CreateQueriesInputForController\n\ntype GetDefinedOrUndefinedCreateQueriesResult<\n T,\n TData,\n TError = unknown,\n> = T extends {\n initialData?: infer TInitialData\n}\n ? unknown extends TInitialData\n ? QueryObserverResult<TData, TError>\n : TInitialData extends TData\n ? DefinedQueryObserverResult<TData, TError>\n : TInitialData extends () => infer TInitialDataResult\n ? unknown extends TInitialDataResult\n ? QueryObserverResult<TData, TError>\n : TInitialDataResult extends TData\n ? DefinedQueryObserverResult<TData, TError>\n : QueryObserverResult<TData, TError>\n : QueryObserverResult<TData, TError>\n : QueryObserverResult<TData, TError>\n\ntype GetCreateQueriesResult<T> = T extends {\n queryFnData: any\n error?: infer TError\n data: infer TData\n}\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TQueryFnData, TError>\n : T extends { data: infer TData; error?: infer TError }\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>\n : T extends [any, infer TError, infer TData]\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>\n : T extends [infer TQueryFnData, infer TError]\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TQueryFnData, TError>\n : T extends [infer TQueryFnData]\n ? GetDefinedOrUndefinedCreateQueriesResult<T, TQueryFnData>\n : T extends {\n queryFn?:\n | QueryFunction<infer TQueryFnData, any>\n | SkipTokenForCreateQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError<any, infer TError, any, any>\n }\n ? GetDefinedOrUndefinedCreateQueriesResult<\n T,\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : QueryObserverResult\n\nexport type CreateQueriesOptions<\n T extends Array<any>,\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<CreateQueriesInputForController>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetCreateQueriesInput<Head>]\n : T extends [infer Head, ...infer Tails]\n ? CreateQueriesOptions<\n [...Tails],\n [...TResults, GetCreateQueriesInput<Head>],\n [...TDepth, 1]\n >\n : ReadonlyArray<unknown> extends T\n ? T\n : T extends Array<\n CreateQueriesInputForController<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n CreateQueriesInputForController<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n >\n : Array<CreateQueriesInputForController>\n\n/**\n * Tuple of query results inferred from the query inputs passed to\n * `createQueriesController`.\n */\nexport type CreateQueriesResults<\n T extends Array<any>,\n TResults extends Array<any> = [],\n TDepth extends ReadonlyArray<number> = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array<QueryObserverResult>\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetCreateQueriesResult<Head>]\n : T extends [infer Head, ...infer Tails]\n ? CreateQueriesResults<\n [...Tails],\n [...TResults, GetCreateQueriesResult<Head>],\n [...TDepth, 1]\n >\n : { [K in keyof T]: GetCreateQueriesResult<T[K]> }\n\n/**\n * Options accepted by `createQueriesController`.\n *\n * `queries` can be a static list or a getter that returns the current list.\n * `combine` can reshape the array of query results into a single value for the\n * returned accessor.\n */\nexport type CreateQueriesControllerOptions<\n TQueryOptions extends Array<any> = Array<any>,\n TCombinedResult = CreateQueriesResults<TQueryOptions>,\n> = {\n /** Query options to observe, or a getter that returns the current options. */\n queries: Accessor<\n | readonly [...CreateQueriesOptions<TQueryOptions>]\n | readonly [\n ...{\n [K in keyof TQueryOptions]: GetCreateQueriesInput<TQueryOptions[K]>\n },\n ]\n >\n /** Optional function that combines the query result array into one value. */\n combine?: (result: CreateQueriesResults<TQueryOptions>) => TCombinedResult\n}\n\n/**\n * Accessor returned by `createQueriesController`.\n *\n * Call the accessor or read its `current` property to get the latest combined\n * value.\n */\nexport type QueriesResultAccessor<TCombinedResult> =\n ValueAccessor<TCombinedResult> & {\n /** Removes the controller from its Lit host and unsubscribes observers. */\n destroy: () => void\n }\n\nfunction createPendingQueryObserverResult(): QueryObserverResult {\n return {\n data: undefined,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n failureReason: null,\n errorUpdateCount: 0,\n isError: false,\n isFetched: false,\n isFetchedAfterMount: false,\n isFetching: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isPaused: false,\n isPending: true,\n isPlaceholderData: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: true,\n isEnabled: true,\n isSuccess: false,\n fetchStatus: 'idle',\n status: 'pending',\n refetch: (() =>\n Promise.reject(\n createMissingQueryClientError(),\n )) as QueryObserverResult['refetch'],\n } as unknown as QueryObserverResult\n}\n\nfunction createPlaceholderQueryObserverResult(\n query: QueryObserverOptions,\n): QueryObserverResult {\n const initialData =\n typeof query.initialData === 'function'\n ? query.initialData()\n : query.initialData\n\n if (initialData === undefined) {\n return createPendingQueryObserverResult()\n }\n\n const data = query.select ? query.select(initialData) : initialData\n const initialDataUpdatedAt =\n typeof query.initialDataUpdatedAt === 'function'\n ? query.initialDataUpdatedAt()\n : query.initialDataUpdatedAt\n\n return {\n ...createPendingQueryObserverResult(),\n data,\n dataUpdatedAt: initialDataUpdatedAt ?? Date.now(),\n isPending: false,\n isInitialLoading: false,\n isLoading: false,\n isSuccess: true,\n status: 'success',\n } as QueryObserverResult\n}\n\nfunction resolveQueriesOptions<TCombinedResult>(\n optionsAccessor: Accessor<\n CreateQueriesControllerOptions<any, TCombinedResult>\n >,\n client: QueryClient,\n): {\n queries: Array<QueryObserverOptions>\n combine: QueriesObserverOptions<TCombinedResult>['combine']\n} {\n const resolvedOptions = readAccessor(optionsAccessor)\n const resolvedQueries = readAccessor(resolvedOptions.queries)\n const combine =\n resolvedOptions.combine as QueriesObserverOptions<TCombinedResult>['combine']\n\n return {\n queries: resolvedQueries.map((query) => {\n const defaulted = client.defaultQueryOptions(\n query as QueryObserverOptions,\n )\n ;(defaulted as { _optimisticResults?: 'optimistic' })._optimisticResults =\n 'optimistic'\n return defaulted\n }),\n combine,\n }\n}\n\nclass QueriesController<\n TQueryOptions extends Array<any>,\n TCombinedResult,\n> extends BaseController<TCombinedResult> {\n private readonly options: Accessor<\n CreateQueriesControllerOptions<TQueryOptions, TCombinedResult>\n >\n private observer: QueriesObserver<TCombinedResult> | undefined\n private unsubscribe: (() => void) | undefined\n private queryClient: QueryClient | undefined\n private queries: Array<QueryObserverOptions> = []\n private combine: QueriesObserverOptions<TCombinedResult>['combine']\n private combinedResult: TCombinedResult | undefined\n private rawResult: Array<QueryObserverResult> = []\n private explicitInitializationError: unknown | undefined\n private placeholderInitialized = false\n private placeholderRetryableFailure = true\n\n constructor(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateQueriesControllerOptions<TQueryOptions, TCombinedResult>\n >,\n queryClient?: QueryClient,\n ) {\n super(host, [] as unknown as TCombinedResult, queryClient)\n this.options = options\n\n queueMicrotask(() => {\n this.placeholderRetryableFailure = false\n })\n\n if (!queryClient) {\n return\n }\n\n if (this.shouldRefreshOnHostUpdate()) {\n return\n }\n\n this.tryInitializeExplicitClient(queryClient)\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n }\n\n protected onDisconnected(): void {\n this.unsubscribeObserver()\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (!this.shouldRefreshOnHostUpdate()) {\n return\n }\n\n if (!this.refreshOptions()) {\n this.setPlaceholderResult()\n }\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient() || !this.connectedState) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n }\n\n private subscribe(): void {\n if (!this.observer) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.observer.subscribe((next) => {\n this.setObserverResult(next)\n })\n }\n\n private tryInitializeExplicitClient(queryClient: QueryClient): boolean {\n try {\n const { queries, combine } = resolveQueriesOptions(\n this.options,\n queryClient,\n )\n this.queries = queries\n this.combine = combine\n const observer = new QueriesObserver(queryClient, this.queries, {\n combine: this.combine,\n } as QueriesObserverOptions<TCombinedResult>)\n this.queryClient = queryClient\n this.observer = observer\n this.assignObserverResult(observer.getCurrentResult(), true)\n this.explicitInitializationError = undefined\n this.placeholderInitialized = true\n return true\n } catch (error) {\n // Retry after construction completes so late host fields used by\n // static queries/combine callbacks can finish initializing first.\n this.explicitInitializationError = error\n this.queryClient = undefined\n this.observer = undefined\n return false\n }\n }\n\n private retryExplicitInitializationIfNeeded(): boolean {\n if (!this.explicitInitializationError || this.shouldRefreshOnHostUpdate()) {\n return false\n }\n\n const explicitClient = this.tryGetQueryClient()\n if (!explicitClient) {\n return false\n }\n\n return this.tryInitializeExplicitClient(explicitClient)\n }\n\n private unsubscribeObserver(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribeObserver()\n this.queryClient = undefined\n this.observer = undefined\n this.queries = []\n this.combine = undefined\n this.combinedResult = undefined\n this.rawResult = []\n this.setPlaceholderResult()\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribeObserver()\n this.queryClient = nextClient\n const { queries, combine } = this.readResolvedOptions()\n this.queries = queries\n this.combine = combine\n this.observer = new QueriesObserver(this.queryClient, this.queries, {\n combine: this.combine,\n } as QueriesObserverOptions<TCombinedResult>)\n this.setObserverResult(this.observer.getCurrentResult(), true)\n this.placeholderInitialized = true\n return true\n }\n\n private refreshOptions(): boolean {\n if (!this.syncClient() || !this.observer) {\n return false\n }\n\n const { queries, combine } = this.readResolvedOptions()\n this.queries = queries\n this.combine = combine\n\n this.observer.setQueries(this.queries, {\n combine: this.combine,\n } as QueriesObserverOptions<TCombinedResult>)\n\n this.setObserverResult(this.observer.getCurrentResult(), true)\n return true\n }\n\n private readResolvedOptions(client = this.queryClient): {\n queries: Array<QueryObserverOptions>\n combine: QueriesObserverOptions<TCombinedResult>['combine']\n } {\n if (!client) {\n throw createMissingQueryClientError()\n }\n\n return resolveQueriesOptions(\n this.options as Accessor<\n CreateQueriesControllerOptions<any, TCombinedResult>\n >,\n client,\n )\n }\n\n private shouldRefreshOnHostUpdate(): boolean {\n if (typeof this.options === 'function') {\n return true\n }\n\n return typeof this.options.queries === 'function'\n }\n\n private createResult(rawResult: Array<QueryObserverResult>): TCombinedResult {\n const trackedResult = this.trackResult(rawResult)\n const combine = this.combine\n\n if (!combine) {\n return trackedResult as TCombinedResult\n }\n\n this.combinedResult = replaceEqualDeep(\n this.combinedResult,\n combine(trackedResult),\n ) as TCombinedResult\n\n return this.combinedResult\n }\n\n private assignObserverResult(\n rawResult: Array<QueryObserverResult>,\n force = false,\n ): void {\n if (!force && this.hasObserverResult(rawResult)) {\n return\n }\n\n this.rawResult = rawResult\n this.result = this.createResult(rawResult)\n }\n\n private setObserverResult(\n rawResult: Array<QueryObserverResult>,\n force = false,\n ): void {\n if (!force && this.hasObserverResult(rawResult)) {\n return\n }\n\n this.rawResult = rawResult\n this.setResult(this.createResult(rawResult))\n }\n\n private hasObserverResult(rawResult: Array<QueryObserverResult>): boolean {\n return (\n this.rawResult.length === rawResult.length &&\n rawResult.every((result, index) =>\n Object.is(this.rawResult[index], result),\n )\n )\n }\n\n private getCurrentObserverResults(): Array<QueryObserverResult> {\n if (!this.observer) {\n return []\n }\n\n return this.observer\n .getObservers()\n .map((observer) => observer.getCurrentResult())\n }\n\n private trackResult(\n rawResult: Array<QueryObserverResult>,\n ): Array<QueryObserverResult> {\n if (!this.observer) {\n return rawResult\n }\n\n const observers = this.observer.getObservers()\n\n return rawResult.map((result, index) => {\n const observer = observers[index]\n\n if (!observer || observer.options.notifyOnChangeProps) {\n return result\n }\n\n return observer.trackResult(result, (accessedProp) => {\n observers.forEach((observer) => {\n observer.trackProp(accessedProp)\n })\n })\n })\n }\n\n private static createPlaceholderResult<TCombinedResult>(\n optionsAccessor: Accessor<\n CreateQueriesControllerOptions<any, TCombinedResult>\n >,\n ): TCombinedResult {\n const resolvedOptions = readAccessor(optionsAccessor)\n const queries = readAccessor(resolvedOptions.queries)\n const placeholders = queries.map((query) =>\n createPlaceholderQueryObserverResult(query as QueryObserverOptions),\n )\n return (\n resolvedOptions.combine\n ? resolvedOptions.combine(placeholders as never)\n : placeholders\n ) as TCombinedResult\n }\n\n readCurrent(): TCombinedResult {\n if (this.retryExplicitInitializationIfNeeded()) {\n return this.current\n }\n\n if (this.explicitInitializationError && !this.placeholderRetryableFailure) {\n throw this.explicitInitializationError\n }\n\n if (!this.queryClient && !this.observer && !this.placeholderInitialized) {\n try {\n // Early reads can happen during class-field initialization, before\n // accessors referenced by queries/combine are ready. Retry normally\n // after construction finishes and only surface errors after that point.\n this.setPlaceholderResult()\n } catch (error) {\n if (!this.placeholderRetryableFailure) {\n throw error\n }\n }\n }\n\n if (this.observer) {\n this.assignObserverResult(this.getCurrentObserverResults())\n }\n\n return this.current\n }\n\n private setPlaceholderResult(): void {\n this.rawResult = []\n this.result = QueriesController.createPlaceholderResult(this.options)\n this.placeholderInitialized = true\n }\n}\n\n/**\n * Creates a Lit reactive controller that subscribes the host to multiple\n * queries.\n *\n * The returned accessor is callable and also exposes `current` and `destroy`.\n * When `options` or `options.queries` is a function, it is re-read during host\n * updates so the query list can follow reactive host state.\n *\n * If `queryClient` is omitted, the controller resolves the client from the\n * nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the queries\n * subscription.\n * @param options - Queries controller options, or a getter that returns options.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the latest query results, or the value returned by\n * `combine`.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { createQueriesController } from '@tanstack/lit-query'\n *\n * class DashboardView extends LitElement {\n * private readonly dashboard = createQueriesController(this, {\n * queries: [\n * { queryKey: ['stats'], queryFn: fetchStats },\n * { queryKey: ['projects'], queryFn: fetchProjects },\n * ],\n * combine: ([stats, projects]) => ({\n * stats: stats.data,\n * projects: projects.data ?? [],\n * isPending: stats.isPending || projects.isPending,\n * }),\n * })\n *\n * render() {\n * const dashboard = this.dashboard()\n * return html`<p>Projects: ${dashboard.projects.length}</p>`\n * }\n * }\n * ```\n */\nexport function createQueriesController<\n TQueryOptions extends Array<any>,\n TCombinedResult = CreateQueriesResults<TQueryOptions>,\n>(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateQueriesControllerOptions<TQueryOptions, TCombinedResult>\n >,\n queryClient?: QueryClient,\n): QueriesResultAccessor<TCombinedResult> {\n const controller = new QueriesController(host, options, queryClient)\n\n return Object.assign(\n createValueAccessor(() => controller.readCurrent()),\n {\n destroy: () => controller.destroy(),\n },\n )\n}\n","import {\n QueryObserver,\n type DefaultError,\n type DefaultedQueryObserverOptions,\n type QueryKey,\n type QueryObserverOptions,\n type QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryClient } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { createMissingQueryClientError } from './context.js'\nimport { BaseController } from './controllers/BaseController.js'\nimport { QueryObserverResultTracker } from './queryObserverResultTracker.js'\n\n/**\n * Options accepted by `createQueryController`.\n *\n * This is the Lit adapter shape for `QueryObserverOptions`. It can be passed\n * directly to `createQueryController`, or wrapped in an `Accessor` when the\n * options depend on Lit host state.\n */\nexport type CreateQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n\n/**\n * Accessor returned by `createQueryController`.\n *\n * Call the accessor or read its `current` property to get the latest query\n * result. The attached methods delegate to the active query observer.\n */\nexport type QueryResultAccessor<TData, TError> = ValueAccessor<\n QueryObserverResult<TData, TError>\n> & {\n /** Refetches the current query. */\n refetch: QueryObserverResult<TData, TError>['refetch']\n /** Resolves with an optimistic query result, fetching first when needed. */\n suspense: () => Promise<QueryObserverResult<TData, TError>>\n /** Removes the controller from its Lit host and unsubscribes observers. */\n destroy: () => void\n}\n\nfunction createPendingQueryResult<TData, TError>(): QueryObserverResult<\n TData,\n TError\n> {\n return {\n data: undefined,\n dataUpdatedAt: 0,\n error: null,\n errorUpdatedAt: 0,\n failureCount: 0,\n failureReason: null,\n errorUpdateCount: 0,\n isError: false,\n isFetched: false,\n isFetchedAfterMount: false,\n isFetching: false,\n isInitialLoading: false,\n isLoading: false,\n isLoadingError: false,\n isPaused: false,\n isPending: true,\n isPlaceholderData: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: true,\n isEnabled: true,\n isSuccess: false,\n fetchStatus: 'idle',\n status: 'pending',\n refetch: (() =>\n Promise.reject(createMissingQueryClientError())) as QueryObserverResult<\n TData,\n TError\n >['refetch'],\n } as unknown as QueryObserverResult<TData, TError>\n}\n\nclass QueryController<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n> extends BaseController<QueryObserverResult<TData, TError>> {\n private readonly options: Accessor<\n CreateQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >\n private observer:\n | QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n | undefined\n private readonly resultTracker = new QueryObserverResultTracker<\n QueryObserverResult<TData, TError>\n >()\n private unsubscribe: (() => void) | undefined\n private queryClient: QueryClient | undefined\n\n constructor(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n queryClient?: QueryClient,\n ) {\n const initialClient = queryClient\n super(host, createPendingQueryResult(), queryClient)\n this.options = options\n\n if (!initialClient) {\n return\n }\n\n if (typeof options === 'function') {\n return\n }\n\n const defaulted = this.defaultOptions(initialClient)\n const observer = new QueryObserver(initialClient, defaulted)\n this.queryClient = initialClient\n this.observer = observer\n this.assignObserverResult(observer.getOptimisticResult(defaulted))\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n this.observer?.updateResult()\n if (this.observer) {\n this.setObserverResult(this.observer.getCurrentResult())\n }\n }\n\n protected onDisconnected(): void {\n this.unsubscribeObserver()\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (typeof this.options !== 'function') {\n return\n }\n\n this.refreshOptions()\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient()) {\n return\n }\n\n if (!this.connectedState) {\n return\n }\n\n this.refreshOptions()\n this.subscribe()\n this.observer?.updateResult()\n if (this.observer) {\n this.setObserverResult(this.observer.getCurrentResult())\n }\n }\n\n refetch: QueryObserverResult<TData, TError>['refetch'] = (...args) => {\n if (!this.applyOptions() || !this.observer) {\n return Promise.reject(createMissingQueryClientError())\n }\n\n return this.observer.refetch(...args)\n }\n\n suspense = async (): Promise<QueryObserverResult<TData, TError>> => {\n if (!this.syncClient() || !this.observer || !this.queryClient) {\n throw createMissingQueryClientError()\n }\n\n const options = this.defaultOptions(this.queryClient)\n this.observer.setOptions(options)\n const optimistic = this.observer.getOptimisticResult(options)\n if (options.enabled !== false && optimistic.isStale) {\n return this.observer.fetchOptimistic(options)\n }\n\n return optimistic\n }\n\n readCurrent(): QueryObserverResult<TData, TError> {\n if (this.observer) {\n this.assignObserverResult(this.observer.getCurrentResult())\n }\n\n return this.current\n }\n\n private subscribe(): void {\n if (!this.observer) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.observer.subscribe((next) => {\n this.setObserverResult(next)\n })\n }\n\n private unsubscribeObserver(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribeObserver()\n this.queryClient = undefined\n this.observer = undefined\n this.resultTracker.reset()\n this.setResult(createPendingQueryResult())\n return false\n }\n\n if (nextClient === this.queryClient && this.observer) {\n return true\n }\n\n this.unsubscribeObserver()\n this.queryClient = nextClient\n const options = this.defaultOptions()\n this.observer = new QueryObserver(this.queryClient, options)\n this.setObserverResult(this.observer.getOptimisticResult(options))\n return true\n }\n\n private applyOptions(): boolean {\n if (!this.syncClient() || !this.observer) {\n return false\n }\n\n const options = this.defaultOptions(this.queryClient)\n this.observer.setOptions(options)\n return true\n }\n\n private refreshOptions(): boolean {\n if (!this.applyOptions() || !this.observer) {\n return false\n }\n\n this.setObserverResult(this.observer.getCurrentResult())\n return true\n }\n\n private assignObserverResult(\n result: QueryObserverResult<TData, TError>,\n ): void {\n const trackedResult = this.resultTracker.update(this.observer, result)\n if (trackedResult) {\n this.result = trackedResult\n }\n }\n\n private setObserverResult(result: QueryObserverResult<TData, TError>): void {\n const trackedResult = this.resultTracker.update(this.observer, result)\n if (trackedResult) {\n this.setResult(trackedResult)\n }\n }\n\n private defaultOptions(\n client = this.queryClient,\n ): DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n > {\n const resolvedClient = client ?? this.tryGetQueryClient()\n if (!resolvedClient) {\n throw createMissingQueryClientError()\n }\n\n this.queryClient = resolvedClient\n const defaulted = resolvedClient.defaultQueryOptions(\n readAccessor(this.options),\n ) as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n ;(defaulted as { _optimisticResults?: 'optimistic' })._optimisticResults =\n 'optimistic'\n return defaulted\n }\n}\n\n/**\n * Creates a Lit reactive controller that subscribes the host to a single query.\n *\n * The returned accessor is callable and also exposes `current`, `refetch`,\n * `suspense`, and `destroy`. When `options` is a function, it is re-read during\n * host updates so query keys and options can follow reactive host state.\n *\n * If `queryClient` is omitted, the controller resolves the client from the\n * nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the query\n * subscription.\n * @param options - Query observer options, or a getter that returns options.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the latest query result with query helper methods.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { createQueryController } from '@tanstack/lit-query'\n *\n * class TodosView extends LitElement {\n * private readonly todos = createQueryController(this, {\n * queryKey: ['todos'],\n * queryFn: async () => fetch('/api/todos').then((r) => r.json()),\n * })\n *\n * render() {\n * const query = this.todos()\n *\n * if (query.isPending) return html`Loading...`\n * if (query.isError) return html`Error`\n *\n * return html`<ul>${query.data.map((todo) => html`<li>${todo.title}</li>`)}</ul>`\n * }\n * }\n * ```\n */\nexport function createQueryController<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n host: ReactiveControllerHost,\n options: Accessor<\n CreateQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>\n >,\n queryClient?: QueryClient,\n): QueryResultAccessor<TData, TError> {\n const controller = new QueryController(host, options, queryClient)\n\n return Object.assign(\n createValueAccessor(() => controller.readCurrent()),\n {\n refetch: controller.refetch,\n suspense: controller.suspense,\n destroy: () => controller.destroy(),\n },\n )\n}\n","import type { QueryClient, QueryFilters } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { BaseController } from './controllers/BaseController.js'\n\n/**\n * Accessor returned by `useIsFetching`.\n *\n * Call the accessor or read its `current` property to get the number of\n * currently fetching queries that match the filters.\n */\nexport type IsFetchingAccessor = ValueAccessor<number> & { destroy: () => void }\n\nclass IsFetchingController extends BaseController<number> {\n private queryClient: QueryClient | undefined\n private unsubscribe: (() => void) | undefined\n\n constructor(\n host: ReactiveControllerHost,\n private readonly filters: Accessor<QueryFilters> = {},\n queryClient?: QueryClient,\n ) {\n super(host, 0, queryClient)\n\n if (!queryClient) {\n return\n }\n\n this.queryClient = queryClient\n this.result = this.computeValue()\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n this.setResult(0)\n return\n }\n\n this.subscribe()\n this.setResult(this.computeValue())\n }\n\n protected onDisconnected(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (typeof this.filters !== 'function') {\n return\n }\n\n this.setResult(this.syncClient() ? this.computeValue() : 0)\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient()) {\n this.setResult(0)\n return\n }\n\n if (this.connectedState) {\n this.subscribe()\n this.setResult(this.computeValue())\n }\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = undefined\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = nextClient\n return true\n }\n\n private subscribe(): void {\n if (!this.queryClient) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.queryClient.getQueryCache().subscribe(() => {\n this.setResult(this.computeValue())\n })\n }\n\n private computeValue(): number {\n if (!this.queryClient) {\n return 0\n }\n\n return this.queryClient.isFetching(readAccessor(this.filters))\n }\n}\n\n/**\n * Creates a Lit reactive controller that tracks how many matching queries are\n * currently fetching.\n *\n * When `filters` is a function, it is re-read during host updates so the count\n * can follow reactive host state. If `queryClient` is omitted, the controller\n * resolves the client from the nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the cache\n * subscription.\n * @param filters - Query filters, or a getter that returns query filters.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the current number of matching fetching queries.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { useIsFetching } from '@tanstack/lit-query'\n *\n * class TodosStatus extends LitElement {\n * private readonly todosFetching = useIsFetching(this, {\n * queryKey: ['todos'],\n * })\n *\n * render() {\n * return html`<span>${this.todosFetching()} active todo fetches</span>`\n * }\n * }\n * ```\n */\nexport function useIsFetching(\n host: ReactiveControllerHost,\n filters: Accessor<QueryFilters> = {},\n queryClient?: QueryClient,\n): IsFetchingAccessor {\n const controller = new IsFetchingController(host, filters, queryClient)\n return Object.assign(\n createValueAccessor(() => controller.current),\n {\n destroy: () => controller.destroy(),\n },\n )\n}\n","import type { MutationFilters, QueryClient } from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { BaseController } from './controllers/BaseController.js'\n\n/**\n * Accessor returned by `useIsMutating`.\n *\n * Call the accessor or read its `current` property to get the number of\n * currently pending mutations that match the filters.\n */\nexport type IsMutatingAccessor = ValueAccessor<number> & { destroy: () => void }\n\nclass IsMutatingController extends BaseController<number> {\n private queryClient: QueryClient | undefined\n private unsubscribe: (() => void) | undefined\n\n constructor(\n host: ReactiveControllerHost,\n private readonly filters: Accessor<MutationFilters> = {},\n queryClient?: QueryClient,\n ) {\n super(host, 0, queryClient)\n\n if (!queryClient) {\n return\n }\n\n this.queryClient = queryClient\n this.result = this.computeValue()\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n this.setResult(0)\n return\n }\n\n this.subscribe()\n this.setResult(this.computeValue())\n }\n\n protected onDisconnected(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (typeof this.filters !== 'function') {\n return\n }\n\n this.setResult(this.syncClient() ? this.computeValue() : 0)\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient()) {\n this.setResult(0)\n return\n }\n\n if (this.connectedState) {\n this.subscribe()\n this.setResult(this.computeValue())\n }\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = undefined\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = nextClient\n return true\n }\n\n private subscribe(): void {\n if (!this.queryClient) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.queryClient.getMutationCache().subscribe(() => {\n this.setResult(this.computeValue())\n })\n }\n\n private computeValue(): number {\n if (!this.queryClient) {\n return 0\n }\n\n return this.queryClient.isMutating(readAccessor(this.filters))\n }\n}\n\n/**\n * Creates a Lit reactive controller that tracks how many matching mutations are\n * currently pending.\n *\n * When `filters` is a function, it is re-read during host updates so the count\n * can follow reactive host state. If `queryClient` is omitted, the controller\n * resolves the client from the nearest connected `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the cache\n * subscription.\n * @param filters - Mutation filters, or a getter that returns mutation filters.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the current number of matching pending mutations.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { useIsMutating } from '@tanstack/lit-query'\n *\n * class MutationStatus extends LitElement {\n * private readonly savesPending = useIsMutating(this, {\n * mutationKey: ['save-project'],\n * })\n *\n * render() {\n * return html`<span>${this.savesPending()} saves pending</span>`\n * }\n * }\n * ```\n */\nexport function useIsMutating(\n host: ReactiveControllerHost,\n filters: Accessor<MutationFilters> = {},\n queryClient?: QueryClient,\n): IsMutatingAccessor {\n const controller = new IsMutatingController(host, filters, queryClient)\n return Object.assign(\n createValueAccessor(() => controller.current),\n {\n destroy: () => controller.destroy(),\n },\n )\n}\n","import {\n replaceEqualDeep,\n type Mutation,\n type MutationFilters,\n type MutationState,\n type QueryClient,\n} from '@tanstack/query-core'\nimport type { ReactiveControllerHost } from 'lit'\nimport {\n createValueAccessor,\n readAccessor,\n type Accessor,\n type ValueAccessor,\n} from './accessor.js'\nimport { BaseController } from './controllers/BaseController.js'\n\n/**\n * Options accepted by `useMutationState`.\n */\nexport type MutationStateOptions<TResult> = {\n /** Filters used to select mutations from the mutation cache. */\n filters?: Accessor<MutationFilters>\n /** Maps each matching mutation to the value returned by the accessor. */\n select?: (mutation: Mutation) => TResult\n}\n\n/**\n * Accessor returned by `useMutationState`.\n *\n * Call the accessor or read its `current` property to get the selected state for\n * matching mutations.\n */\nexport type MutationStateAccessor<TResult> = ValueAccessor<TResult[]> & {\n /** Removes the controller from its Lit host and unsubscribes observers. */\n destroy: () => void\n}\n\nclass MutationStateController<TResult> extends BaseController<TResult[]> {\n private queryClient: QueryClient | undefined\n private unsubscribe: (() => void) | undefined\n\n constructor(\n host: ReactiveControllerHost,\n private readonly options: MutationStateOptions<TResult>,\n queryClient?: QueryClient,\n ) {\n super(host, [], queryClient)\n\n if (!queryClient) {\n return\n }\n\n this.queryClient = queryClient\n this.result = this.computeState()\n }\n\n protected onConnected(): void {\n if (!this.syncClient()) {\n this.setMutationState([])\n return\n }\n\n this.subscribe()\n this.setMutationState(this.computeState())\n }\n\n protected onDisconnected(): void {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.syncClient()\n }\n\n protected onHostUpdate(): void {\n if (!this.shouldRefreshOnHostUpdate()) {\n return\n }\n\n this.setMutationState(this.syncClient() ? this.computeState() : [])\n }\n\n protected onQueryClientChanged(): void {\n if (!this.syncClient()) {\n this.setMutationState([])\n return\n }\n\n if (this.connectedState) {\n this.subscribe()\n this.setMutationState(this.computeState())\n }\n }\n\n private syncClient(): boolean {\n const nextClient = this.tryGetQueryClient()\n if (!nextClient) {\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = undefined\n return false\n }\n\n if (nextClient === this.queryClient) {\n return true\n }\n\n this.unsubscribe?.()\n this.unsubscribe = undefined\n this.queryClient = nextClient\n return true\n }\n\n private subscribe(): void {\n if (!this.queryClient) {\n return\n }\n\n if (this.unsubscribe) {\n return\n }\n\n this.unsubscribe = this.queryClient.getMutationCache().subscribe(() => {\n this.setMutationState(this.computeState())\n })\n }\n\n private setMutationState(next: TResult[]): void {\n this.setResult(replaceEqualDeep(this.result, next))\n }\n\n private shouldRefreshOnHostUpdate(): boolean {\n return (\n typeof this.options.filters === 'function' ||\n typeof this.options.select === 'function'\n )\n }\n\n private computeState(): TResult[] {\n if (!this.queryClient) {\n return []\n }\n\n const filters = this.options.filters\n ? readAccessor(this.options.filters)\n : undefined\n\n const select = this.options.select\n const mutations = this.queryClient.getMutationCache().findAll(filters)\n\n return mutations.map((mutation) => {\n if (select) {\n return select(mutation)\n }\n\n return mutation.state as TResult\n })\n }\n}\n\n/**\n * Creates a Lit reactive controller that selects state from matching mutations\n * in the mutation cache.\n *\n * When `options.filters` is a function, it is re-read during host updates so\n * the selection can follow reactive host state. If `queryClient` is omitted,\n * the controller resolves the client from the nearest connected\n * `QueryClientProvider`.\n *\n * @param host - The Lit reactive controller host that owns the mutation cache\n * subscription.\n * @param options - Mutation state filters and optional selector.\n * @param queryClient - Optional explicit query client. Provide this for\n * controllers that should not resolve a client from Lit context.\n * @returns An accessor for the selected mutation state array.\n *\n * @example\n * ```ts\n * import { LitElement, html } from 'lit'\n * import { useMutationState } from '@tanstack/lit-query'\n *\n * class PendingUploads extends LitElement {\n * private readonly uploads = useMutationState(this, {\n * filters: { mutationKey: ['upload'], status: 'pending' },\n * select: (mutation) => mutation.state.variables as File,\n * })\n *\n * render() {\n * return html`<span>${this.uploads().length} uploads pending</span>`\n * }\n * }\n * ```\n */\nexport function useMutationState<\n TResult = MutationState<unknown, unknown, unknown, unknown>,\n>(\n host: ReactiveControllerHost,\n options: MutationStateOptions<TResult> = {},\n queryClient?: QueryClient,\n): MutationStateAccessor<TResult> {\n const controller = new MutationStateController(host, options, queryClient)\n return Object.assign(\n createValueAccessor(() => controller.current),\n {\n destroy: () => controller.destroy(),\n },\n )\n}\n","import type {\n DataTag,\n DefaultError,\n InitialDataFunction,\n NonUndefinedGuard,\n OmitKeyof,\n QueryFunction,\n QueryKey,\n QueryObserverOptions,\n SkipToken,\n} from '@tanstack/query-core'\n\n/**\n * Query options with `initialData` that guarantees defined query data.\n */\nexport type DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = Omit<\n QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n 'queryFn'\n> & {\n initialData:\n | NonUndefinedGuard<TQueryFnData>\n | (() => NonUndefinedGuard<TQueryFnData>)\n queryFn?: QueryFunction<TQueryFnData, TQueryKey>\n}\n\n/**\n * Query options where `queryFn` is present and not a `skipToken`.\n */\nexport type UnusedSkipTokenOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,\n 'queryFn'\n> & {\n queryFn?: Exclude<\n QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey\n >['queryFn'],\n SkipToken | undefined\n >\n}\n\n/**\n * Query options where `initialData` can be omitted or undefined.\n */\nexport type UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey\n> & {\n initialData?:\n | undefined\n | InitialDataFunction<NonUndefinedGuard<TQueryFnData>>\n | NonUndefinedGuard<TQueryFnData>\n}\n\n/**\n * Brands query options so the `queryKey` carries the query function data and\n * error types across TanStack Query APIs.\n *\n * @param options - Query options to preserve and brand.\n * @returns The same options object with a typed `queryKey`.\n *\n * @example\n * ```ts\n * import { queryOptions } from '@tanstack/lit-query'\n *\n * const todosOptions = queryOptions({\n * queryKey: ['todos'],\n * queryFn: fetchTodos,\n * initialData: [],\n * })\n * ```\n */\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {\n queryKey: DataTag<TQueryKey, TQueryFnData, TError>\n}\n\n/**\n * Brands query options so the `queryKey` carries the query function data and\n * error types across TanStack Query APIs.\n *\n * @param options - Query options to preserve and brand.\n * @returns The same options object with a typed `queryKey`.\n */\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>,\n): UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> & {\n queryKey: DataTag<TQueryKey, TQueryFnData, TError>\n}\n\n/**\n * Brands query options so the `queryKey` carries the query function data and\n * error types across TanStack Query APIs.\n *\n * @param options - Query options to preserve and brand.\n * @returns The same options object with a typed `queryKey`.\n */\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,\n): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {\n queryKey: DataTag<TQueryKey, TQueryFnData, TError>\n}\n\nexport function queryOptions(options: unknown) {\n return options\n}\n","import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InfiniteQueryObserverOptions,\n QueryKey,\n} from '@tanstack/query-core'\n\n/**\n * Brands infinite query options so the `queryKey` carries the infinite query\n * data and error types across TanStack Query APIs.\n *\n * @param options - Infinite query options to preserve and brand.\n * @returns The same options object with a typed `queryKey`.\n *\n * @example\n * ```ts\n * import { infiniteQueryOptions } from '@tanstack/lit-query'\n *\n * const projectsOptions = infiniteQueryOptions({\n * queryKey: ['projects'],\n * queryFn: ({ pageParam }) => fetchProjects(pageParam),\n * initialPageParam: 0,\n * getNextPageParam: (lastPage) => lastPage.nextCursor,\n * })\n * ```\n */\nexport function infiniteQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag<TQueryKey, InfiniteData<TQueryFnData>, TError>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n","import type {\n DefaultError,\n MutationObserverOptions,\n} from '@tanstack/query-core'\n\n/**\n * Preserves and types mutation options for reuse across Lit Query APIs.\n *\n * @param options - Mutation options to preserve.\n * @returns The same options object.\n *\n * @example\n * ```ts\n * import { mutationOptions } from '@tanstack/lit-query'\n *\n * const addTodoOptions = mutationOptions({\n * mutationKey: ['add-todo'],\n * mutationFn: (title: string) => addTodo(title),\n * })\n * ```\n */\nexport function mutationOptions<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TOnMutateResult = unknown,\n>(\n options: MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,\n): MutationObserverOptions<TData, TError, TVariables, TOnMutateResult> {\n return options\n}\n","/* istanbul ignore file */\n\nexport * from '@tanstack/query-core'\n\nexport type { Accessor, ValueAccessor } from './accessor.js'\n\nexport {\n getDefaultQueryClient,\n queryClientContext,\n registerDefaultQueryClient,\n resolveQueryClient,\n unregisterDefaultQueryClient,\n useQueryClient,\n} from './context.js'\n\nexport { QueryClientProvider } from './QueryClientProvider.js'\n\nexport type {\n CreateInfiniteQueryOptions,\n InfiniteQueryResultAccessor,\n} from './createInfiniteQueryController.js'\nexport { createInfiniteQueryController } from './createInfiniteQueryController.js'\n\nexport type {\n CreateMutationOptions,\n MutationResultAccessor,\n} from './createMutationController.js'\nexport { createMutationController } from './createMutationController.js'\n\nexport type {\n CreateQueriesControllerOptions,\n CreateQueriesInput,\n QueriesResultAccessor,\n} from './createQueriesController.js'\nexport { createQueriesController } from './createQueriesController.js'\n\nexport type {\n CreateQueryOptions,\n QueryResultAccessor,\n} from './createQueryController.js'\nexport { createQueryController } from './createQueryController.js'\n\nexport type { IsFetchingAccessor } from './useIsFetching.js'\nexport { useIsFetching } from './useIsFetching.js'\n\nexport type { IsMutatingAccessor } from './useIsMutating.js'\nexport { useIsMutating } from './useIsMutating.js'\n\nexport type {\n MutationStateAccessor,\n MutationStateOptions,\n} from './useMutationState.js'\nexport { useMutationState } from './useMutationState.js'\n\nexport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n UnusedSkipTokenOptions,\n} from './queryOptions.js'\nexport { queryOptions } from './queryOptions.js'\n\nexport { infiniteQueryOptions } from './infiniteQueryOptions.js'\nexport { mutationOptions } from './mutationOptions.js'\n\nexport type {\n InfiniteQueryControllerOptions,\n MutationControllerOptions,\n MutationControllerResult,\n QueriesControllerOptions,\n QueryControllerOptions,\n QueryControllerResult,\n} from './types.js'\n"],"mappings":"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"}
|