@tanstack/lit-query 0.0.1 → 0.2.0

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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -43
  3. package/dist/QueryClientProvider.d.ts +85 -0
  4. package/dist/QueryClientProvider.d.ts.map +1 -0
  5. package/dist/QueryClientProvider.js +137 -0
  6. package/dist/QueryClientProvider.js.map +1 -0
  7. package/dist/accessor.d.ts +32 -0
  8. package/dist/accessor.d.ts.map +1 -0
  9. package/dist/accessor.js +12 -0
  10. package/dist/accessor.js.map +1 -0
  11. package/dist/context.d.ts +59 -0
  12. package/dist/context.d.ts.map +1 -0
  13. package/dist/context.js +100 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/controllers/BaseController.d.ts +38 -0
  16. package/dist/controllers/BaseController.d.ts.map +1 -0
  17. package/dist/controllers/BaseController.js +204 -0
  18. package/dist/controllers/BaseController.js.map +1 -0
  19. package/dist/createInfiniteQueryController.d.ts +76 -0
  20. package/dist/createInfiniteQueryController.d.ts.map +1 -0
  21. package/dist/createInfiniteQueryController.js +221 -0
  22. package/dist/createInfiniteQueryController.js.map +1 -0
  23. package/dist/createMutationController.d.ts +79 -0
  24. package/dist/createMutationController.d.ts.map +1 -0
  25. package/dist/createMutationController.js +193 -0
  26. package/dist/createMutationController.js.map +1 -0
  27. package/dist/createQueriesController.d.ts +145 -0
  28. package/dist/createQueriesController.d.ts.map +1 -0
  29. package/dist/createQueriesController.js +302 -0
  30. package/dist/createQueriesController.js.map +1 -0
  31. package/dist/createQueryController.d.ts +67 -0
  32. package/dist/createQueryController.d.ts.map +1 -0
  33. package/dist/createQueryController.js +211 -0
  34. package/dist/createQueryController.js.map +1 -0
  35. package/dist/index.d.ts +24 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +15 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/infiniteQueryOptions.d.ts +21 -0
  40. package/dist/infiniteQueryOptions.d.ts.map +1 -0
  41. package/dist/infiniteQueryOptions.js +22 -0
  42. package/dist/infiniteQueryOptions.js.map +1 -0
  43. package/dist/mutationOptions.d.ts +19 -0
  44. package/dist/mutationOptions.d.ts.map +1 -0
  45. package/dist/mutationOptions.js +20 -0
  46. package/dist/mutationOptions.js.map +1 -0
  47. package/dist/queryOptions.d.ts +62 -0
  48. package/dist/queryOptions.d.ts.map +1 -0
  49. package/dist/queryOptions.js +4 -0
  50. package/dist/queryOptions.js.map +1 -0
  51. package/dist/types.d.ts +31 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +2 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/useIsFetching.d.ts +45 -0
  56. package/dist/useIsFetching.d.ts.map +1 -0
  57. package/dist/useIsFetching.js +116 -0
  58. package/dist/useIsFetching.js.map +1 -0
  59. package/dist/useIsMutating.d.ts +45 -0
  60. package/dist/useIsMutating.d.ts.map +1 -0
  61. package/dist/useIsMutating.js +116 -0
  62. package/dist/useIsMutating.js.map +1 -0
  63. package/dist/useMutationState.d.ts +57 -0
  64. package/dist/useMutationState.d.ts.map +1 -0
  65. package/dist/useMutationState.js +132 -0
  66. package/dist/useMutationState.js.map +1 -0
  67. package/dist-cjs/QueryClientProvider.d.cts +84 -0
  68. package/dist-cjs/QueryClientProvider.js +141 -0
  69. package/dist-cjs/QueryClientProvider.js.map +1 -0
  70. package/dist-cjs/accessor.d.cts +31 -0
  71. package/dist-cjs/accessor.js +16 -0
  72. package/dist-cjs/accessor.js.map +1 -0
  73. package/dist-cjs/context.d.cts +58 -0
  74. package/dist-cjs/context.js +109 -0
  75. package/dist-cjs/context.js.map +1 -0
  76. package/dist-cjs/controllers/BaseController.d.cts +37 -0
  77. package/dist-cjs/controllers/BaseController.js +208 -0
  78. package/dist-cjs/controllers/BaseController.js.map +1 -0
  79. package/dist-cjs/createInfiniteQueryController.d.cts +75 -0
  80. package/dist-cjs/createInfiniteQueryController.js +224 -0
  81. package/dist-cjs/createInfiniteQueryController.js.map +1 -0
  82. package/dist-cjs/createMutationController.d.cts +78 -0
  83. package/dist-cjs/createMutationController.js +196 -0
  84. package/dist-cjs/createMutationController.js.map +1 -0
  85. package/dist-cjs/createQueriesController.d.cts +144 -0
  86. package/dist-cjs/createQueriesController.js +305 -0
  87. package/dist-cjs/createQueriesController.js.map +1 -0
  88. package/dist-cjs/createQueryController.d.cts +66 -0
  89. package/dist-cjs/createQueryController.js +214 -0
  90. package/dist-cjs/createQueryController.js.map +1 -0
  91. package/dist-cjs/index.d.cts +23 -0
  92. package/dist-cjs/index.js +49 -0
  93. package/dist-cjs/index.js.map +1 -0
  94. package/dist-cjs/infiniteQueryOptions.d.cts +20 -0
  95. package/dist-cjs/infiniteQueryOptions.js +25 -0
  96. package/dist-cjs/infiniteQueryOptions.js.map +1 -0
  97. package/dist-cjs/mutationOptions.d.cts +18 -0
  98. package/dist-cjs/mutationOptions.js +23 -0
  99. package/dist-cjs/mutationOptions.js.map +1 -0
  100. package/dist-cjs/package.json +3 -0
  101. package/dist-cjs/queryOptions.d.cts +61 -0
  102. package/dist-cjs/queryOptions.js +7 -0
  103. package/dist-cjs/queryOptions.js.map +1 -0
  104. package/dist-cjs/types.d.cts +30 -0
  105. package/dist-cjs/types.js +3 -0
  106. package/dist-cjs/types.js.map +1 -0
  107. package/dist-cjs/useIsFetching.d.cts +44 -0
  108. package/dist-cjs/useIsFetching.js +119 -0
  109. package/dist-cjs/useIsFetching.js.map +1 -0
  110. package/dist-cjs/useIsMutating.d.cts +44 -0
  111. package/dist-cjs/useIsMutating.js +119 -0
  112. package/dist-cjs/useIsMutating.js.map +1 -0
  113. package/dist-cjs/useMutationState.d.cts +56 -0
  114. package/dist-cjs/useMutationState.js +135 -0
  115. package/dist-cjs/useMutationState.js.map +1 -0
  116. package/package.json +73 -8
  117. package/src/QueryClientProvider.ts +174 -0
  118. package/src/accessor.ts +43 -0
  119. package/src/context.ts +120 -0
  120. package/src/controllers/BaseController.ts +284 -0
  121. package/src/createInfiniteQueryController.ts +394 -0
  122. package/src/createMutationController.ts +361 -0
  123. package/src/createQueriesController.ts +633 -0
  124. package/src/createQueryController.ts +342 -0
  125. package/src/index.ts +72 -0
  126. package/src/infiniteQueryOptions.ts +48 -0
  127. package/src/mutationOptions.ts +31 -0
  128. package/src/queryOptions.ts +143 -0
  129. package/src/types.ts +77 -0
  130. package/src/useIsFetching.ts +159 -0
  131. package/src/useIsMutating.ts +159 -0
  132. package/src/useMutationState.ts +201 -0
