@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,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsFetching = useIsFetching;
4
+ const accessor_js_1 = require("./accessor.js");
5
+ const BaseController_js_1 = require("./controllers/BaseController.js");
6
+ class IsFetchingController extends BaseController_js_1.BaseController {
7
+ filters;
8
+ queryClient;
9
+ unsubscribe;
10
+ constructor(host, filters = {}, queryClient) {
11
+ super(host, 0, queryClient);
12
+ this.filters = filters;
13
+ if (!queryClient) {
14
+ return;
15
+ }
16
+ this.queryClient = queryClient;
17
+ this.result = this.computeValue();
18
+ }
19
+ onConnected() {
20
+ if (!this.syncClient()) {
21
+ this.setResult(0);
22
+ return;
23
+ }
24
+ this.subscribe();
25
+ this.setResult(this.computeValue());
26
+ }
27
+ onDisconnected() {
28
+ this.unsubscribe?.();
29
+ this.unsubscribe = undefined;
30
+ this.syncClient();
31
+ }
32
+ onHostUpdate() {
33
+ if (typeof this.filters !== 'function') {
34
+ return;
35
+ }
36
+ this.setResult(this.syncClient() ? this.computeValue() : 0);
37
+ }
38
+ onQueryClientChanged() {
39
+ if (!this.syncClient()) {
40
+ this.setResult(0);
41
+ return;
42
+ }
43
+ if (this.connectedState) {
44
+ this.subscribe();
45
+ this.setResult(this.computeValue());
46
+ }
47
+ }
48
+ syncClient() {
49
+ const nextClient = this.tryGetQueryClient();
50
+ if (!nextClient) {
51
+ this.unsubscribe?.();
52
+ this.unsubscribe = undefined;
53
+ this.queryClient = undefined;
54
+ return false;
55
+ }
56
+ if (nextClient === this.queryClient) {
57
+ return true;
58
+ }
59
+ this.unsubscribe?.();
60
+ this.unsubscribe = undefined;
61
+ this.queryClient = nextClient;
62
+ return true;
63
+ }
64
+ subscribe() {
65
+ if (!this.queryClient) {
66
+ return;
67
+ }
68
+ if (this.unsubscribe) {
69
+ return;
70
+ }
71
+ this.unsubscribe = this.queryClient.getQueryCache().subscribe(() => {
72
+ this.setResult(this.computeValue());
73
+ });
74
+ }
75
+ computeValue() {
76
+ if (!this.queryClient) {
77
+ return 0;
78
+ }
79
+ return this.queryClient.isFetching((0, accessor_js_1.readAccessor)(this.filters));
80
+ }
81
+ }
82
+ /**
83
+ * Creates a Lit reactive controller that tracks how many matching queries are
84
+ * currently fetching.
85
+ *
86
+ * When `filters` is a function, it is re-read during host updates so the count
87
+ * can follow reactive host state. If `queryClient` is omitted, the controller
88
+ * resolves the client from the nearest connected `QueryClientProvider`.
89
+ *
90
+ * @param host - The Lit reactive controller host that owns the cache
91
+ * subscription.
92
+ * @param filters - Query filters, or a getter that returns query filters.
93
+ * @param queryClient - Optional explicit query client. Provide this for
94
+ * controllers that should not resolve a client from Lit context.
95
+ * @returns An accessor for the current number of matching fetching queries.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * import { LitElement, html } from 'lit'
100
+ * import { useIsFetching } from '@tanstack/lit-query'
101
+ *
102
+ * class TodosStatus extends LitElement {
103
+ * private readonly todosFetching = useIsFetching(this, {
104
+ * queryKey: ['todos'],
105
+ * })
106
+ *
107
+ * render() {
108
+ * return html`<span>${this.todosFetching()} active todo fetches</span>`
109
+ * }
110
+ * }
111
+ * ```
112
+ */
113
+ function useIsFetching(host, filters = {}, queryClient) {
114
+ const controller = new IsFetchingController(host, filters, queryClient);
115
+ return Object.assign((0, accessor_js_1.createValueAccessor)(() => controller.current), {
116
+ destroy: () => controller.destroy(),
117
+ });
118
+ }
119
+ //# sourceMappingURL=useIsFetching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsFetching.js","sourceRoot":"","sources":["../src/useIsFetching.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { MutationFilters, QueryClient } from '@tanstack/query-core';
2
+ import type { ReactiveControllerHost } from 'lit' with { "resolution-mode": "import" };
3
+ import { type Accessor, type ValueAccessor } from './accessor.cjs';
4
+ /**
5
+ * Accessor returned by `useIsMutating`.
6
+ *
7
+ * Call the accessor or read its `current` property to get the number of
8
+ * currently pending mutations that match the filters.
9
+ */
10
+ export type IsMutatingAccessor = ValueAccessor<number> & {
11
+ destroy: () => void;
12
+ };
13
+ /**
14
+ * Creates a Lit reactive controller that tracks how many matching mutations are
15
+ * currently pending.
16
+ *
17
+ * When `filters` is a function, it is re-read during host updates so the count
18
+ * can follow reactive host state. If `queryClient` is omitted, the controller
19
+ * resolves the client from the nearest connected `QueryClientProvider`.
20
+ *
21
+ * @param host - The Lit reactive controller host that owns the cache
22
+ * subscription.
23
+ * @param filters - Mutation filters, or a getter that returns mutation filters.
24
+ * @param queryClient - Optional explicit query client. Provide this for
25
+ * controllers that should not resolve a client from Lit context.
26
+ * @returns An accessor for the current number of matching pending mutations.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { LitElement, html } from 'lit'
31
+ * import { useIsMutating } from '@tanstack/lit-query'
32
+ *
33
+ * class MutationStatus extends LitElement {
34
+ * private readonly savesPending = useIsMutating(this, {
35
+ * mutationKey: ['save-project'],
36
+ * })
37
+ *
38
+ * render() {
39
+ * return html`<span>${this.savesPending()} saves pending</span>`
40
+ * }
41
+ * }
42
+ * ```
43
+ */
44
+ export declare function useIsMutating(host: ReactiveControllerHost, filters?: Accessor<MutationFilters>, queryClient?: QueryClient): IsMutatingAccessor;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useIsMutating = useIsMutating;
4
+ const accessor_js_1 = require("./accessor.js");
5
+ const BaseController_js_1 = require("./controllers/BaseController.js");
6
+ class IsMutatingController extends BaseController_js_1.BaseController {
7
+ filters;
8
+ queryClient;
9
+ unsubscribe;
10
+ constructor(host, filters = {}, queryClient) {
11
+ super(host, 0, queryClient);
12
+ this.filters = filters;
13
+ if (!queryClient) {
14
+ return;
15
+ }
16
+ this.queryClient = queryClient;
17
+ this.result = this.computeValue();
18
+ }
19
+ onConnected() {
20
+ if (!this.syncClient()) {
21
+ this.setResult(0);
22
+ return;
23
+ }
24
+ this.subscribe();
25
+ this.setResult(this.computeValue());
26
+ }
27
+ onDisconnected() {
28
+ this.unsubscribe?.();
29
+ this.unsubscribe = undefined;
30
+ this.syncClient();
31
+ }
32
+ onHostUpdate() {
33
+ if (typeof this.filters !== 'function') {
34
+ return;
35
+ }
36
+ this.setResult(this.syncClient() ? this.computeValue() : 0);
37
+ }
38
+ onQueryClientChanged() {
39
+ if (!this.syncClient()) {
40
+ this.setResult(0);
41
+ return;
42
+ }
43
+ if (this.connectedState) {
44
+ this.subscribe();
45
+ this.setResult(this.computeValue());
46
+ }
47
+ }
48
+ syncClient() {
49
+ const nextClient = this.tryGetQueryClient();
50
+ if (!nextClient) {
51
+ this.unsubscribe?.();
52
+ this.unsubscribe = undefined;
53
+ this.queryClient = undefined;
54
+ return false;
55
+ }
56
+ if (nextClient === this.queryClient) {
57
+ return true;
58
+ }
59
+ this.unsubscribe?.();
60
+ this.unsubscribe = undefined;
61
+ this.queryClient = nextClient;
62
+ return true;
63
+ }
64
+ subscribe() {
65
+ if (!this.queryClient) {
66
+ return;
67
+ }
68
+ if (this.unsubscribe) {
69
+ return;
70
+ }
71
+ this.unsubscribe = this.queryClient.getMutationCache().subscribe(() => {
72
+ this.setResult(this.computeValue());
73
+ });
74
+ }
75
+ computeValue() {
76
+ if (!this.queryClient) {
77
+ return 0;
78
+ }
79
+ return this.queryClient.isMutating((0, accessor_js_1.readAccessor)(this.filters));
80
+ }
81
+ }
82
+ /**
83
+ * Creates a Lit reactive controller that tracks how many matching mutations are
84
+ * currently pending.
85
+ *
86
+ * When `filters` is a function, it is re-read during host updates so the count
87
+ * can follow reactive host state. If `queryClient` is omitted, the controller
88
+ * resolves the client from the nearest connected `QueryClientProvider`.
89
+ *
90
+ * @param host - The Lit reactive controller host that owns the cache
91
+ * subscription.
92
+ * @param filters - Mutation filters, or a getter that returns mutation filters.
93
+ * @param queryClient - Optional explicit query client. Provide this for
94
+ * controllers that should not resolve a client from Lit context.
95
+ * @returns An accessor for the current number of matching pending mutations.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * import { LitElement, html } from 'lit'
100
+ * import { useIsMutating } from '@tanstack/lit-query'
101
+ *
102
+ * class MutationStatus extends LitElement {
103
+ * private readonly savesPending = useIsMutating(this, {
104
+ * mutationKey: ['save-project'],
105
+ * })
106
+ *
107
+ * render() {
108
+ * return html`<span>${this.savesPending()} saves pending</span>`
109
+ * }
110
+ * }
111
+ * ```
112
+ */
113
+ function useIsMutating(host, filters = {}, queryClient) {
114
+ const controller = new IsMutatingController(host, filters, queryClient);
115
+ return Object.assign((0, accessor_js_1.createValueAccessor)(() => controller.current), {
116
+ destroy: () => controller.destroy(),
117
+ });
118
+ }
119
+ //# sourceMappingURL=useIsMutating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsMutating.js","sourceRoot":"","sources":["../src/useIsMutating.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { Mutation, MutationFilters, MutationState, QueryClient } from '@tanstack/query-core';
2
+ import type { ReactiveControllerHost } from 'lit' with { "resolution-mode": "import" };
3
+ import { type Accessor, type ValueAccessor } from './accessor.cjs';
4
+ /**
5
+ * Options accepted by `useMutationState`.
6
+ */
7
+ export type MutationStateOptions<TResult> = {
8
+ /** Filters used to select mutations from the mutation cache. */
9
+ filters?: Accessor<MutationFilters>;
10
+ /** Maps each matching mutation to the value returned by the accessor. */
11
+ select?: (mutation: Mutation) => TResult;
12
+ };
13
+ /**
14
+ * Accessor returned by `useMutationState`.
15
+ *
16
+ * Call the accessor or read its `current` property to get the selected state for
17
+ * matching mutations.
18
+ */
19
+ export type MutationStateAccessor<TResult> = ValueAccessor<TResult[]> & {
20
+ /** Removes the controller from its Lit host and unsubscribes observers. */
21
+ destroy: () => void;
22
+ };
23
+ /**
24
+ * Creates a Lit reactive controller that selects state from matching mutations
25
+ * in the mutation cache.
26
+ *
27
+ * When `options.filters` is a function, it is re-read during host updates so
28
+ * the selection can follow reactive host state. If `queryClient` is omitted,
29
+ * the controller resolves the client from the nearest connected
30
+ * `QueryClientProvider`.
31
+ *
32
+ * @param host - The Lit reactive controller host that owns the mutation cache
33
+ * subscription.
34
+ * @param options - Mutation state filters and optional selector.
35
+ * @param queryClient - Optional explicit query client. Provide this for
36
+ * controllers that should not resolve a client from Lit context.
37
+ * @returns An accessor for the selected mutation state array.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import { LitElement, html } from 'lit'
42
+ * import { useMutationState } from '@tanstack/lit-query'
43
+ *
44
+ * class PendingUploads extends LitElement {
45
+ * private readonly uploads = useMutationState(this, {
46
+ * filters: { mutationKey: ['upload'], status: 'pending' },
47
+ * select: (mutation) => mutation.state.variables as File,
48
+ * })
49
+ *
50
+ * render() {
51
+ * return html`<span>${this.uploads().length} uploads pending</span>`
52
+ * }
53
+ * }
54
+ * ```
55
+ */
56
+ export declare function useMutationState<TResult = MutationState<unknown, unknown, unknown, unknown>>(host: ReactiveControllerHost, options?: MutationStateOptions<TResult>, queryClient?: QueryClient): MutationStateAccessor<TResult>;
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMutationState = useMutationState;
4
+ const accessor_js_1 = require("./accessor.js");
5
+ const BaseController_js_1 = require("./controllers/BaseController.js");
6
+ class MutationStateController extends BaseController_js_1.BaseController {
7
+ options;
8
+ queryClient;
9
+ unsubscribe;
10
+ constructor(host, options, queryClient) {
11
+ super(host, [], queryClient);
12
+ this.options = options;
13
+ if (!queryClient) {
14
+ return;
15
+ }
16
+ this.queryClient = queryClient;
17
+ this.result = this.computeState();
18
+ }
19
+ onConnected() {
20
+ if (!this.syncClient()) {
21
+ this.setResult([]);
22
+ return;
23
+ }
24
+ this.subscribe();
25
+ this.setResult(this.computeState());
26
+ }
27
+ onDisconnected() {
28
+ this.unsubscribe?.();
29
+ this.unsubscribe = undefined;
30
+ this.syncClient();
31
+ }
32
+ onHostUpdate() {
33
+ if (!this.shouldRefreshOnHostUpdate()) {
34
+ return;
35
+ }
36
+ this.setResult(this.syncClient() ? this.computeState() : []);
37
+ }
38
+ onQueryClientChanged() {
39
+ if (!this.syncClient()) {
40
+ this.setResult([]);
41
+ return;
42
+ }
43
+ if (this.connectedState) {
44
+ this.subscribe();
45
+ this.setResult(this.computeState());
46
+ }
47
+ }
48
+ syncClient() {
49
+ const nextClient = this.tryGetQueryClient();
50
+ if (!nextClient) {
51
+ this.unsubscribe?.();
52
+ this.unsubscribe = undefined;
53
+ this.queryClient = undefined;
54
+ return false;
55
+ }
56
+ if (nextClient === this.queryClient) {
57
+ return true;
58
+ }
59
+ this.unsubscribe?.();
60
+ this.unsubscribe = undefined;
61
+ this.queryClient = nextClient;
62
+ return true;
63
+ }
64
+ subscribe() {
65
+ if (!this.queryClient) {
66
+ return;
67
+ }
68
+ if (this.unsubscribe) {
69
+ return;
70
+ }
71
+ this.unsubscribe = this.queryClient.getMutationCache().subscribe(() => {
72
+ this.setResult(this.computeState());
73
+ });
74
+ }
75
+ shouldRefreshOnHostUpdate() {
76
+ return (typeof this.options.filters === 'function' ||
77
+ typeof this.options.select === 'function');
78
+ }
79
+ computeState() {
80
+ if (!this.queryClient) {
81
+ return [];
82
+ }
83
+ const filters = this.options.filters
84
+ ? (0, accessor_js_1.readAccessor)(this.options.filters)
85
+ : undefined;
86
+ const select = this.options.select;
87
+ const mutations = this.queryClient.getMutationCache().findAll(filters);
88
+ return mutations.map((mutation) => {
89
+ if (select) {
90
+ return select(mutation);
91
+ }
92
+ return mutation.state;
93
+ });
94
+ }
95
+ }
96
+ /**
97
+ * Creates a Lit reactive controller that selects state from matching mutations
98
+ * in the mutation cache.
99
+ *
100
+ * When `options.filters` is a function, it is re-read during host updates so
101
+ * the selection can follow reactive host state. If `queryClient` is omitted,
102
+ * the controller resolves the client from the nearest connected
103
+ * `QueryClientProvider`.
104
+ *
105
+ * @param host - The Lit reactive controller host that owns the mutation cache
106
+ * subscription.
107
+ * @param options - Mutation state filters and optional selector.
108
+ * @param queryClient - Optional explicit query client. Provide this for
109
+ * controllers that should not resolve a client from Lit context.
110
+ * @returns An accessor for the selected mutation state array.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * import { LitElement, html } from 'lit'
115
+ * import { useMutationState } from '@tanstack/lit-query'
116
+ *
117
+ * class PendingUploads extends LitElement {
118
+ * private readonly uploads = useMutationState(this, {
119
+ * filters: { mutationKey: ['upload'], status: 'pending' },
120
+ * select: (mutation) => mutation.state.variables as File,
121
+ * })
122
+ *
123
+ * render() {
124
+ * return html`<span>${this.uploads().length} uploads pending</span>`
125
+ * }
126
+ * }
127
+ * ```
128
+ */
129
+ function useMutationState(host, options = {}, queryClient) {
130
+ const controller = new MutationStateController(host, options, queryClient);
131
+ return Object.assign((0, accessor_js_1.createValueAccessor)(() => controller.current), {
132
+ destroy: () => controller.destroy(),
133
+ });
134
+ }
135
+ //# sourceMappingURL=useMutationState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMutationState.js","sourceRoot":"","sources":["../src/useMutationState.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,75 @@
1
1
  {
2
2
  "name": "@tanstack/lit-query",
3
- "version": "0.0.1",
4
- "description": "OIDC trusted publishing setup package for @tanstack/lit-query",
5
- "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
10
- }
3
+ "version": "0.2.0",
4
+ "description": "Lit adapter for TanStack Query Core",
5
+ "author": "tannerlinsley",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/TanStack/query.git",
10
+ "directory": "packages/lit-query"
11
+ },
12
+ "homepage": "https://tanstack.com/query",
13
+ "funding": {
14
+ "type": "github",
15
+ "url": "https://github.com/sponsors/tannerlinsley"
16
+ },
17
+ "type": "module",
18
+ "main": "dist-cjs/index.js",
19
+ "module": "dist/index.js",
20
+ "types": "dist/index.d.ts",
21
+ "sideEffects": false,
22
+ "files": [
23
+ "dist",
24
+ "dist-cjs",
25
+ "src/**/*.ts",
26
+ "!src/tests/**/*"
27
+ ],
28
+ "exports": {
29
+ ".": {
30
+ "@tanstack/custom-condition": "./src/index.ts",
31
+ "import": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "require": {
36
+ "types": "./dist-cjs/index.d.cts",
37
+ "default": "./dist-cjs/index.js"
38
+ },
39
+ "default": "./dist/index.js"
40
+ },
41
+ "./package.json": "./package.json"
42
+ },
43
+ "dependencies": {
44
+ "@lit/context": "^1.1.6",
45
+ "lit": "^3.3.1",
46
+ "@tanstack/query-core": "5.100.9"
47
+ },
48
+ "peerDependencies": {
49
+ "@tanstack/query-core": "^5.0.0",
50
+ "lit": ">=2.8.0 <4"
51
+ },
52
+ "devDependencies": {
53
+ "@eslint/js": "^9.36.0",
54
+ "globals": "^17.4.0",
55
+ "typescript-eslint": "^8.54.0"
56
+ },
57
+ "scripts": {
58
+ "compile": "node ../../node_modules/typescript/lib/tsc.js --build",
59
+ "build:deps": "pnpm --dir ../query-core run build",
60
+ "build": "pnpm run build:deps && pnpm run build:esm && pnpm run build:cjs",
61
+ "build:esm": "node ../../node_modules/typescript/lib/tsc.js -p tsconfig.build.json",
62
+ "build:cjs": "node -e \"require('node:fs').rmSync('dist-cjs', { recursive: true, force: true })\" && node ../../node_modules/typescript/lib/tsc.js -p tsconfig.build.cjs.json && node scripts/write-cjs-package.mjs",
63
+ "test:types": "node ../../node_modules/typescript/lib/tsc.js --noEmit",
64
+ "test:eslint": "eslint .",
65
+ "lint:fix": "eslint . --fix",
66
+ "test:lib": "vitest run",
67
+ "test:lib:dev": "vitest",
68
+ "test:watch": "pnpm run test:lib:dev",
69
+ "test:build": "publint --strict && attw --pack && node scripts/check-cjs-types-smoke.mjs",
70
+ "measure:bundle": "pnpm run build && node scripts/measure-bundle.mjs",
71
+ "measure:bundle:raw": "node scripts/measure-bundle.mjs",
72
+ "perf:l3": "pnpm run build && node scripts/l3-stress.mjs",
73
+ "perf:l3:raw": "node scripts/l3-stress.mjs"
74
+ }
75
+ }