@ttt-productions/query-core 0.3.8 → 0.3.9

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.
@@ -8,4 +8,5 @@ export { useFirestoreInfinite, flattenInfiniteData, getInfiniteDataCount } from
8
8
  export { useFirestorePaginated } from './use-firestore-paginated';
9
9
  export type { UseFirestorePaginatedResult } from './use-firestore-paginated';
10
10
  export { useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch, } from './use-firestore-mutations';
11
+ export { useBatchFirestoreDocs, type BatchFirestoreDocsOptions, type BatchFirestoreDocsResult, } from './useBatchFirestoreDocs';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,YAAY,EACV,MAAM,EACN,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
@@ -8,4 +8,5 @@ export { useFirestoreInfinite, flattenInfiniteData, getInfiniteDataCount } from
8
8
  export { useFirestorePaginated } from './use-firestore-paginated';
9
9
  // Mutation Hooks
10
10
  export { useFirestoreSet, useFirestoreUpdate, useFirestoreDelete, useFirestoreBatch, } from './use-firestore-mutations';
11
+ export { useBatchFirestoreDocs, } from './useBatchFirestoreDocs';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB9D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB9D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,GAGtB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { type Firestore } from 'firebase/firestore';
2
+ export type BatchFirestoreDocsOptions = {
3
+ /**
4
+ * Firestore instance to use for queries
5
+ */
6
+ db: Firestore;
7
+ /**
8
+ * Full collection path (e.g., 'publicUsers', 'projects/public')
9
+ */
10
+ collectionPath: string;
11
+ /**
12
+ * Array of document IDs to fetch
13
+ */
14
+ ids: string[];
15
+ /**
16
+ * Query key prefix for individual document cache entries
17
+ * Each document will be cached as [queryKeyPrefix, docId]
18
+ * @example 'publicUser' -> ['publicUser', 'user123']
19
+ */
20
+ queryKeyPrefix: string;
21
+ /**
22
+ * Time in milliseconds to consider data fresh (default: 30 minutes)
23
+ */
24
+ staleTime?: number;
25
+ /**
26
+ * Time in milliseconds to keep unused data in cache (default: 1 hour)
27
+ */
28
+ gcTime?: number;
29
+ /**
30
+ * Whether queries should be enabled (default: true)
31
+ */
32
+ enabled?: boolean;
33
+ };
34
+ export type BatchFirestoreDocsResult<T> = {
35
+ /**
36
+ * Map of docId -> document data
37
+ * Only includes documents that exist in Firestore
38
+ */
39
+ data: Record<string, T>;
40
+ /**
41
+ * True if any batch queries are still loading
42
+ */
43
+ isLoading: boolean;
44
+ /**
45
+ * True if any batch queries have errored
46
+ */
47
+ isError: boolean;
48
+ /**
49
+ * First error from batch queries, if any
50
+ */
51
+ error: Error | null;
52
+ /**
53
+ * Refetch all documents (even cached ones)
54
+ */
55
+ refetch: () => Promise<void>;
56
+ };
57
+ /**
58
+ * Efficiently batch fetch Firestore documents with individual caching
59
+ *
60
+ * Features:
61
+ * - Each document is cached individually for maximum reuse
62
+ * - Only fetches documents that are missing or stale
63
+ * - Respects Firestore's 30-item limit for 'in' queries
64
+ * - Returns combined result as Record<docId, data>
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const { data: users, isLoading } = useBatchFirestoreDocs<PublicUser>({
69
+ * db,
70
+ * collectionPath: 'publicUsers',
71
+ * ids: ['user1', 'user2', 'user3'],
72
+ * queryKeyPrefix: 'publicUser',
73
+ * staleTime: 30 * 60 * 1000, // 30 minutes
74
+ * });
75
+ * // users = { user1: {...}, user2: {...}, user3: {...} }
76
+ * ```
77
+ */
78
+ export declare function useBatchFirestoreDocs<T extends Record<string, any>>({ db, collectionPath, ids, queryKeyPrefix, staleTime, gcTime, enabled, }: BatchFirestoreDocsOptions): BatchFirestoreDocsResult<T>;
79
+ //# sourceMappingURL=useBatchFirestoreDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchFirestoreDocs.d.ts","sourceRoot":"","sources":["../../src/firestore/useBatchFirestoreDocs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAInG,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,EAAE,EAAE,SAAS,CAAC;IAEd;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,GAAG,EAAE,MAAM,EAAE,CAAC;IAEd;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI;IACxC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACnE,EAAE,EACF,cAAc,EACd,GAAG,EACH,cAAc,EACd,SAA0B,EAC1B,MAAuB,EACvB,OAAc,GACf,EAAE,yBAAyB,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAoHzD"}
@@ -0,0 +1,118 @@
1
+ import { useMemo } from 'react';
2
+ import { useQueries, useQueryClient } from '@tanstack/react-query';
3
+ import { collection, getDocs, query, where, documentId } from 'firebase/firestore';
4
+ const FIRESTORE_IN_LIMIT = 30;
5
+ /**
6
+ * Efficiently batch fetch Firestore documents with individual caching
7
+ *
8
+ * Features:
9
+ * - Each document is cached individually for maximum reuse
10
+ * - Only fetches documents that are missing or stale
11
+ * - Respects Firestore's 30-item limit for 'in' queries
12
+ * - Returns combined result as Record<docId, data>
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const { data: users, isLoading } = useBatchFirestoreDocs<PublicUser>({
17
+ * db,
18
+ * collectionPath: 'publicUsers',
19
+ * ids: ['user1', 'user2', 'user3'],
20
+ * queryKeyPrefix: 'publicUser',
21
+ * staleTime: 30 * 60 * 1000, // 30 minutes
22
+ * });
23
+ * // users = { user1: {...}, user2: {...}, user3: {...} }
24
+ * ```
25
+ */
26
+ export function useBatchFirestoreDocs({ db, collectionPath, ids, queryKeyPrefix, staleTime = 30 * 60 * 1000, gcTime = 60 * 60 * 1000, enabled = true, }) {
27
+ const queryClient = useQueryClient();
28
+ // Deduplicate and filter out empty IDs
29
+ const uniqueIds = useMemo(() => {
30
+ return Array.from(new Set(ids.filter(Boolean)));
31
+ }, [ids]);
32
+ // Separate IDs into cached/fresh vs needs-fetch
33
+ const { cachedIds, fetchIds } = useMemo(() => {
34
+ if (!enabled) {
35
+ return { cachedIds: [], fetchIds: [] };
36
+ }
37
+ const cached = [];
38
+ const needsFetch = [];
39
+ for (const id of uniqueIds) {
40
+ const queryKey = [queryKeyPrefix, id];
41
+ const state = queryClient.getQueryState(queryKey);
42
+ // Check if data exists and is still fresh
43
+ if (state?.data && state.dataUpdatedAt && Date.now() - state.dataUpdatedAt < staleTime) {
44
+ cached.push(id);
45
+ }
46
+ else {
47
+ needsFetch.push(id);
48
+ }
49
+ }
50
+ return { cachedIds: cached, fetchIds: needsFetch };
51
+ }, [uniqueIds, queryKeyPrefix, queryClient, staleTime, enabled]);
52
+ // Batch the fetchIds into groups of 30
53
+ const batches = useMemo(() => {
54
+ const result = [];
55
+ for (let i = 0; i < fetchIds.length; i += FIRESTORE_IN_LIMIT) {
56
+ result.push(fetchIds.slice(i, i + FIRESTORE_IN_LIMIT));
57
+ }
58
+ return result;
59
+ }, [fetchIds]);
60
+ // Fetch each batch and populate individual cache entries
61
+ const batchQueries = useQueries({
62
+ queries: batches.map((batch, batchIndex) => ({
63
+ queryKey: [queryKeyPrefix, 'batch', batchIndex, ...batch.sort()],
64
+ queryFn: async () => {
65
+ if (batch.length === 0)
66
+ return [];
67
+ const q = query(collection(db, collectionPath), where(documentId(), 'in', batch));
68
+ const snapshot = await getDocs(q);
69
+ const docs = [];
70
+ // Process each document and update individual cache entries
71
+ snapshot.forEach((doc) => {
72
+ const data = { id: doc.id, ...doc.data() };
73
+ docs.push(data);
74
+ // Populate individual cache entry
75
+ queryClient.setQueryData([queryKeyPrefix, doc.id], data, { updatedAt: Date.now() });
76
+ });
77
+ return docs;
78
+ },
79
+ staleTime,
80
+ gcTime,
81
+ enabled: enabled && batch.length > 0,
82
+ })),
83
+ });
84
+ // Combine results
85
+ const isLoading = batchQueries.some(q => q.isLoading);
86
+ const isError = batchQueries.some(q => q.isError);
87
+ const error = batchQueries.find(q => q.error)?.error || null;
88
+ const data = useMemo(() => {
89
+ const combined = {};
90
+ // Add cached data
91
+ for (const id of cachedIds) {
92
+ const cached = queryClient.getQueryData([queryKeyPrefix, id]);
93
+ if (cached) {
94
+ combined[id] = cached;
95
+ }
96
+ }
97
+ // Add freshly fetched data
98
+ for (const batchQuery of batchQueries) {
99
+ if (batchQuery.data) {
100
+ for (const doc of batchQuery.data) {
101
+ combined[doc.id] = doc;
102
+ }
103
+ }
104
+ }
105
+ return combined;
106
+ }, [cachedIds, batchQueries, queryClient, queryKeyPrefix]);
107
+ const refetch = async () => {
108
+ await Promise.all(batchQueries.map(q => q.refetch()));
109
+ };
110
+ return {
111
+ data,
112
+ isLoading,
113
+ isError,
114
+ error: error,
115
+ refetch,
116
+ };
117
+ }
118
+ //# sourceMappingURL=useBatchFirestoreDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchFirestoreDocs.js","sourceRoot":"","sources":["../../src/firestore/useBatchFirestoreDocs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttt-productions/query-core",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "Shared TanStack Query (React Query) client defaults, query key helpers, and Firestore integration hooks for TTT Productions apps",
5
5
  "repository": {
6
6
  "type": "git",