@@ -0,0 +1,38 @@
1
+ import type { QueryClient } from '@tanstack/query-core';
2
+ import type { ReactiveController, ReactiveControllerHost } from 'lit';
3
+ export declare abstract class BaseController<TResult> implements ReactiveController {
4
+ protected readonly host: ReactiveControllerHost;
5
+ protected result: TResult;
6
+ private readonly explicitClient?;
7
+ private contextClient;
8
+ private contextUnsubscribe;
9
+ private connected;
10
+ private destroyed;
11
+ private updateQueued;
12
+ private clientChangeQueued;
13
+ private connectionAttempt;
14
+ private queryClientResolutionState;
15
+ protected constructor(host: ReactiveControllerHost, initialResult: TResult, queryClient?: QueryClient);
16
+ hostConnected(): void;
17
+ hostDisconnected(): void;
18
+ hostUpdate(): void;
19
+ destroy(): void;
20
+ protected tryGetQueryClient(): QueryClient | undefined;
21
+ protected getQueryClient(): QueryClient;
22
+ protected setResult(next: TResult): void;
23
+ get current(): TResult;
24
+ protected get connectedState(): boolean;
25
+ protected queueUpdate(): void;
26
+ private queueQueryClientChanged;
27
+ private beginContextResolution;
28
+ private queueContextResolution;
29
+ private dispatchContextRequest;
30
+ private queueInitialContextResolutionCompletion;
31
+ private clearContextClient;
32
+ private updateQueryClientResolutionState;
33
+ protected abstract onConnected(): void;
34
+ protected abstract onDisconnected(): void;
35
+ protected abstract onHostUpdate(): void;
36
+ protected abstract onQueryClientChanged(): void;
37
+ }
38
+ //# sourceMappingURL=BaseController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseController.d.ts","sourceRoot":"","sources":["../../src/controllers/BaseController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAA;AAYrE,8BAAsB,cAAc,CAAC,OAAO,CAAE,YAAW,kBAAkB;IAevE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;IAdjD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAa;IAC7C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,0BAA0B,CAA4B;IAE9D,SAAS,aACY,IAAI,EAAE,sBAAsB,EAC/C,aAAa,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,WAAW;IAS3B,aAAa,IAAI,IAAI;IAiCrB,gBAAgB,IAAI,IAAI;IAgBxB,UAAU,IAAI,IAAI;IAQlB,OAAO,IAAI,IAAI;IAmBf,SAAS,CAAC,iBAAiB,IAAI,WAAW,GAAG,SAAS;IAItD,SAAS,CAAC,cAAc,IAAI,WAAW;IASvC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IASxC,IAAI,OAAO,IAAI,OAAO,CAMrB;IAED,SAAS,KAAK,cAAc,IAAI,OAAO,CAEtC;IAED,SAAS,CAAC,WAAW,IAAI,IAAI;IAc7B,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,CAAC,uCAAuC;IAkB/C,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,gCAAgC;IAWxC,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI;IACtC,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI;IACzC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IACvC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,IAAI;CAChD"}
@@ -0,0 +1,204 @@
1
+ import { ContextEvent } from '@lit/context';
2
+ import { createMissingQueryClientError, queryClientContext, } from '../context.js';
3
+ export class BaseController {
4
+ host;
5
+ result;
6
+ explicitClient;
7
+ contextClient;
8
+ contextUnsubscribe;
9
+ connected = false;
10
+ destroyed = false;
11
+ updateQueued = false;
12
+ clientChangeQueued = false;
13
+ connectionAttempt = 0;
14
+ queryClientResolutionState;
15
+ constructor(host, initialResult, queryClient) {
16
+ this.host = host;
17
+ this.explicitClient = queryClient;
18
+ this.result = initialResult;
19
+ this.queryClientResolutionState = queryClient ? 'bound' : 'pre-connect';
20
+ host.addController(this);
21
+ }
22
+ hostConnected() {
23
+ if (this.connected || this.destroyed) {
24
+ return;
25
+ }
26
+ this.connected = true;
27
+ let contextResolutionAttempt;
28
+ if (this.explicitClient) {
29
+ this.queryClientResolutionState = 'bound';
30
+ }
31
+ else {
32
+ contextResolutionAttempt = ++this.connectionAttempt;
33
+ this.beginContextResolution();
34
+ }
35
+ // Defer onConnected to ensure subclass constructors complete before
36
+ // lifecycle callbacks access subclass state. This handles the case where
37
+ // addController is called on an already-connected host (e.g., during
38
+ // willUpdate), which synchronously triggers hostConnected before
39
+ // subclass field initialization.
40
+ queueMicrotask(() => {
41
+ if (this.connected && !this.destroyed) {
42
+ this.onConnected();
43
+ }
44
+ });
45
+ if (contextResolutionAttempt !== undefined) {
46
+ // Provider-backed controllers on already-connected hosts should finish
47
+ // their deferred onConnected pass before a context client binds.
48
+ this.queueContextResolution(contextResolutionAttempt);
49
+ }
50
+ }
51
+ hostDisconnected() {
52
+ if (!this.connected) {
53
+ return;
54
+ }
55
+ this.connected = false;
56
+ if (!this.explicitClient) {
57
+ this.connectionAttempt += 1;
58
+ this.clearContextClient();
59
+ this.updateQueryClientResolutionState('pre-connect');
60
+ }
61
+ this.onDisconnected();
62
+ }
63
+ hostUpdate() {
64
+ if (this.destroyed) {
65
+ return;
66
+ }
67
+ this.onHostUpdate();
68
+ }
69
+ destroy() {
70
+ if (this.destroyed) {
71
+ return;
72
+ }
73
+ this.destroyed = true;
74
+ this.connected = false;
75
+ this.connectionAttempt += 1;
76
+ this.clearContextClient();
77
+ this.queryClientResolutionState = this.explicitClient
78
+ ? 'bound'
79
+ : 'pre-connect';
80
+ this.onDisconnected();
81
+ if ('removeController' in this.host) {
82
+ this.host.removeController(this);
83
+ }
84
+ }
85
+ tryGetQueryClient() {
86
+ return this.explicitClient ?? this.contextClient;
87
+ }
88
+ getQueryClient() {
89
+ const client = this.tryGetQueryClient();
90
+ if (!client) {
91
+ throw createMissingQueryClientError();
92
+ }
93
+ return client;
94
+ }
95
+ setResult(next) {
96
+ if (Object.is(this.result, next)) {
97
+ return;
98
+ }
99
+ this.result = next;
100
+ this.queueUpdate();
101
+ }
102
+ get current() {
103
+ if (this.queryClientResolutionState === 'missing') {
104
+ throw createMissingQueryClientError();
105
+ }
106
+ return this.result;
107
+ }
108
+ get connectedState() {
109
+ return this.connected;
110
+ }
111
+ queueUpdate() {
112
+ if (this.updateQueued) {
113
+ return;
114
+ }
115
+ this.updateQueued = true;
116
+ queueMicrotask(() => {
117
+ this.updateQueued = false;
118
+ if (!this.destroyed) {
119
+ this.host.requestUpdate();
120
+ }
121
+ });
122
+ }
123
+ queueQueryClientChanged() {
124
+ if (this.clientChangeQueued) {
125
+ return;
126
+ }
127
+ this.clientChangeQueued = true;
128
+ queueMicrotask(() => {
129
+ this.clientChangeQueued = false;
130
+ if (!this.destroyed) {
131
+ this.onQueryClientChanged();
132
+ }
133
+ });
134
+ }
135
+ beginContextResolution() {
136
+ this.clearContextClient();
137
+ this.updateQueryClientResolutionState('awaiting-context');
138
+ }
139
+ queueContextResolution(attempt) {
140
+ queueMicrotask(() => {
141
+ if (this.destroyed ||
142
+ !this.connected ||
143
+ attempt !== this.connectionAttempt ||
144
+ this.queryClientResolutionState !== 'awaiting-context') {
145
+ return;
146
+ }
147
+ this.dispatchContextRequest(attempt);
148
+ this.queueInitialContextResolutionCompletion(attempt);
149
+ });
150
+ }
151
+ dispatchContextRequest(attempt) {
152
+ if (!('dispatchEvent' in this.host)) {
153
+ return;
154
+ }
155
+ const contextTarget = this.host;
156
+ contextTarget.dispatchEvent(new ContextEvent(queryClientContext, contextTarget, (value, unsubscribe) => {
157
+ if (this.destroyed ||
158
+ !this.connected ||
159
+ attempt !== this.connectionAttempt) {
160
+ unsubscribe?.();
161
+ return;
162
+ }
163
+ if (this.contextUnsubscribe &&
164
+ this.contextUnsubscribe !== unsubscribe) {
165
+ this.contextUnsubscribe();
166
+ }
167
+ const resolutionChanged = this.updateQueryClientResolutionState(value === undefined ? 'missing' : 'bound');
168
+ const clientChanged = this.contextClient !== value;
169
+ this.contextClient = value;
170
+ this.contextUnsubscribe = unsubscribe;
171
+ if (resolutionChanged || clientChanged) {
172
+ this.queueUpdate();
173
+ this.queueQueryClientChanged();
174
+ }
175
+ }, true));
176
+ }
177
+ queueInitialContextResolutionCompletion(attempt) {
178
+ queueMicrotask(() => {
179
+ if (this.destroyed ||
180
+ !this.connected ||
181
+ attempt !== this.connectionAttempt ||
182
+ this.queryClientResolutionState !== 'awaiting-context') {
183
+ return;
184
+ }
185
+ if (this.updateQueryClientResolutionState('missing')) {
186
+ this.queueUpdate();
187
+ this.queueQueryClientChanged();
188
+ }
189
+ });
190
+ }
191
+ clearContextClient() {
192
+ this.contextUnsubscribe?.();
193
+ this.contextUnsubscribe = undefined;
194
+ this.contextClient = undefined;
195
+ }
196
+ updateQueryClientResolutionState(nextState) {
197
+ if (this.queryClientResolutionState === nextState) {
198
+ return false;
199
+ }
200
+ this.queryClientResolutionState = nextState;
201
+ return true;
202
+ }
203
+ }
204
+ //# sourceMappingURL=BaseController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../../src/controllers/BaseController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { type DefaultError, type InfiniteData, type InfiniteQueryObserverOptions, type InfiniteQueryObserverResult, type QueryKey } from '@tanstack/query-core';
2
+ import type { QueryClient } from '@tanstack/query-core';
3
+ import type { ReactiveControllerHost } from 'lit';
4
+ import { type Accessor, type ValueAccessor } from './accessor.js';
5
+ /**
6
+ * Options accepted by `createInfiniteQueryController`.
7
+ *
8
+ * This is the Lit adapter shape for `InfiniteQueryObserverOptions`. Pass it
9
+ * directly or through an `Accessor` when the options depend on Lit host state.
10
+ */
11
+ export type CreateInfiniteQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>;
12
+ /**
13
+ * Accessor returned by `createInfiniteQueryController`.
14
+ *
15
+ * Call the accessor or read its `current` property to get the latest infinite
16
+ * query result. The attached methods delegate to the active infinite query
17
+ * observer.
18
+ */
19
+ export type InfiniteQueryResultAccessor<TData, TError> = ValueAccessor<InfiniteQueryObserverResult<TData, TError>> & {
20
+ /** Refetches the current infinite query. */
21
+ refetch: InfiniteQueryObserverResult<TData, TError>['refetch'];
22
+ /** Fetches the next page for the current infinite query. */
23
+ fetchNextPage: InfiniteQueryObserverResult<TData, TError>['fetchNextPage'];
24
+ /** Fetches the previous page for the current infinite query. */
25
+ fetchPreviousPage: InfiniteQueryObserverResult<TData, TError>['fetchPreviousPage'];
26
+ /** Removes the controller from its Lit host and unsubscribes observers. */
27
+ destroy: () => void;
28
+ };
29
+ /**
30
+ * Creates a Lit reactive controller that subscribes the host to an infinite
31
+ * query.
32
+ *
33
+ * The returned accessor is callable and also exposes `current`, `refetch`,
34
+ * `fetchNextPage`, `fetchPreviousPage`, and `destroy`. When `options` is a
35
+ * function, it is re-read during host updates so query keys and options can
36
+ * follow reactive host state.
37
+ *
38
+ * If `queryClient` is omitted, the controller resolves the client from the
39
+ * nearest connected `QueryClientProvider`.
40
+ *
41
+ * @param host - The Lit reactive controller host that owns the infinite query
42
+ * subscription.
43
+ * @param options - Infinite query observer options, or a getter that returns
44
+ * options.
45
+ * @param queryClient - Optional explicit query client. Provide this for
46
+ * controllers that should not resolve a client from Lit context.
47
+ * @returns An accessor for the latest infinite query result with page helper
48
+ * methods.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * import { LitElement, html } from 'lit'
53
+ * import { createInfiniteQueryController } from '@tanstack/lit-query'
54
+ *
55
+ * class ProjectsView extends LitElement {
56
+ * private readonly projects = createInfiniteQueryController(this, {
57
+ * queryKey: ['projects'],
58
+ * queryFn: ({ pageParam }) => fetchProjects(pageParam),
59
+ * initialPageParam: 0,
60
+ * getNextPageParam: (lastPage) => lastPage.nextCursor,
61
+ * })
62
+ *
63
+ * render() {
64
+ * const query = this.projects()
65
+ *
66
+ * return html`
67
+ * <button ?disabled=${!query.hasNextPage} @click=${() => this.projects.fetchNextPage()}>
68
+ * Load more
69
+ * </button>
70
+ * `
71
+ * }
72
+ * }
73
+ * ```
74
+ */
75
+ export declare function createInfiniteQueryController<TQueryFnData = unknown, TError = DefaultError, TData = InfiniteData<TQueryFnData>, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(host: ReactiveControllerHost, options: Accessor<CreateInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>>, queryClient?: QueryClient): InfiniteQueryResultAccessor<TData, TError>;
76
+ //# sourceMappingURL=createInfiniteQueryController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createInfiniteQueryController.d.ts","sourceRoot":"","sources":["../src/createInfiniteQueryController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,eAAe,CAAA;AAItB;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,CACpC,YAAY,GAAG,OAAO,EACtB,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,EAClC,SAAS,SAAS,QAAQ,GAAG,QAAQ,EACrC,UAAU,GAAG,OAAO,IAClB,4BAA4B,CAC9B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,SAAS,EACT,UAAU,CACX,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,CAAC,KAAK,EAAE,MAAM,IAAI,aAAa,CACpE,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAC3C,GAAG;IACF,4CAA4C;IAC5C,OAAO,EAAE,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9D,4DAA4D;IAC5D,aAAa,EAAE,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAA;IAC1E,gEAAgE;IAChE,iBAAiB,EAAE,2BAA2B,CAC5C,KAAK,EACL,MAAM,CACP,CAAC,mBAAmB,CAAC,CAAA;IACtB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAgQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,6BAA6B,CAC3C,YAAY,GAAG,OAAO,EACtB,MAAM,GAAG,YAAY,EACrB,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,EAClC,SAAS,SAAS,QAAQ,GAAG,QAAQ,EACrC,UAAU,GAAG,OAAO,EAEpB,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,QAAQ,CACf,0BAA0B,CACxB,YAAY,EACZ,MAAM,EACN,KAAK,EACL,SAAS,EACT,UAAU,CACX,CACF,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAY5C"}
@@ -0,0 +1,221 @@
1
+ import { InfiniteQueryObserver, } from '@tanstack/query-core';
2
+ import { createValueAccessor, readAccessor, } from './accessor.js';
3
+ import { createMissingQueryClientError } from './context.js';
4
+ import { BaseController } from './controllers/BaseController.js';
5
+ function createPendingInfiniteQueryResult() {
6
+ return {
7
+ data: undefined,
8
+ dataUpdatedAt: 0,
9
+ error: null,
10
+ errorUpdatedAt: 0,
11
+ failureCount: 0,
12
+ failureReason: null,
13
+ errorUpdateCount: 0,
14
+ isError: false,
15
+ isFetched: false,
16
+ isFetchedAfterMount: false,
17
+ isFetching: false,
18
+ isInitialLoading: false,
19
+ isLoading: false,
20
+ isLoadingError: false,
21
+ isPaused: false,
22
+ isPending: true,
23
+ isPlaceholderData: false,
24
+ isRefetchError: false,
25
+ isRefetching: false,
26
+ isStale: true,
27
+ isEnabled: true,
28
+ isSuccess: false,
29
+ fetchStatus: 'idle',
30
+ status: 'pending',
31
+ refetch: (() => Promise.reject(createMissingQueryClientError())),
32
+ fetchNextPage: (() => Promise.reject(createMissingQueryClientError())),
33
+ fetchPreviousPage: (() => Promise.reject(createMissingQueryClientError())),
34
+ hasNextPage: false,
35
+ hasPreviousPage: false,
36
+ isFetchNextPageError: false,
37
+ isFetchingNextPage: false,
38
+ isFetchPreviousPageError: false,
39
+ isFetchingPreviousPage: false,
40
+ promise: Promise.resolve(undefined),
41
+ };
42
+ }
43
+ class InfiniteQueryController extends BaseController {
44
+ options;
45
+ observer;
46
+ unsubscribe;
47
+ queryClient;
48
+ constructor(host, options, queryClient) {
49
+ super(host, createPendingInfiniteQueryResult(), queryClient);
50
+ this.options = options;
51
+ if (!queryClient) {
52
+ return;
53
+ }
54
+ if (typeof options === 'function') {
55
+ return;
56
+ }
57
+ const defaulted = this.defaultOptions(queryClient);
58
+ const observer = new InfiniteQueryObserver(queryClient, defaulted);
59
+ this.queryClient = queryClient;
60
+ this.observer = observer;
61
+ this.result = observer.getOptimisticResult(defaulted);
62
+ }
63
+ onConnected() {
64
+ if (!this.syncClient()) {
65
+ return;
66
+ }
67
+ this.refreshOptions();
68
+ this.subscribe();
69
+ this.observer?.updateResult();
70
+ if (this.observer) {
71
+ this.setResult(this.observer.getCurrentResult());
72
+ }
73
+ }
74
+ onDisconnected() {
75
+ this.unsubscribeObserver();
76
+ this.syncClient();
77
+ }
78
+ onHostUpdate() {
79
+ if (typeof this.options !== 'function') {
80
+ return;
81
+ }
82
+ this.refreshOptions();
83
+ }
84
+ onQueryClientChanged() {
85
+ if (!this.syncClient() || !this.connectedState) {
86
+ return;
87
+ }
88
+ this.refreshOptions();
89
+ this.subscribe();
90
+ this.observer?.updateResult();
91
+ if (this.observer) {
92
+ this.setResult(this.observer.getCurrentResult());
93
+ }
94
+ }
95
+ refetch = (...args) => {
96
+ if (!this.refreshOptions()) {
97
+ return Promise.reject(createMissingQueryClientError());
98
+ }
99
+ return this.result.refetch(...args);
100
+ };
101
+ fetchNextPage = (...args) => {
102
+ if (!this.refreshOptions()) {
103
+ return Promise.reject(createMissingQueryClientError());
104
+ }
105
+ return this.result.fetchNextPage(...args);
106
+ };
107
+ fetchPreviousPage = (...args) => {
108
+ if (!this.refreshOptions()) {
109
+ return Promise.reject(createMissingQueryClientError());
110
+ }
111
+ return this.result.fetchPreviousPage(...args);
112
+ };
113
+ subscribe() {
114
+ if (!this.observer) {
115
+ return;
116
+ }
117
+ if (this.unsubscribe) {
118
+ return;
119
+ }
120
+ this.unsubscribe = this.observer.subscribe((next) => {
121
+ this.setResult(next);
122
+ });
123
+ }
124
+ unsubscribeObserver() {
125
+ this.unsubscribe?.();
126
+ this.unsubscribe = undefined;
127
+ }
128
+ syncClient() {
129
+ const nextClient = this.tryGetQueryClient();
130
+ if (!nextClient) {
131
+ this.unsubscribeObserver();
132
+ this.queryClient = undefined;
133
+ this.observer = undefined;
134
+ this.setResult(createPendingInfiniteQueryResult());
135
+ return false;
136
+ }
137
+ if (nextClient === this.queryClient) {
138
+ return true;
139
+ }
140
+ this.unsubscribeObserver();
141
+ this.queryClient = nextClient;
142
+ const options = this.defaultOptions(this.queryClient);
143
+ this.observer = new InfiniteQueryObserver(this.queryClient, options);
144
+ this.setResult(this.observer.getOptimisticResult(options));
145
+ return true;
146
+ }
147
+ refreshOptions() {
148
+ if (!this.syncClient() || !this.observer || !this.queryClient) {
149
+ return false;
150
+ }
151
+ const options = this.defaultOptions(this.queryClient);
152
+ this.observer.setOptions(options);
153
+ this.setResult(this.observer.getOptimisticResult(options));
154
+ return true;
155
+ }
156
+ defaultOptions(client = this.queryClient) {
157
+ if (!client) {
158
+ throw createMissingQueryClientError();
159
+ }
160
+ const defaulted = client.defaultQueryOptions(readAccessor(this.options));
161
+ defaulted._optimisticResults =
162
+ 'optimistic';
163
+ return defaulted;
164
+ }
165
+ }
166
+ /**
167
+ * Creates a Lit reactive controller that subscribes the host to an infinite
168
+ * query.
169
+ *
170
+ * The returned accessor is callable and also exposes `current`, `refetch`,
171
+ * `fetchNextPage`, `fetchPreviousPage`, and `destroy`. When `options` is a
172
+ * function, it is re-read during host updates so query keys and options can
173
+ * follow reactive host state.
174
+ *
175
+ * If `queryClient` is omitted, the controller resolves the client from the
176
+ * nearest connected `QueryClientProvider`.
177
+ *
178
+ * @param host - The Lit reactive controller host that owns the infinite query
179
+ * subscription.
180
+ * @param options - Infinite query observer options, or a getter that returns
181
+ * options.
182
+ * @param queryClient - Optional explicit query client. Provide this for
183
+ * controllers that should not resolve a client from Lit context.
184
+ * @returns An accessor for the latest infinite query result with page helper
185
+ * methods.
186
+ *
187
+ * @example
188
+ * ```ts
189
+ * import { LitElement, html } from 'lit'
190
+ * import { createInfiniteQueryController } from '@tanstack/lit-query'
191
+ *
192
+ * class ProjectsView extends LitElement {
193
+ * private readonly projects = createInfiniteQueryController(this, {
194
+ * queryKey: ['projects'],
195
+ * queryFn: ({ pageParam }) => fetchProjects(pageParam),
196
+ * initialPageParam: 0,
197
+ * getNextPageParam: (lastPage) => lastPage.nextCursor,
198
+ * })
199
+ *
200
+ * render() {
201
+ * const query = this.projects()
202
+ *
203
+ * return html`
204
+ * <button ?disabled=${!query.hasNextPage} @click=${() => this.projects.fetchNextPage()}>
205
+ * Load more
206
+ * </button>
207
+ * `
208
+ * }
209
+ * }
210
+ * ```
211
+ */
212
+ export function createInfiniteQueryController(host, options, queryClient) {
213
+ const controller = new InfiniteQueryController(host, options, queryClient);
214
+ return Object.assign(createValueAccessor(() => controller.current), {
215
+ refetch: controller.refetch,
216
+ fetchNextPage: controller.fetchNextPage,
217
+ fetchPreviousPage: controller.fetchPreviousPage,
218
+ destroy: () => controller.destroy(),
219
+ });
220
+ }
221
+ //# sourceMappingURL=createInfiniteQueryController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createInfiniteQueryController.js","sourceRoot":"","sources":["../src/createInfiniteQueryController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { type DefaultError, type MutateOptions, type MutationObserverOptions, type MutationObserverResult } from '@tanstack/query-core';
2
+ import type { QueryClient } from '@tanstack/query-core';
3
+ import type { ReactiveControllerHost } from 'lit';
4
+ import { type Accessor, type ValueAccessor } from './accessor.js';
5
+ /**
6
+ * Options accepted by `createMutationController`.
7
+ *
8
+ * This is the Lit adapter shape for `MutationObserverOptions`. Pass it directly
9
+ * or through an `Accessor` when the options depend on Lit host state.
10
+ */
11
+ export type CreateMutationOptions<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown> = MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>;
12
+ /**
13
+ * Accessor returned by `createMutationController`.
14
+ *
15
+ * Call the accessor or read its `current` property to get the latest mutation
16
+ * result. The attached methods delegate to the active mutation observer.
17
+ */
18
+ export type MutationResultAccessor<TData, TError, TVariables, TOnMutateResult> = ValueAccessor<MutationObserverResult<TData, TError, TVariables, TOnMutateResult>> & {
19
+ /**
20
+ * Starts the mutation and swallows the returned promise.
21
+ *
22
+ * Throws synchronously if no `QueryClient` can be resolved.
23
+ */
24
+ mutate: (variables: TVariables, options?: MutateOptions<TData, TError, TVariables, TOnMutateResult>) => void;
25
+ /**
26
+ * Starts the mutation and returns the observer promise.
27
+ *
28
+ * Rejects if no `QueryClient` can be resolved.
29
+ */
30
+ mutateAsync: MutationObserverResult<TData, TError, TVariables, TOnMutateResult>['mutate'];
31
+ /** Resets the mutation observer to its idle state. */
32
+ reset: MutationObserverResult<TData, TError, TVariables, TOnMutateResult>['reset'];
33
+ /** Removes the controller from its Lit host and unsubscribes observers. */
34
+ destroy: () => void;
35
+ };
36
+ /**
37
+ * Creates a Lit reactive controller that subscribes the host to a mutation.
38
+ *
39
+ * The returned accessor is callable and also exposes `current`, `mutate`,
40
+ * `mutateAsync`, `reset`, and `destroy`. When `options` is a function, it is
41
+ * re-read during host updates so mutation options can follow reactive host
42
+ * state.
43
+ *
44
+ * If `queryClient` is omitted, the controller resolves the client from the
45
+ * nearest connected `QueryClientProvider`.
46
+ *
47
+ * @param host - The Lit reactive controller host that owns the mutation
48
+ * subscription.
49
+ * @param options - Mutation observer options, or a getter that returns options.
50
+ * @param queryClient - Optional explicit query client. Provide this for
51
+ * controllers that should not resolve a client from Lit context.
52
+ * @returns An accessor for the latest mutation result with mutation helper
53
+ * methods.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { LitElement, html } from 'lit'
58
+ * import { createMutationController } from '@tanstack/lit-query'
59
+ *
60
+ * class AddTodoForm extends LitElement {
61
+ * private readonly addTodo = createMutationController(this, {
62
+ * mutationFn: (title: string) =>
63
+ * fetch('/api/todos', { method: 'POST', body: JSON.stringify({ title }) }),
64
+ * })
65
+ *
66
+ * render() {
67
+ * const mutation = this.addTodo()
68
+ *
69
+ * return html`
70
+ * <button ?disabled=${mutation.isPending} @click=${() => this.addTodo.mutate('Ship docs')}>
71
+ * Add todo
72
+ * </button>
73
+ * `
74
+ * }
75
+ * }
76
+ * ```
77
+ */
78
+ export declare function createMutationController<TData = unknown, TError = DefaultError, TVariables = void, TOnMutateResult = unknown>(host: ReactiveControllerHost, options: Accessor<CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>>, queryClient?: QueryClient): MutationResultAccessor<TData, TError, TVariables, TOnMutateResult>;
79
+ //# sourceMappingURL=createMutationController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMutationController.d.ts","sourceRoot":"","sources":["../src/createMutationController.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,eAAe,CAAA;AAItB;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,CAC/B,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,YAAY,EACrB,UAAU,GAAG,IAAI,EACjB,eAAe,GAAG,OAAO,IACvB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,IAC3E,aAAa,CACX,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CACnE,GAAG;IACF;;;;OAIG;IACH,MAAM,EAAE,CACN,SAAS,EAAE,UAAU,EACrB,OAAO,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,KAChE,IAAI,CAAA;IACT;;;;OAIG;IACH,WAAW,EAAE,sBAAsB,CACjC,KAAK,EACL,MAAM,EACN,UAAU,EACV,eAAe,CAChB,CAAC,QAAQ,CAAC,CAAA;IACX,sDAAsD;IACtD,KAAK,EAAE,sBAAsB,CAC3B,KAAK,EACL,MAAM,EACN,UAAU,EACV,eAAe,CAChB,CAAC,OAAO,CAAC,CAAA;IACV,2EAA2E;IAC3E,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAiOH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,GAAG,OAAO,EACf,MAAM,GAAG,YAAY,EACrB,UAAU,GAAG,IAAI,EACjB,eAAe,GAAG,OAAO,EAEzB,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,QAAQ,CACf,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAClE,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAYpE"}